Ups, dass das BCD kodiert sein könnte, habe ich nicht bedacht.
Daher von mir ein großes zu Kreuze kriechendes SORRY!
Hallo,
sowohl die Minuten- als auch die Stundencodierung ist BCD (4 Bit für die Einer- und 2 Bit für die Zehnerstelle, obwohl das eine Verschwendung darstellt...); die Wertigkeiten "10" und "20" sind deshalb schon korrekt.Zitat von sternst
Gruß
Fred
Only entropy comes easy. - Anton Checkhov
Ups, dass das BCD kodiert sein könnte, habe ich nicht bedacht.
Daher von mir ein großes zu Kreuze kriechendes SORRY!
MfG
Stefan
Eins habe ich jetzt immer noch nicht verstanden: Wann wendet man "volatile" an?
mfg
Hi,
Beim Programmieren von "embededed systems" wird grundsätzlich "volatile" eingesetzt,Zitat von _R2D2
- 1. wenn eine Variable in einer ISR und gleichzeitig in einem anderen Programmteil vorkommt,
2. beim Datenaustausch zwischen mehreren Threads und
2. wenn man auf ein "memory mapped" peripheres Register zugreift.
Dies ist alles mit Beispielen hier erklärt.
MfG
Fred
Only entropy comes easy. - Anton Checkhov
Ich hatte jetzt Zeit, alles noch mal genau zu testen und dabei ist mir aufgefallen, dass der µC nach dem Aufruf von GetTime nach ca. 14 Sekunden einen Reset macht. Nach diesem Reset fängt das Programm wieder von vorne an, die Variablen werden aber komischerweise nicht gelöscht. Wenn nach dem ersten Reset ein Timer gestartet wird macht der Controller wieder diesen komischen Reset. Ich denke, dass irgendetwas mit der Timersteuerung im Programm nicht stimmt.
Am µC kann es nicht liegen, da es weder mit einem AtMega8, noch mit einem AtMega32 funktioniert.
Stimmt diese Zeile oder kann man den Wert so nicht umrechnen?
Ich habe langsam das Gefühl, dass der AVR-gcc Compiller mit sehr großen Programmen nicht zurecht kommt. Weiß jemand, wo ich die neueste Version finde (Ich habe schon danach gegoogelt, finde aber nichts)?Code:wert = (ICR1L | (ICR1H << 8)) * (TAKT / (256UL * 65535UL) / 1000UL); //gezählter Wert in ms umrechnen (Takt=3,6864MHz)
mfg
Ich bin schön dumm: Suche ewig lang alles nach diesem Fehler ab, dabei habe ich in dieser Zeile
"SIG_" vergessen. Jetzt macht der µC keinen Reset mehr, aber die Zeit kann ich auch nicht empfangen. Entweder igrendetwas im Programm stimmt nicht, oder das Modul empfängt nichts. Was muss man beachten, um überhaupt ein Signal zu bekommen?Code:SIGNAL(SIG_OVERFLOW1)
mfg
Hast du schon mal eine LED über einen Transistor an den Ausgang des Moduls gehängt. Noch besser wenn du dir einen Ausgang programmierst an den du eine LED hängst, die dir die Eingangsimpulse anzeigt. Die Impulse müssen schön gleichmässig kommen. Den Minutenwechsel kann man durch die größere Pause erkennen.
Das Modul mit Antenne sollte schon min. 20cm von µC und LCD entfernt sein.
Die Ausrichtung zum Sender sollte auch stimmen.
Das Modul funktioniert, ich habe eine LED an den DATA Ausgang gehängt und diese wird regelmäßsig heller und dunkler. Also muss der Fehler im Programm sein.
Setz dir trotzdem auf einen freien Ausgang deines Kontroller eine LED, diesen Ausgang kannst du dann Schritt für Schritt in dein Programm einbauen und so kontrollieren wie weit es funktioniert.
Wenn du den Fehler im Programm vermutest und dir von uns Hilfe bei der Fehlersuche erhoffst, wäre es dann nicht angebracht, mal die aktuelle Version des Sourcecode zu posten?Zitat von _R2D2
MfG
Stefan
Lesezeichen