Liste der Anhänge anzeigen (Anzahl: 1)
[LabView] zeilenweises Auslesen der seriellen Schnittstelle
Hiho.
Vorneweg: ich hoff mal hier gibt es ein Paar LabView Profis und ich benutze die 2011'er Version von LabView.
Ich hab ein folgendes Problem.
Nachdem ich meinen µC beigebracht hab 2 verschiedene Temperaturwerte
(von 2 verschiedenen LM35) in digitale Werte umzuwandeln und diese mir
auf den Hyperterminal zu schicken, versuche ich nun das selbe in
LabView.
Wer hätte es gedacht, natürlich hat es nicht auf Anhieb funktioniert.
Mit nur einem angelöteten Sensor hat es wunderbar geklappt, also das
Auslesen der seriellen Schnittstelle, mit zwei nicht.
Hab mal meine "Prinzipschaltung" angehangen um das Problem
zu verbildlichen (hätte auch gern die VI angehangen, aber das geht ja leider nicht).
Hier kommt das "krankheitsbild":
Erstens: gibts keine Veränderung der Temperaturwerte in LabView wenn ich
die erwärme.
Zweitens: die For Schleife läuft anscheinend genau 2 mal. (sonst gäbe es
ja eine Wertveränderung).
Drittens: Anscheinend kommt das Signal noch nichteinmal in die Case
Struktur rein.
Das sind gerade so die größten Probleme.
An irgendwelchen Einstellungen scheint es nicht zu liegen, da die
Übertragung mit nur einem Sensor funktioniert.
Das Zusammensetzen des Arrays aus dem Datenstring sollte auch richtig
sein, weil LabView das Zeilenumbruchzeichen (0x0A) ja auch versteht.
Bin für jede Hilfe dankbar
Grüße.
Liste der Anhänge anzeigen (Anzahl: 2)
Alles klar,
hab mal die VI als Screenshot hochgeladen, mit dem Prinzip was es machen soll.
und hier ist das stueckchen programmcode welches für das senden der sensordaten an den rechner verantwortlich ist:
Code:
while(1)
{
if (overflowzahl >= 1)
{
if (adc_wertref = adc_read_avg(0, 100))
{
itoa(adc_wertref, buffer, 10);
uart_puts("Ref");
uart_puts(buffer);
USART_Transmit(0x0A);
}
if (adc_wertkam = adc_read_avg(1, 100))
{
itoa(adc_wertkam, buffer, 10);
uart_puts("Kam");
uart_puts(buffer);
USART_Transmit(0x0A);
}
USART_Transmit(0x0A);
overflowzahl=0;
}
}
jetzt noch eine wichtige Frage:
Reicht es dem Labview zu verstehen dass "0x0A" das Zeilenumbruchszeichen ist?
Eigentlich versteht es das Zeichen ja, aber ist LabView intelligent genug den String auch an genau diesen Stellen zu zerlegen und eben ein Array daraus zu basteln?
Oder muss ich dafuer noch irgendwas in meinem C-Quellcode ändern, das wäre echt ärgerlich, da LabView>>C ^^
Die "Diagnose" geht weiter (hab irgendwie echt viel mit Medizin zu tun)
Die Werte kriege ich ja immer abwechselnd, die Stringlänge ist also genau 7 (wenn der gesamte String ankommen würde, müsste die Länge bei 14 liegen) (3 Buchstaben, 3 Zahlen (Zimmertemperatur, Wert noch nicht in Temperatur ausgerechnet, Zeilenumbruchzeichen welches ja nicht angezeigt wird), also versteht Labview tatsächlich was ich davon will.
Warum also kriegt es nicht hin die Werte mir gleichzeitig in einer Matrix (von dem Wort Array könnt ich langsam kotzen) untereinander anzuzeigen?
PS irgendwie stellt das Forum die Bilder viel zu klein dar -.-
Liste der Anhänge anzeigen (Anzahl: 1)
Also, hab heute von ganz neu angefangen und folgendes ist rausgekommen:
Ich kann jetzt ein Array erstellen mit tatsächlich zwei (juhu!) Zeilen.
Problem: In der unteren und der oberen Zeile wird synchron das selbe angezeigt.
Mein Datenstring der von der Schnittstelle kommt sieht so aus:
"Ref Temperaturwert Zeilenumbruch
Kam Temperaturwert Zeilenumbruch"
Das heisst ich muss den Datenstring in zwei (später mehr) Teilstrings aufsplitten.
Die Teilung muss immer dann erfolgen wenn ein Zeilenumbruch kommt.
Theoretisch könnte ich eine feste Position des Zeilenumbruchs festlegen, aber das möchte ich nicht, weil das viel Geraffel im C Quellcode für den Mikrocontroller wird.
Das müsste einfacher gehen, indem ich LabView sage: "Such nach dem Zeilenumbruch und wenn du einen gefunden hast, dann teile den String und hänge den gespiltteten teil des Strings unter den ersten Teil (so sollte es prinzipiell dann für alle Stringteile funktionieren: Ersten Zeilenumbruch gefunden--->Rest den Strings an die zweite Zeile anhängen im Array, zweiten Umbruch gefunden--->Rest des Reststrings an die dritte Zeile im Array hängen, usw., sowas in C zu machen ist Sackgang mit meinen sehr spärlichen C kenntnissen).
Hab mal den Screenshot der aktuellen VI angehangen, die kann den Datenstring nicht Teilen, aber immerhin schon zwei Zeilen des Arrays erstellen.
Hoffe mein Problem ist verständlich.
Nochmal zur Erlaüterung:
Ich möchte später alle Eingänge meines ADC an dem AtMega16 nutzen, das sind 8 Stück.
Momentan sind zwei Sensoren an denen angelötet.
Wenn ich spätere neue anlöte, möchte ich einfach nur noch im C Code sagen: "Hey da ist ein neuer Sensor, an den und dem Pin, UART, gib mir die Messwerte des Sensors" Das isn Dreizeiler im C.
LabView soll dann automatisch erkennen dass ein neuer Zeilenumbruch kommt, und automatisch den neuen Wert an das bereits vorhandene Array anhängen (maximal müsste ich dann in LabView sagen dass sich das Array um eine Zeile vergößern muss, dass passiert einfach indem ich einen neuen Case in der For Schleife einfüge, die das Arrays zusammenbaut).
Viele liebe und gerade etwas verzweilte Grüße, Mikhail
PS: mein letzer Satz war ganz schön hart am Rande der Homosexualität.