Gefunden für avr timer compare - Zum Elektronik Forum |
1 - AVR-Assemblercode von Atmega88 auf -8 umstricken -- AVR-Assemblercode von Atmega88 auf -8 umstricken | |||
| |||
2 - GSM-Fernschalter Funktionen verändern über µC? -- GSM-Fernschalter Funktionen verändern über µC? | |||
Hallo,
Da ich noch in den Kinderschuhen stecke was µC Betrifft, bräuchte ich eure Hilfe. Habe ein Problem, ich würde gerne ein GSM Fernschaltmodul von Elektor aufbauen hier http://www.elektor.de/jahrgang/2008/november/gsm-f... ist das Projekt einmal beschrieben. Nun ist es dort so das beim ansteuern das ersten Relais vom µC ATmega8 nur eine Sekunde geschaltet wird. Da ich am ersten Ausgang aber gerne die Standheizung für ca. 1800 Sekunden (30 Minuten) ansteuern würde, wollte ich fragen ob es möglich ist die Firmware die es bei Elektor zum Download gibt dahin gehend um zuschreiben? Meine Überlegung: Der Standard ist folgender: Exit1 Lässt sich immer nur für eine Sekunde ansteuern. Exit2 ist Toggelfähig und kann per Jumper umgeschaltet werden auf eine Sekunde ansteuern Exit3 ist über einen Timer der am µC angeschlossen ist Steuerbar dort lässt sich zwischen 1, 5, 10, 15, 20, 30, 45, 60, 90 und 120 Minuten schalten. So hätte ich es gerne: Kann man den AVR so umschreiben / Was muss ich umschreiben das: EXIT1 den Timer bekommt (halt darüber die Dauer... | |||
3 - Rechteckgenerator mit ATmega8 \"verschluckt sich\" -- Rechteckgenerator mit ATmega8 \verschluckt sich\ | |||
Ich verstehe auch nicht ganz, warum das OCR immer neugeschrieben wird. Dabei kann es zu solchen Sprüngen kommen!
Mach doch einen Vergleich mit dem alten Wert des ADUs, und nur wenn der sich wirklich geändert hat, dann auch OCR updaten. Sonst ist das murks. Wenn z.b. der Timer TCNT auf 10 steht, und der neue Wert auf 9 gesetzt wird, dann rattert der bis 0xffff durch. Da entstehen die Fehler. Zudem würde in solchen Fällen eine Simulation helfen. Du kannst auch durch Basic erzeugte Objektdateien im AVR-Studio laden und simulieren. Edit2: Das Highbyte muss zuerst geschrieben werden, ist hier aber auch korrekt gemacht worden. Ich würde dafür sorgen, z.b. im Compare-Match Interrupt, dass erst nach diesem Interrupt ein neuer Vergleichswert geladen werden darf. [ Diese Nachricht wurde geändert von: DonComi am 20 Mär 2008 19:15 ] [ Diese Nachricht wurde geändert von: DonComi am 20 Mär 2008 19:16 ] [ Diese Nachricht wurde geändert von: DonComi am 20 Mär 2008 19:17 ]... | |||
4 - PWM beim ATMega 8 -- PWM beim ATMega 8 | |||
Hallo Leute,
ich möchte einen Servo mit einem Atmega8 ansteuern. Damit das Ausgangssignal so genau wie möglich ist, wollte ich die Compare Unit vom 16Bit Timer nutzen. Wenn ich das Datenblatt richtig verstanden habe, kann die Unit direkt auf ein Ausgangspin zugreifen und ich wäre nicht mehr Softwareabhängig. (Prozessor läuft mit 1MHz) Es sollte so ablaufen: Ich schreibe in OCR1AH / OCR1AL einen Wert. Lösche den Timer (TCNT1H / TCNT1L). Und setze den Ausgang (B1) auf „1“. Wenn der Vergleicher abgelaufen ist, soll er den Ausgang wieder auf „0“ setzen (nach 1,5ms). Nach etwa 20ms (dieser Teil des Programms ist noch nicht fertig) soll wieder alles von vorn beginnen. Im AVR-Studio funktionert es, aber am Prozessorausgang liegt immer „0“ an! ![]() Besser gesagt: ich habe es so geschrieben, dass es im AVR-Studio läuft! ![]() Das die Lösung im Datenblatt liegen könnte, weiß ich! Es sind nur eine Menge Seiten und alle auf Englisch. Falls mir also jemand direkt eine Lösung vorschlagen kann, wäre das sehr hilfreich. Mein Testprogramm: .NOLIST .INCLUDE "C:\m008def.inc" .LIST .def Temp1 = R16 .def Temp2 = R17 .def Data = ... | |||
5 - DMX-Dimmer: DMX auslesen und Phasenanschnitt zu gleich? -- DMX-Dimmer: DMX auslesen und Phasenanschnitt zu gleich? | |||
Die Timer-counter laufen von selbst, haben entweder 8 oder 16 bit und werden vom Prozessortakt über einen programmierbaren Vorteiler oder extern übner einen Eingang getaktet. Wenn du nichts resettest überläuft der Zähler einfach beim Maximalwert und beginnt wieder von 0. Resetten heisst ganz einfach das Zählerregister mit irgendeinem Startwert überschreiben. Damit die Timer so laufen wie man es braucht müssen sie passend initialisiert werden. Welche Register genau welche Daten bekommen sollen steht ausführlich im Datenblatt das gerne vollständig gelesen werden möchte. Interruptroutinen sind kleine Programmteile die aufgrund vordefinierter Ereignisse sofort ausgeführt werden wenn ebendieses Ereignis auftritt. Die Ausführung des restlichen Programms wird dabei so lange unterbrochen. In einem AVR gibt es eine Vielzahl von Interruptquellen, wie z.B. Timer overflow(Timer überläuft Maximalwert), timer compare match (timer-zähler erreicht vordefinierten Wert), Pin change interrupt(Zustand eines I/O- Pins ändert sich) und noch sehr viele mehr. Interrupts sind immer dann sehr nützlich wenn man zu einem bestimmten Zeitpunkt oder nach einem bestimmten Ereignis etwas tun muss, aber nicht dauernd durch Statusabfragen Zeit Rechenzeit verheizen möchte/darf. ... |
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 13 Beiträge im Durchschnitt pro Tag heute wurden bisher 2 Beiträge verfasst 24 Besucher in den letzten 60 Sekunden alle 2.50 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |