Manchester Dekodieren Probleme mit der Abfrage

Gast #3075429
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche ein Manchester codiertes signal über den C1OUT Comparator 
zu dekodieren. Das Signal liegt sauber an nun bin ich dabei eine 
einleseroutine zu programmieren.



Ich habe das Problem das nicht alle Bitwechsel erkannt werden. Das erste 
Bit dient als Startbedienung. Der Timer3 erzeugt nur ein zeitfenster was 
mit der eigentlichen Funktion nichts zutun hat.

Beispiel: Es kommt ein Signal rein welches mit dem Osciloskop folgendes 
ist: 1 1111 1110 (Hex FE) jedoch wird es erkannt als 1 1110 0111 (Hex 
E7)der erste 1 jeweils dient als Startbit.

Habe bereits geringfügig den Timer 2 , welcher eine Periode lang warten 
soll geändert jedoch hilft das nicht viel.

Das signal hat eine Übertragungsrate von 1200Hz.

Ich programmiere in C und nutze MPLAB und den C18 Compiler für meinen 
PIC18F67J60

Bin für jede Anregung dankbar!
Angehängte Dateien:
Gast #3075432
Lesenswert?
• ▲
▼
Hier die Timer Konfiguration

//Timer2 Registers Prescaler= 1 - TMR2 PostScaler = 14 - PR2 = 119 - 
Freq = 1200.48 Hz - Period = 0.000833 seconds
  T2CON |= 104;        // bits 6-3 Post scaler 1:1 thru 1:16
  //T2CON.TMR2ON = 1;  // bit 2 turn timer2 on;
  T2CONbits.T2CKPS1 = 0; // bits 1-0  Prescaler Rate Select bits
  T2CONbits.T2CKPS0 = 0;
  PR2 = 119;         // PR2 (Timer2 Match value)
Gast #3076083
Lesenswert?
• ▲
▼
Du musst die Bitsynchronisation hinbekommen! Nur bei einem 0-1 / 1-0 
Wechsel der Daten erhällst du nur Flanken in der Bitmitte.Darauf musst 
du warten & synchronisieren. Bei 0-0 / 1-1 Daten kannst du die 
Phasenlage nicht erkennen - Synchronisation unmöglich. Deshalb wäre es 
gut, deinen Daten ein Sync-Byte (xAA) voran zu stellen
Gast #3076530
Lesenswert?
• ▲
▼
Ok Bitsynchronisation klingt sinnvoll. Habe es mal gegoogelt habe nur 
erklärungen dazu gefunden. Wie stelle ich so etwas an? Im Prinzip die 
Länge des 1. Bit messen und als Referenz für den Timer nehmen? Oder wie 
muss ich mir das vorstellen?

Danke schonmal für eure antworten.
Gast #3076545
Lesenswert?
• ▲
▼
Naja Manchestercode heißt ja das der Takt mit dem Datensignal 
zusammengeführt ist.
Zum dekodieren musst du den Takt zurückgewinnen indem du die beiden 
Signale auftrennst.

Das erste Bit messen geht nur wenn du weißt ob das erste Bit eine"1" 
oder eine "0" ist. Ansonsten misst du den falschen wert.

Ich hab einen solchen Dekoder ebenfalls schon mal aufgebaut und es da 
etwas anders gemacht.
Mein Ansatz war:
Ich lege eine Array mit der Anzahl an Elementen die der maximalen Anzahl 
der Flanken entspricht.
Mit dem Timer messe ich die Zeit zwischen den Flanken und speichere 
diese Zeiten im Interrupt ins Array.
Wenn dann alle Flanken angekommen sind wird, in der Mainloop das Array 
ausgewertet. Aus den Zeiten im Array lässt sich der Takt raus rechnen 
und damit dann das Signal und Takt trennen.
Gast #3077174
Lesenswert?
• ▲
▼
Ralph schrieb:
> Ich lege eine Array mit der Anzahl an Elementen die der maximalen Anzahl
> der Flanken entspricht.

ein Array ist auch eine einfache Möglichkeit (bei ausreichend 
Ressourcen). So sahen meine ersten versuche auch aus. Die im Beispiel 
auf der Luna-Webseite dargestellte Variante ist passend für den 
tiny2313. Auf Grund der recht ausführlichen Kommentare was da passiert, 
hatte ich es ursächlich verstanden.

Wichtig ist hierbei wohl das Timing-Window, wobei in meinen Tests dann 
sogar eine aktive drahtlose Übertragung geklappt hat. Bei einem 
Frequenzdrift ist die maximale Anzahl an gleichzeitig übertragenen Bits 
aber wohl begrenzt.

Antwort schreiben

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.

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.