Bekomme Datenstrom über Rs 232, in Mega8 einlesen

Gast #834202
Lesenswert?

Hallo Forumskollegen,

Also ich kann bis jetzt schon "relativ" viel mit dem Mega8 anfangen, bin 
aber Programmierneuling. Kann ADC auslesen, LCD ansteuern, Leds blinken 
lassen usw.....Auch ein bisschen mit RX,Tx spielen.

Ich verwende zuhause einen Datenlogger für den Modellbau.
Dieser gibt mir konstant mit 4800 Baud einen Datenstrom aus.
Es werden Spannung, Temperatur und Höhe ausgegeben. Ich habe euch ein 
Bild mitgebracht, in dem man sehen kann , wie der Datenstrom 
aussieht,wenn ich den Logger am Pc anschließe in Win Xp.Ich hoffe, man 
kann was erkennen.
http://img174.imageshack.us/img174/349/dscn4757bc9.jpg


Meine Frage ist jetzt, wie bekomme ich genau einen Wert aus dem 
Datenstrom, mal angenommen die Nummer 191, die steht für die Temperatur, 
in den Mega8 in Bascom. ich meine, dass der Mega8 genau diesen Wert über 
Rx einliest? Welcher Befehl?
Und wie mache ich es, wenn ich drei Werte haben will? Die 87 steht für 
die Spannung, und die 27 für die Höhe (glaube ich).

ich will die Daten einfach dann verarbeiten, und an ein LCD ausgeben.
Ich danke euch sehr!!!
MFG Peter
Gast #834218
Lesenswert?

Das was Du Datenstrom nennst ist im Allgemeinen ein Telegramm. Die 
Aufgabe besteht nun darin aus einer laufenden Übertragung die einzelnen 
Telegramme zu selektieren. Ist dies geschafft, können die einzelnen 
Datenpunkte für Temperatur, Spannung und Höhe aus dem Telegramm per 
Arrayzugriff entnommen und weiterverarbeitet werden. Wie es in Bascom 
geht kann ich nicht sagen, da ich Bascom noch nie benutzt habe.
#834236
Lesenswert?

Sind die 33 und 16 immer gleich, auch wenn sich die übertragenden Daten 
ändern? Das könnten die Zeichen für die Snchronisation sein.
Dann kommen 38 und 27, als 16-Bit interpretiert macht das die 9755 für 
AD16. Dann ne Null als Trennzeichen, AD5 und temp_1, und Prüfsumme 136 
(wie die berechnet wird, müsste man mal ausprobieren).


Ob die Synchronisation so läuft, könntest du mit dem Terminalprogramm 
testen (und gleich noch die Daten mitschneiden). Wenn da keine Daten 
ankommen, hat vielleicht Alexander richtig getippt, und der PC fordert 
die Daten jeweils an.

PS: wieso machst du den Screenshot mit der Digicam?
Gast #834516
Lesenswert?

>Ich habe euch ein Bild mitgebracht, in dem man sehen kann , wie der >Datenstrom 
aussieht,wenn ich den Logger am Pc anschließe in Win Xp.

Beim nächsten Mal drückst du bitte die "Druck"-Taste auf deiner 
Tastatur, öffnest "Paint" und fügst die Zwischenablage ein.
Das Bild speicherst du dann als Jpeg ab.
irfanview kann die Zwischenablage importieren...

Wie schon oben geschrieben: Guck dir mal an, ob dein Datenlogger von 
sich aus sendet, oder ob der PC dazu irgendwas losschickt.
Das kann man am besten mit einem Terminalprogramm (such mal nach "Hterm" 
in der hiesigen Codesammlung).
Gast #834550
Lesenswert?

Hallo,

danke schon mal für die Antworten.
Screenshot, na klar, dachte gar nicht daran, beim nächsten mal!

Also der Datenlogger sendet 100%ig ALLEINE.
Wenn ich ihn am Terminal anschließe, kommen da auch Daten an.

Die 33 und 16 sind immer konstant.Die ändern sich nicht, aber alle 
anderen ändern sich jede Sekunde (Am Logger so eingestellt).

Also sollten wir (Ihr) jetzt wissen, wie die Synchronisation läuft.

Vielleicht sollte ich mal kleiner anfangen und versuchen, die ganzen 
Zahlein einzulesen und am LCD ausgeben.

Dann sollte ja im LCD zb stehen: 33 16 38 27 0 87 0 191 136 136.
Könnte das gehen?
Aber mit welchen Befehlen bloß nur?

Die Nuller sind aber keine Trennzeichen, da könnten noch andere 
Spannungen ect ausgegeben werden.

Mfg Peter
Gast #834735
Lesenswert?

Nimm als Terminalprogramm lieber HTerm. Da kann man dann auch was mit 
den Daten anfangen...(Sonderzeichen sind nicht besonders gut zu lesen.)

Bascom unterstützt doch bestimmt Stringverarbeitung (ich vermute mal, da 
jeder Basic-Dialekt, den ich kenne, sowas unterstützt).

Dein Datenstrom (Telegramm oder String) hat vermutlich eine feste Länge 
(Anzahl an Zeichen).
Da kann man sich eine Statemachine bauen:
Man setzt einen Zähler auf 0
Wenn der Zähler 0 ist, wartet man auf die 33 und zählt bei Empfang den 
Zähler um eins hoch.
Ist der Zähler 1 und das nächste empfange Byte eine 16, ist die 
Synchronisation erfolgreich; der Zähler wird wieder hochgezählt. Sonst 
muß man den Zähler wieder auf 0 setzen.
Wenn der Zähler jetzt auf 2 steht, dann kann man das empfangene Byte 
entsprechend auswerten (z.B. in die Temperatur umrechnen).
Bei jedem empfangenen Byte zählt man den Zähler hoch, bis er einen 
Endstand erreicht hat (Telegramm ist zuende) und wieder auf 0 
zurückgesetzt wird.

Das dürften ein paar if-Abfragen sein...
Wie man in Bascom die serielle Schnittstelle anspricht weiß ich nicht. 
Dafür gibt es aber das Handbuch und diverse Forenbeiträge, sowie 
inzwischen ein eigenes Bascom-Forum...
Gast #835974
Lesenswert?

Hallo,

so, mittlerweile habe ich mehr herausgefunden.

Der Datenlogger sendet immer einen String(?) mit 21 Bytes.

Hier ein Screenshot davon:
http://img120.imageshack.us/img120/6443/telegrammul2.jpg

Die ersten fünf bytes sind identisch mit den 6-10 bytes, das müsste der 
Header sein.

Danach wirds spannend, denn danach kommen die Werte, die mich 
interessieren.
5C (92) müsste die Spannung sein,
01(001) und 04(004) müsste die Temperatur sein,
26(038) und 2B(043) müsste die Höhe sein.

Nun sind wir ja schon einen Schritt weiter.
Wie kann ich nun den String am besten einlesen und die drei Daten dann 
unter jeweils einem Byte abspeichern?

Danke euch allen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren