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