ATMega8 Input Capture

OP #2071092
Hallo zusammen,

Ich möchte mit einem ATMega8 über den Input Capturing Pin ein Telegramm 
enmpfangen was in FSK moduliert wurde!

Die beiden Trägerfrequenzen sind 1200/1800Hz, ich hatte schon probiert 
mit einem XR2211 das Signal zu demodulieren hatte aber keinen Erfolg, 
entweder ist die externe Beschaltung zu ungenau oder der Baustein 
defekt. Für den oftmals verwendetetn CMX469 habe ich keine Bezugsquelle!

Ist es möglich das FSK Signal über das InputCapturing zu demodulieren? 
Ich habe das Sinuswechselspannungssignal über einen 100nF Kondensator 
und einen Spannungsteiler von 10kOhm und 3,3kOhm der an +VCC und +GND 
angeschlossen ist, eingekoppelt und auf den ICP-Pin gelegt.

Wenn ich das Signal erzeuge bekomme ich auf dem Scope ein sauberes 
Signal, ich müsste doch nur die Zeit zwischen den aufsteigenden Flanken 
messen und könnte somit die Frequenz ermitteln!

Den Quellcode zum Programm findet ihr im Anhang! Das Programm soll die 
Frequenz zwischen den aufsteigenden Flanken ermitteln und über UART 
ausgeben, die Interrupt Routine scheint zu funktionieren der UART wird 
nur aktiv wenn ich ein Signal anlege, jedoch ist das einzige was ich 
über UART empfange ein "INF"

Ich hoffe ihr könnt mir weiterhelfen! Quellcode ist im Anhang!

Vielen Dank
LG random
Angehängte Dateien:
#2758541
Hallo,

auch wenn der Beitrag schon etwas älter ist, wollte ich mich nach dem 
aktuellen Stand erkundigen.
Hast du noch eine Lösung gefunden?
Ich hatte nämlich vor auch einen XR2211 dafür zu verwenden.

Gruß Michael

PS: Handelt es sich bei dir um FMS? Rein von den Frequenzen her 
betrachtet.
#2758565
F. C. schrieb:

> ausgeben, die Interrupt Routine scheint zu funktionieren der UART wird
> nur aktiv wenn ich ein Signal anlege, jedoch ist das einzige was ich
> über UART empfange ein "INF"
>
> Ich hoffe ihr könnt mir weiterhelfen! Quellcode ist im Anhang!

Nur für den Fall, dass es noch jemanden interessiert.
Das Problem ist eine Division durch 0, die dadurch entsteht, dass sich 
der TO hier
1
  zaehler = + TOP*overflow_counter;
vertippt hat. Es muss += lauten und nicht = +
Dadurch ist zaehler offenbar immer 0, was dazu führt, dass hier
1
  freq = 16000000/ icr_neu;
durch 0 dividiert wird.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.