LabVIEWForum.de - USB Datenübertragung aus Mikrocontrollerprojekt

LabVIEWForum.de

Normale Version: USB Datenübertragung aus Mikrocontrollerprojekt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo.


Ich möchte gerne via USB-Schnittstelle Daten aus einem selbstentwickelten Mikrocontrollerprojekt auslesen. Beim Mikrocontroller handelt es sich um einem Atmel 90 USB 1287.
Alle 10ms sollten die Daten aus dem Mikrocontroller vom PC ausgelesen werden, erst dann beginnt wieder eine neue Messung. Die Datenübertragung findet über den Interrupt Transfer Modus statt.
Beim Projekt handelt es sich um ein Postionsbestimmungssystem, dessen Ausgabewerte mit Hilfe des LV-Programms in einem XY-Graphen dargestellt werden sollen.
Ich habe einen VISA-Treiber installiert und im wesentlichen ein Beispielprogramm von ni.com übernommen.

Nun ist es so, dass das Gerät, wenn es einfach am Windows Rechner angesteckt ist, also keine Datenauswertung über LabVIEW stattfindet, wie geplant alle 10ms eine Messung macht.
Soll nun die Auswertung über LV stattfinden, verringert sich die Messfrequenz gewaltig. Es werden nur noch etwa 2-4 Messungen in der Sekunde gemacht.
Kann es sein, dass LV zu lange braucht, um die Daten vom Mikrocontroller zu verarbeiten, weil dieser ja erst wieder eine Messung macht, wenn die Daten "abgeholt" sind ?

Wie schon erwähnt, erfolgt die Datenübertragung über den Interrupt Transfer Modus, mit dem drei 16 Bit Variable die benötigten Daten übertragen.

Danke schon mal im Vorraus

Michael
HI Michael,

Zeig uns doch mal deine Programteile mit dem USB-Zugriff, ambesten als VI und als Screenshot.
Kann man per VISA überhaupt auf Low-Level-Ebene auf den USB zugreifen?

Benötigt man nicht typischer weise einen Treiber der a) Windows sagt welche USB-ID welches gerät hat und b) den USB-Zugriff an VISA weiterreicht?

Gruß, Rob
Hallo.

Ich geb in der Benutzeroberfläche einfach die Vendor und Produkt ID des Gerätes ein, welche ich bei der Installation des VISA-Treibers (VISA Treiber Development Wizard) vergeben habe.
Soweit funktioniert das alles auch schon, nur eben glaube ich, dass LabVIEW zu lange braucht um die Daten vom Mikrocontroller zu verarbeiten.
Der nimmt ja erst einen neuen Messwert auf, wenn der PC fertig ist mit der "Abholung" der Daten.
Wobei aber 10 ms auch ne lange Zeit ist, müsste man ja eigentlich glauben.
Ich weiß nicht, woran das sonst liegen könnte, dass das Gerät so langsam wird beim Aktivieren des LV-Programms.
Danke,

Michael
Hallo Michl,
nimm erstmal die Visa Open und Visa Close aus der Schleife raus,
sonst öffnet und schliesst LV die Schnittstelle in jedem Zyklus und das kostet zeit.

Wenn es dann noch zu langsam ist,veringere deine Wartezeit auf zB. 5

Ändere die Konstante die am schleifen abbruch Anschluß dran ist in nen Stopp Button. Du brichst dein VI immoment wohl über den oberen Abbrechenbutton ab.
Mit den Button würgst du LV ab. Da könnte dann irgendwas nich richtig geschlossen oder freigegeben werden.

Wenns dann immer noch zu langsam ist -> schau mal wieviel zeit die beiden ExpressVis brauchen.

Grüße
Achimedes
Hallo.

Vielen Dank erstmal.
Ich hab nun die VISA Open und VISA Close raus, und nun läufts erstmal periodisch mit 10 ms.
Verwunderlich ist nur, dass manchmal das Signal quasi in Echtzeit übertragen wird, und nach einem Neustart
eine ordentliche Verzögerung eintritt. Das kann ich mir nicht erklären.

Und warum brauche ich die Schleife überhaupt ?
Unten rechts müsste ich doch mit einem "false" die while Schleife abbrechen, und somit die Signalauswertung
beenden können, bei Schalter umlegen springt aber nur der Iterationszähler auf Null zurück, und das Programm
läuft munter weiter.
Tut mir Leid, wenn ich euch mit solchen Anfängerfehler behellige.

Michael
Du startest dein vi warscheinlich mit der Schaltfläche "Wiederholt ausführen"
dabei wird dein Vi nach beenden gleich wieder gestartet.
Du solltest es mit der Schaltfäche "Ausführen" (nur ein Pfeil) starten. Dann stoppt dein Vi nach beenden mit dem Stopbutton.

Die verzögerung nach dem Neustart kommt wahrscheinlich vom initialisieren vom USB, wenn der initiallisiert ist beginnt die Schleife zu laufen und nach dem beenden der Schleife wird die Schnittstelle wieder freigegeben.

Jedes Programm in jeder Sprache sollte oder ist so aufgebaut.
(Initialisieren)--> (Ablauf Whileschleife) --> (Resurcen freigeben, Rücksetzten)
Hallo.

Jetzt hab ich's kapiert mit der Schleife. Also mit den Stoppbutton das vi beenden.
Aber das mit der Verzögerung ist trotzdem noch nicht behoben. Diese Verzögerung tritt
auch mehr zufällig auf; manchmal geht's in Echtzeit und manchmal kommt alles erst mit der
halben Sekunde Verzügerung am xy-Graphen an.
Am Programm kanns ja nicht mehr liegen, oder ?
oder ist das Projekt einfach zu schnell für LV ?
Vorher wurden die Werte nämlich unter nen Linux Rechner dargestellt und da liefs ohne weiteres.
Und ich sollte eben ne Darstellung auf Windows Oberfläche kreieren.

Michael
' schrieb:Hallo.

Jetzt hab ich's kapiert mit der Schleife. Also mit den Stoppbutton das vi beenden.
Aber das mit der Verzögerung ist trotzdem noch nicht behoben. Diese Verzögerung tritt
auch mehr zufällig auf; manchmal geht's in Echtzeit und manchmal kommt alles erst mit der
halben Sekunde Verzügerung am xy-Graphen an.
Am Programm kanns ja nicht mehr liegen, oder ?
oder ist das Projekt einfach zu schnell für LV ?
Vorher wurden die Werte nämlich unter nen Linux Rechner dargestellt und da liefs ohne weiteres.
Und ich sollte eben ne Darstellung auf Windows Oberfläche kreieren.

Michael
Hängen noch andere Geräte am USB?
Oder macht Windows abundzu nen USB-Scan um nach neuen Geräten zu suchen?

Gruß, Rob
Hallo.

Ich weiß nicht wie Windows USB bezüglich arbeitet.
An USB Geräten hängt eigentlich nur die USB Maus dran. Aber daran kanns doch auc h nicht liegen.
Es ist halt komisch, dass es manchmal funktioniert und manchmal nicht.

Gruß, Michael
Hallo.

Liegt wohl an meinem langsamen Rechner das das Signal so verspätet angezeigt wird.

schöne Grüße
Michael
Referenz-URLs