INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

UART Register (getrennt) auslesen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

17.11.2012, 14:25
Beitrag #1

smarties Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Oct 2012

2011
2012
DE_EN



UART Register (getrennt) auslesen
Hallo!

Ich versuche einen CH Robotics UM6 Sensor über Labview auszulesen.
Ich betreibe ihn mit einem TTL auf USB Adapter. Die Schnittstelle wird im MAX angezeigt (COM7).

Zuerst sei das Datenblatt des Sensor verlinkt: http://www.chrobotics.com/docs/UM6_datasheet.pdf
Dort ist geschrieben, dass der Sensor 3 Register hat: Configuration, Data und Command.

Nun die Frage: Wie kann ich auf diese Register zugreifen? Im Assistent Instrumenten I/O bekomm ich nur folgendes Angezeigt, siehe Analge.

Ich habe versucht, die entsprechenden Binärwerte z.B. für das Gyroskop-werte um die x-Achse zu identifizieren indem ich beispielsweise die zugehörige Adresse in der Matrix gesucht habe und als token auslese. Das fuktioniert aber so wohl nicht

So wie ich das verstanden habe, muss das zugehörige Register angesprochen und ausgelesen werden und dort liegen nun die Werte als Zweierkompliment vor. (vgl Datenblatt S. 45, Tabelle 51 Register Definition). Aber wie können diese Werte als "Zahlenwerte" letzendlich geplottet werden?

Bin für jede Hilfe dankbar! Mit den theretischen Grundlagen der UART Kommunikation bin ich (wie man sieht...) noch nicht sehr vertraut.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.11.2012, 17:12 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2012 17:14 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UART Register (getrennt) auslesen
Hallo smarties,

vergleiche mal, was im PDF auf Seite 20/21 beschrieben wird mit dem, was in deinem Bild zu sehen ist...

Ich wäre in diesem Thread geblieben, andererseits handelt es sich nun nur noch um den korrekten Umgang mit einer seriellen Schnittstelle...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.12.2012, 14:39 (Dieser Beitrag wurde zuletzt bearbeitet: 25.12.2012 14:40 von smarties.)
Beitrag #3

smarties Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Oct 2012

2011
2012
DE_EN



RE: UART Register (getrennt) auslesen
Danke für die Hilfe bis hierhin.
Nach einer Pause geht es nun weiter mit meinem Projekt.
Über die Serielle Schnittstelle lese ich nun nach Aufforderung die gewünschten Register ein.
Der Sensor erfordert eine im Datenblatt festgelegte Paketstruktur bei UART Kommunikation:
So beginnt jedes Paket mit der Reihenfolge: snp(...), gefolgt von div. Merkmalen und letzenendlich auch den Messwerten.

Für die Anschaulichkeit Auswertung ist die Darstellung in UART Paketen in Hexdezimalschreibweise sehr ungünstig Big Grin

Ich habe das LabView Beispiel zum Serial Port für meine Bedürftnisse modifiziert und frage nun:
1) Wie kann aus einem Hex Dezimalstring nur ein kleiner Teil aus dem String "abgeschnitten", in Dezimalzahl (gut, das geht schnell) und dann z.B. geplottet werden? Den String erhalte ich aus dem VISA:Lesen Block.
2) Und wie kann das Plotten der Daten kontinuerilich ausgeführt werden? Mir ist nicht so recht klar, wie man einen "Zwischenspeicher" für Werte einrichtet.

Meine Vorstellung wäre, dass der eingelesene String über eine Maske gefiltert wird, der interessante Teil dann in Dez gewandelt und abgespeichert wird und letzendlich die Werte dann geplottet werden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.12.2012, 11:15
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UART Register (getrennt) auslesen
Hallo Smartie,

1) StringSubset nennt sich die benötigte Funktion! Plotten ginge in einem Chart sehr simpel: einfach den neuen Wert zum chart verdrahten...
2) Hier lautet das Stichwort "Schieberegister"! (Für einen Chart bräuchtest du diese aber nicht...)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.01.2013, 22:24 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2013 22:24 von smarties.)
Beitrag #5

smarties Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Oct 2012

2011
2012
DE_EN



RE: UART Register (getrennt) auslesen
Vielen Dank. Das hat Weitergeholfen!

Diesmal habe ich folgendes Problem:

Nehmen wir an, der Sensor liefert für einen bestimmten Zeitpunkt für die Drehrate um die x-Achse den Wert "FE EA".
Dieser Wer ist lt. Datenblatt als 16 Bit Integer, 2er Komplement, Little Endian die eigentliche Drehrate.
Also "verschmelze" ich den 8 Bit Wert FE mit dem 8 Bit Wert EA zum 16 Bit Wert FE EA.
Multipliziert mit einem Korrekturfaktor (0.003) ergibt sich dann die momentane Drehrate.

Anhand des speziellen Zahlenwertes "FE EA" habe ich nun folgendes Gemacht:

String -> "String to Byte Array" -> Array Indizieren -> Auf 2 Ausgänge aufgezogen und "Nummern verbinden" -> Nach Double konvertieren -> Multiplizieren mit Korrekturfaktor (0.003) -> Ergebnis.
(vgl angehängtes VI)

