www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Input Capture


Autor: Andi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
:-/...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Noise Canceler ist aktiv!!

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja DCF läuf ohne Störungen habe immer ein Oszi dran.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-).

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, danke jetzt versteh ich was du meinst...!!!

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.