Forum: Mikrocontroller und Digitale Elektronik Serielles Signal eines Modellbauenpfaengers auswerten


von Alexander B. (galaxg64)


Lesenswert?

Hallo allerseits,
Ich habe mich schon eine Weile mit uC's beschaeftigt und will nun eine 
Steuerung fuer mein Modellschiff entwerfen. Ich benutze einen AVR ATMega 
328P, der an einem Empfaenger haengt, der mir ein serielles Signal 
ausgibt.
Das Signal sieht wie folgt aus: alle 11ms gibt er mir 16byte aus. Das 
Signal ist Asynchron, die Baudrate ist ca. 115200 und das Signal hat, so 
wie ich das verstanden habe, 8 Datenbits, kein parity-bit und kein 
stop-bit. Eine Signaleinheit ist 2byte breit. Das macht also 8 
"Signaleinheiten" alle 11ms. Der Empfaenger sendet im ersten 16byte 
Block in den ersten 2 byte wie viele solcher Bloecke vom Empfaenger 
selber nicht ausgewertet werden konnten(Funkstoerung ect.), die anderen 
14byte die uebrigbleiben, werden auf 7 Kanaele mit je 2Byte verteilt. Im 
darauf folgenden Block sendet der Empfaenger den 8ten Kanal ebenfalls 
nachdem die verpassen Bloecke ausgegeben werden. In den 16Bit eines 
Kanals steckt die Kanalnummer und der Wert der siesem Kanal zugeordnet 
wird. Das MSB jedes dieser 16bit Paktet sagt aus, ob das Paket eine 
Kanalinformation beinhaltet oder nicht.
Nach zwei Bloecken a 16byte beginnt der Spass von vorne.
Gut illustriert hat das Protokoll dieser Herr aus Australien: 
http://www.cgsy.com.au/archives/215

Meine Frage ist nun wie ich die Kanaele am besten auswerte, die 
verpassten Frames des Empfaengers sind mir in diesem Zusammenhang 
ziemlich egal, die Kanalinfo umso wichtiger. Der USART im AVR ist mir 
noch ziemlich neu, desshal wuerde ich mich ueber ein PC-programm freuen, 
das mir dabei hilft, das signal irgendwie "sichtbar" zu machen damit ich 
es mir mal genauer anschauen kann. Ich nehme an, dass ich erstmal die 16 
Byte auslesen muss, byte fuer byte, indem ich sie per Interrupt aus dem 
Rx Puffer hole und irgendwo in den Speicher schreibe. sobald alle 16byte 
drin sind habe ich ja dann fast 11 ms Zeit um mit den daten was 
anzufangen, also meine Kanalnummer herauszufinden und dann den 
dazugehoerigen Wert in eine globale Variable abzuspeichern, damit ich im 
Hauptprogramm meinen Spass damit haben kann. Genaueres Zur bitverteilung 
im Paket steht im Link, ich weiss nur nicht ganz was ich daraus fuer 
Schlusesse ziehen soll.
Besten Dank schonmal,
Alexander Becker

von Karl H. (kbuchegg)


Lesenswert?

Alexander Becker schrieb:

> Meine Frage ist nun wie ich die Kanaele am besten auswerte,


Fang erst mal damit an, die UART deines AVR in Betrieb zu nehmen, in dem 
du vom AVR an den PC sendest. Am PC läuft ein Terminalprogramm,, so dass 
du sehen kannst, ob das (zb Texte) was du auf dem AVR mit der UART 
wegschickst, auch auf dem PC korrekt ankommt. Erst dann hast du die 
Gewissheit, dass die UART grundsätzlich korrekt und mit der richtigen 
Geschwindigkeit funktioniert.

Kannst du vom AVR zum PC übertragen, dann machst du die Gegenrichtung: 
vom PC zum AVR.
Der Vorteil, den du jetzt hast: du hast bereits eine funktionierende 
UART Ausgabe auf dem AVR, so dass du die benutzen kannst um dir zb 
Statusinformationen auszugeben, ob das vom PC gesendete korrekt am AVR 
ankommt (wird es normalerweise wenn die Gegenrichtung schon 
funktioniert) bzw. du kannst mal erste Erfahrungen damit machen, wie man 
solche Auswertungen angehen könnte.

Und erst dann hängst du anstelle des PC deinen Empfänger an die Leitung 
zum AVR, wobei du dir die Ausgabemöglichkeit auf dem PC offen lässt und 
auch fleissig benutzt um zu sehen, was vom Empfänger daher kommt bzw. ob 
deine Auswertestrategie funktioniert.


Aber im Moment steuerst du auf einen Mehrfrontenkrieg zu.
Du weisst nicht, ob die USART funktioniert. Du weisst nicht, ob sie mit 
der korrekten Geschwindigkeit arbeitet. Du weisst nicht, ob du korrekt 
vom Empfänger empfangen kannst. Du weisst nicht, ob deine Auswertung 
richtig ist. Das sind ein bischen zu viele 'du weisst nicht'. In 
derartige Mehrfrontenkriegen sind schon ganz andere Leute untergegangen.

: Bearbeitet durch User
von Alexander B. (galaxg64)


Lesenswert?

Ok danke, dann werd ich mich mal dran machen, die USART anstaendig zu 
konfigurieren.

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.