Der Plot zeigt auch Werte an, jedoch bei Änderrung der Drehrichtung versagt diese Konstruktion. Das 2er Komplement bedeutet ja, dass FFFF genau -1 bedeuten sollte, was aber bei mir nicht stimmt. FE EA müsste folglich -278 ergeben, in meinem Fall wird daraus 195,774.
Überhaupt frage ich mich, wie ich das Vorzeichen regeln kann?


Hat jemand einen Vorschlag, wie man das 2er Komplement zur Vorzeichenregelung berücksichtigt wird und wie man das in dem Fall umsetzten würde?


Angehängte Datei(en)
8.5 .vi  StringzuAnzeige.vi (Größe: 8,17 KB / Downloads: 202)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2013, 09:10 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2013 09:12 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UART Register (getrennt) auslesen
Hallo smarties,

wenn du dir deinen String schon in Hex-Display anschaust, hättest du doch deinen Fehler selbst bemerken müssen! Hmm

Dein String besteht aus den Bytes $46,$45,$45,$41 (= ASCII "FEEA"). Diesen String wandelst du in ein Bytearray um und nimmst die ersten beiden Bytes $46 und $45. Daraus machst du den U16-Wert $4645 - garantiert nicht das, was du wolltest!
Hast du dir wenigstens einmal dein VI mit aktiviertem Highlighting und Sonden angeschaut?
Irgendein Debugging versucht?

Schau mal hier:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.01.2013, 12:12
Beitrag #7

smarties Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Oct 2012

2011
2012
DE_EN



RE: UART Register (getrennt) auslesen
Danke für deine Hilfe.
So ganz verstanden habe ich es noch nicht, als Wert wird jetzt 0 für alle Zeit angezeigt?
Ja, eben weil die Sondenwerte nicht stimmen bin ich mit meinem (begrenztem) Labview Latein am Ende gewesen...
Ich hab nun mal den Beschleunigungswert in z Richtung ausgelesen. Der müsste etwa -1 vielfache von g (erdbeschleunigung) betragen. (Mit der CH robotics software wird dieser Wert angezeigt.)
Als Hex-Antwort bekomme ich "EA 28". Das müsste doch -5528 sein. Mit Skalierungsfaktor für diesen Fall (ca 0.00018) ergibt sich -0.995 also in erster Näherung die erwarteten -1 (g).
Wie weiß Labview nun, dass er die Zahl als Word und 2er Kompliment verarbeiten soll?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2013, 12:40 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2013 12:41 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: UART Register (getrennt) auslesen
Hallo smarties,

Zitat:Als Hex-Antwort bekomme ich "EA 28". Das müsste doch -5528 sein.
Erstmal: EA28h = 59944d (U16) = -5592d (I16)

Zweitens: Was bedeutet "Als Hex-Antwort" bei dir? Bekommst du einen String wie in deinem Beispiel oben (d.h. ASCII-kodiert) - oder bekommst du 2 Bytes als Antwort (die du dir dann im "Hex-Display"-Modus anschaust)?

Zitat:als Wert wird jetzt 0 für alle Zeit angezeigt?
Ich bin von dem Beispiel ausgegangen, welches du gepostet hast. Wenn dieses nicht die Daten enthält, mit denen du wirklich arbeiten musst, kann ich auch nichts dafür...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2013, 20:10 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2013 20:12 von smarties.)
Beitrag #9

smarties Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Oct 2012

2011
2012
DE_EN



RE: UART Register (getrennt) auslesen
Hallo GerdW,

mit "hex-Anzeige" meine ich, dass der Sensor mit z.B. EA28 antwortet welches der Wert für die momentane Beschleunigung in z Richtung als vielfache von g angibt.
Wie geschrieben ist soll EA28 ein 16 bit Integer.
Die Ascii codierung ist mir auch aufgefallen, die wird beim start des VIs angezeigt. Ich habe im String Anzeige / Bedienelement mit Rechtsklich dann jeweils "Hex Display" ausgewählt, das Hex Display für die Antwort zeigt in diesem Fall also EA28 an.
In der Tat ist EA28h = -5592d (I16). Habe mich vertippt, sorry!

Jedenfalls zeigt der Weg über Array indizieren und nach I16 konvertieren das richtige Ergebnis an. Legedlich der rote Punkt am Multiplikationsblock deutet an, dass die Datentypen noch nicht ganz stimmen. Bin aber skeptisch, ob das das der richtige Weg ist?

Dein Weg halte ich für nachvollziehbar, so ists auch intivitiv logisch, aber als Ergebnis wird eine 0 vom Default Eingang (Datentyp hierI16) weitergegeben.


Angehängt mal das VI.


Angehängte Datei(en)
8.5 .vi  StrinzuAnzeige2.vi (Größe: 12,56 KB / Downloads: 198)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2013, 20:21
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: UART Register (getrennt) auslesen
Gerds Antwort in Beitrag #6 ging davon aus, dass du als Antwort in "Normalanzeige" EA28 bekommen hast (also 4 Byte, nicht 2 Byte).

Am schnellsten geht es übrigens mit "Typecast":
   

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Modbus RTU - Read Holding Register Alb 1 5.246 20.12.2017 12:15
Letzter Beitrag: Freddy
  250HZ Signal über UART von PC zu MCB2300 und zurück ? amin 10 11.759 14.08.2009 12:47
Letzter Beitrag: amin

Gehe zu: