Forum: Mikrocontroller und Digitale Elektronik Probleme mit Input Capture


von Andi (Gast)


Angehängte Dateien:

Lesenswert?

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.

von TravelRec. (Gast)


Lesenswert?

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
:-/...

von Andi (Gast)


Lesenswert?

Ja Noise Canceler ist aktiv!!

von TravelRec. (Gast)


Lesenswert?

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.

von Andi (Gast)


Lesenswert?

Ja DCF läuf ohne Störungen habe immer ein Oszi dran.

von TravelRec. (Gast)


Lesenswert?

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.

von Peter Dannegger (Gast)


Lesenswert?

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

von Andi (Gast)


Lesenswert?

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??

von Peter Dannegger (Gast)


Lesenswert?

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

von TravelRec. (Gast)


Lesenswert?

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 ;-).

von Andi (Gast)


Lesenswert?

Alles klar, danke jetzt versteh ich was du meinst...!!!

von Peter Dannegger (Gast)


Lesenswert?

@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

von Andi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.