www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander Liebhold (lippi2000)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie das Telegramm aufgebaut ist, sollte in der Doku vom Logger stehen.

Gast

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.