Forum: Mikrocontroller und Digitale Elektronik LabView mit µC synchronisieren


von Thomas (Gast)


Lesenswert?

Hallo,
ich versuche mit LabView über RS232 meinen Atmega8 (C) auszulesen als 
Temperaturlogger. Der µC misst die Temperatur (mit DS18S20) und schickt 
einen Datenstring an LabView zum Darstellen. Leider funktioniert dies 
mit meiner Lösung eher willkürlich. Diese lautet:
LabView liest in einer While-Schleife jede Millisekunde die RS-232 
Schnittstelle aus und wartet auf ein Startbyte. Wenn das Startbyte kommt 
springt LV aus der While Schleife in die nächste Sequenz und liest den 
Datenstring um ihn zu verarbeiten.

Der µC misst die Temperaturen und sendet nach Deendigung der Messung 
erst das Startbyte und dann die Daten:
put_string(ok);
put_string(daten);

Das Problem: LabView empfängt die Daten nicht im gleichem zeitlichen 
Abstand. Eine Messung dauert ca. 1,5 Sekunden, also müsste LV alle 1,5 
Sekunden Daten bekommen, tuts aber nicht, mal passen die 1,5 Sek. dann 
sinds wieder 4 usw.
Wie kann ich diesen Ablauf synchronisieren? Mir kommt es vor also bo 
LabView das Startbyte manchmal verpasst und sich der ganze Prozess erst 
nach einigen Messungen wieder einfängt.
Über Hyperterminal geht alles wunderbar nur bei LabView läuft es eher 
zufällig. Interrupts fallen meiner Meinung nach als Lösung aus, da die 
Messung der TempSensoren nicht durch Interrupts gestört werden dürfen.

Kann mir hier jemand behiflich sein? Ich denke ich bin nicht der erste 
mit dem Problem, hab aber bisher nichts dazu finden können.
Danke sehr!
Thomas

von Michael T. (colwheel)


Lesenswert?

Thomas schrieb:

> Der µC misst die Temperaturen und sendet nach Deendigung der Messung
> erst das Startbyte und dann die Daten:
> put_string(ok);
> put_string(daten);


Hallo Thomas ,
vielleicht mal nur so als Test - nur den datenstring mit angehängten CR 
oder LF senden , das OK brauchst Du doch eigentlich nicht , oder ? In 
dem Moment wenn die Daten OK sind sendet der Atmega sie einfach , sonst 
eben nicht.
Und dem Labview mußt Du mitteilen das es den Lesebuffer ausliest wenn 
dort Daten sind , wie das aber einzustellen ist kann ich Dir leider 
nicht sagen .
Ansonsten frag doch mal im Labview Forum danach.
Gutes Gelingen und Grüße
Michael

von robo (Gast)


Angehängte Dateien:

Lesenswert?

Ich mach das so wie im Anhang.
Sobald Bytes eingelesen wurden und die Anzahl Zeichen (in meinem 
Beispiel mehr als 200) passt, dann werte ich aus (True case, nicht 
abgebildet) im anderen Fall warte ich 100ms (bei mir kommen alle 1s 
Werte).
In den 100ms müssen dann natürlich alle 200 Zeichen bereits da sein 
(Baudrate beachten).

von stefan (Gast)


Angehängte Dateien:

Lesenswert?

Herzlichen Dank für den Tipp Robo. Ich bin damit schon weiter gekommen. 
Ich habe jetzt nur noch das Problem, dass ich beim Starten des LV 
Programms immer direkt einen Overrun habe, der erst durch Continue 
klicken der Fehlermeldung behoben wird. Ich nehme an, dass sich bis zum 
Programmstart zuviele Daten angesammelt haben, da der µC ständig läuft. 
Wie kann ich das verhindern?
Außerdem würde ich gerne direkt nach dem Empfang der Daten eine Antwort 
von LV an den µC senden. Dafür habe ich das Programm wie auf den Bildern 
gezeigt erweitert. Es geht aber so noch nicht.
Meine Idee ist dabei folgende. Das senden eines Bytes (8N1, Baud 9600) 
dauert 1,04 ms. Meine Zeichenkette ist 15 Bytes lang. Es dauert also 
15,6 ms bis der µC die Bytes gesendet hat und 15,6 ms bis LV sie gelesen 
hat, anschließende nach ca. 32 ms wird dann die Antwort gesendet, die 
der µC lesen soll. Im µC habe ich das so realisiert

put_string(daten);    // Daten senden
_delay_ms(31);        // 32 ms Warten
get_string(stringbuffer); // Antwort lesen

Das scheint aber nicht zu funktionieren. Ich habe immer noch nicht 
verstanden wie ich den Prozess synchronisieren kann. Die uart.c Datei 
ist im Anhang. Wenn noch mehr Code benötigt wird bitte melden.
Danke für alle Tipps!

von Thomas (Gast)


Lesenswert?

kleiner Nachtrag meine Kontroll LED in ISR(USART_RXC_vect) leuchtet wenn 
LV die Antwort sendet, ich komme aber irgendwie nicht an die Daten

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.