Habe ein Problem mit dem Input Capture des Mega162. Im Anhang befindet sich ein Teil meines Quellcodes. Hier versuche ich am ICP das DCF Signal einzufangen und auszuwerten. Den Interrupt habe ich getestet er kommt durch. Doch in der Funktion DCF Receive bekomme ich kein Ergebnis d.h. zuerst wird ja der Minutenwechsel ausgewertet und wenn dieser erkannt ist, wird der Sekundentakt gestartet, doch nichteinmal das funktioniert. Hoffe ihr habt eine idee.
Hast Du mal den NoiseCanceller aktiviert? Der filtert fiese Spikes von der DCF-Leine, bei mir hat´s geholfen. Dein Code nützt mir leider nix :-/...
Ja schade - dann weiß ich auch nicht, ich programmiere in Assembler, C ist mir zu "hoch" ;-) und in Assembler klappt´s prima... Andere Frage - geht das DCF-Modul fehlerfrei, mal ´ne LED+R drangeknüppert und das Blinkern (kurz, lang) und dessen Rhythmus geprüft? Bei konfusem Flackern der LED ist eine Störquelle in der Nähe.
Dann kann´s nur das Programm sein. Sorry aber da mußte dann wohl nochmal ´drüberschauen und einzelne Programmblöcke, die nachweislich funktionieren, Stück für Stück zusammensetzen.
Input Capture ist ja auch für ne Wahnsinnsbaudrate von 1 Baud extrem oversized. Man nimmt da lieber nen Timerinterrupt so etwa 10ms und schaut dann nach und zählt mit. Kurze Störflanken werden damit auch unterdrückt. Peter
Sorry Peter komme da jetzt nicht so ganz mit... Meinst du ich sollte den INT0 nehmen und den Timer überlaufen lassen und diese Overflows zählen??
Was soll denn dabei der INT0 ? Vergiß mal die ganzen Interrupteingänge, die sind nur was für wirklich schnelle Sachen. Also Timerinterrutp alle 10ms, dann nachsehen ob Pin = 1 und eine Variable hochzählen. Und beim ersten mal Pin = 0 die Variable zur Auswertung abspeichern und wieder auf 0 setzen. Peter
Hallo Peter: Sicher hast Du recht, daß man Input Capture auch für andere Sachen als für DCF-Signal-Capturing nehmen kann. Allerdings hatte ich bei meinem Projekt den Pin frei und mein Prozi hat ansonsten auch zu viel um die Ohren, um nicht mit dieser komfortablen Impulserfassung durch den entsprechenden Interrupt zu arbeiten. Mit anderen Worten: für mein Projekt war das genau die richtige Lösung und unter ASM funktioniert das alles sehr schön und zuverlässig. Also würd´ ich nicht unbedingt sagen, daß man die Interruptpins nur für schnelle Sachen favorisieren sollte. Wenn Hardware einem bei einer unkomplizierten Programmierung helfen kann, kann man sie ja auch benutzen. Aber nichts für ungut ;-).
@TravelRec, ich hab auch nicht gesagt, daß es nicht geht, sondern daß es mit dem Timerinterrupt ne Menge Vorteile gibt: - die Zeitauswertung kann man codesparend mit Byte-Variablen machen (2s = 200). - die Auswertung ist taktunabhängig, man muß bei Quarzänderung nur den Comparewert für den 10ms-Interrupt anpassen. - es werden kurze Störimpulse unterdrückt - es kann ein beliebiger Pin benutzt werden. Peter
Wenn ich das jetzt richtig Verstanden habe ist es besser irgend einen Pin abzufragen, da das DCF Signal sehr "langsam" ist (100ms bzw. 200ms) wenn ich einen Interrupt nehmen würde wäre es möglich das ich mir Störungen einfange und ein Interrupt ausgelöst wird. Somit wäre das eingelesene DCF Signal falsch. Da ich erst angefangen habe mit Mikrocontrollern zu arbeiten bin ich für jede Anregung bzw. Verbesserung dankbar. mfG Andi
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.