Hi ich möchte mit einem Mega32 ein 100ms oder 200ms DCF Signal ausmessen, das jede Sekunde einmal gesendet wird. Ich möchte Timer1 mit der fallenden Flanke des Signals starten und mit steigender Flanke soll der Zählwert kopiert werden(+ Interrupt). Geht aber irgendwie nicht. Muss Ich T1 und ICP1 pins zusammenschalten? Wie muss ich die Timer/Counter in Bascom richtig einstellen (8Mhz takt)? Danke! Gruß Uwe
Ich weis nicht ob es nur für mich unverständlich geschrieben ist oder ob du da was verwechselt hast: Das Signal (die Uhrzeit ?) wird nicht jede Sekunde gesendet. Es wird jede Minute gesendet. Pro Sekunde wird 1 Bit gesendet. Pins musst du keine Zusamenschalten. Du musst mit einen Timer jede Sekunde einen Interrupt auslösen, mit dem anderen misst du die Zeit bis zur L/H Flanke. Dann kannst du entscheiden ob es eine 1 oder eine 0 war.
Schau dir mal im Datenblatt des AVRs das Input-Capture von Timer1 an. In der Initialisierung schaltet man den ICP-Interrupt frei und stellt auf steigende Flanke. Natürlich muss man noch den Timer mit geeignetem Vorteiler starten. In der ISR liest man das ICP-Register (16-Bit) aus, subtrahiert davon den (gemerkten) vorherigen Wert und schaltet die Flanke für die nächste Messung um. Man erhält nun abwechselnd Werte von 100 oder 200ms (gültige Bits) bzw. 800-900ms (Pause zwischen 2 Bits) oder 1800-1900ms (Synchronpause zwischen 2 Telegrammen). Beim Auftreten der Syncpause wird der Shiftbuffer (nach Sicherung zum Auswerten) gelöscht, bei gültige Bitbreiten schiebt man das Bit in den Shiftbuffer. Falls man das noch nicht ganz verstanden hat, schaut man in der Codesammlung nach, da gibt es mindestens 1 gutes Beispiel. http://www.mikrocontroller.net/forum/read-4-23408.html#new ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.