Forum: Mikrocontroller und Digitale Elektronik Bekomme Datenstrom über Rs 232, in Mega8 einlesen


von Peter (Gast)


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

von Gast (Gast)


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.

von Alexander L. (lippi2000)


Lesenswert?

Na irgendwie muss doch eine Signalisierung statt finden. Vielleicht auch 
vom PC aus. Vielleicht vordert er auch Daten zyklisch an. Vielleich gibt 
es ja auch ein Startzeichen...Bitte noch mal informieren oder direkt an 
RXD und TXD messen.

von Uwe .. (uwegw)


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?

von STK500-Besitzer (Gast)


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).

von Peter (Gast)


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

von Gast (Gast)


Lesenswert?

Wie das Telegramm aufgebaut ist, sollte in der Doku vom Logger stehen.

Gast

von Peter (Gast)


Lesenswert?

Hallo,

hier ist noch ein Bild vom Windows Terminal.

http://img182.imageshack.us/img182/1831/testll2.jpg


also wer kann mir jetzt helfen und mir "ungefähr" erklären, wie ich die 
Werte in Bascom einlesen kann?

Übrigens gibt es keine technische Anleitung zu dem Datenlogger.

MFG Peter

von STK500-Besitzer (Gast)


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...

von Peter (Gast)


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

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.