ich habe noch nicht so viel Erfahrungim Bereich Arduino und steh gerade vor einem Problem.
Die Aufgabe ist, ein Signal über Signalgenerator am analogen Eingang des Arduino zu lesen und in Labview als Graph, sozusagen als Oszi Bild darzustellen.
Dazu habe ich mir das Labview Interface for Arduino geladen und damit eigentlich soweit alles aufgebaut. Jedoch kann ich mir nur sehr kleine Frequenzen anzeigen lassen... sobald ich ein sinus oder rechteck am Eingang habe mit mehr als ca 40Hz wird der sinus zum dreieck etc...
Weis zufällig jemand wie ich das Problem lösen kann ?
Ich hab mal geschaut...bei einem Sinus von 50Hz hat er auf einer Sinuswelle gerade mal 7 Abtastpunkte...das ist laut Datenblatt ja viel zu wenig was er eig können müsste
ja also als sketch habe ich nur das vorgegebene standard program genommen was seitens labview für die kommunikation gegeben wurde...
Im labview Forum mal fragen ?
Kennst du die Serial Plotter Funktion in der aktuellen Arduino IDE?
Wenn deins besser werden soll, musst du bei Arduino tiefer einsteigen (geht aber auch),
wenn dein labview Dingens noch schlechter ist, taugt es nichts für deine Zwecke.
In der Regel ist die Serielle Schnittstelle der Flaschenhals, nicht analogRead. (Sagt meine Kristallkugel)
Versuchs doch mal mit einer abgespeckten Version, die nur die Analogwerte einliest und über Serial verschickt. Dann können wir versuchen, eventuelle Bremsen in diesem Code zu finden.
Immer der Reihe nach. Erst mal sollte ermittelt werden, wie schnell die Analogeingabe tatsächlich ist. Dann kann man der Reihe nach die Bibliotheken hinzufügen um festzustellen, wo's klemmt.
Erst mal sollte ermittelt werden, wie schnell die Analogeingabe tatsächlich ist
Standard analogRead() braucht ca. 120 µs, das wären ca. 8000 Werte/sec, ein ganze 50 Hz Sinus-Schwingung könnte 150 mal abgetastet werden.
Bei 400 Hz hätte man nur noch 20 Messungen je Schwingung, da wäre in etwa eine Grenze, wo man überlegen könnte, ob mehr Messungen mit geringerer Auflösung (8 bit) sinnvoller wäre.
Aber, wie ich schon erwähnt habe, wenn man an ein fremdes Serielles Protokoll (labview) gebunden ist, ist die erste Frage, wie lange die Datenübertragung braucht.
Und ob/wie man Messen und Senden parallel laufen lassen kann.
michael_x:
Standard analogRead() braucht ca. 120 µs, das wären ca. 8000 Werte/sec, ein ganze 50 Hz Sinus-Schwingung könnte 150 mal abgetastet werden.
Bei 400 Hz hätte man nur noch 20 Messungen je Schwingung, da wäre in etwa eine Grenze, wo man überlegen könnte, ob mehr Messungen mit geringerer Auflösung (8 bit) sinnvoller wäre.
Das ist korrekt, soweit hab ich das auch schon ermittelt...
Jedoch reicht das völlig da ich spatter lediglich wechselspannungen von lem wandlern lesen und überprüfen möchte....
michael_x:
Aber, wie ich schon erwähnt habe, wenn man an ein fremdes Serielles Protokoll (labview) gebunden ist, ist die erste Frage, wie lange die Datenübertragung braucht.
Und ob/wie man Messen und Senden parallel laufen lassen kann.
und ich denk auch das er damit überfordert ist gleichzeitig zu lesen und zu senden über labview
es gibt ja zahlreiche osi program für den arduino die ich mal getestet habe und da zeigt es mir die 400hz sinus schwinung problemlos an....allerdings weis ich nicht wie die es gemacht haben
die idee ist ja alles erstmal in einem array zu speichern und nach meinetwegen 1000messungen erst zu senden...doch was das umsetzen angeht fehlt mir leider der richtige ansatz für die programmierung
Für 1000 Messungen brauchst Du schon ordentlich Pufferspeicher, ein 328 ist damit jedenfalls überfordert. Aber ohne Puffer oder ordentliche Zeitsteuerung wird es schwer, die Signale unverfälscht zu erfassen. Eventuell wird das mit einer Steuerung über Timer-Interrupts besser, und die Daten gleich seriell weiterschicken. Mit einem echten DSP kann ein Arduino sowieso nicht mithalten, da muß man schon ein paar Abstriche machen.
Zu Labview kann ich nichts sagen. Gibt es da keine Möglichkeit, Daten in größeren Blöcken zu übertragen?
Ja die 1000 Messungen waren nur so als Wert in den Raum geworfen.
Was das LabView interne angeht, da muss ich mich mal in einem labview forum schlau machen, bin da auch noch nicht so drin ist alles erst recht neu für mich aufgrund des Studiums...
Also ich werd das ganze wohl nochmal neu beginnen ohne das Plugin direct für den Arduino...
Kann mir jemand sagen wie ich Daten auf dem Arduino speichern und dann auslesen kann ?
Habe etwas über die 4 Register ADMUX, ADCSRA, ADCL und ADCH gelesen...nur besteht auch die Möglichkeit alle 6 analog Pins gleichzeitig zu lesen ? oder wird er damit überfordert sein ?