Hallo zusammen! Für mein aktuellen Projekt möchte ich 5 Vibrationsmotoren ansteuern und auch deren Intensität verändern können. Das ganze soll aus der Spiele-Engine Unity3d heraus funktionieren, für die es ein Arduino plugin gibt. Verschiedene Interaktionen im Spiel sollen dann die 5 Vibrationsmotoren unterschiedlich stark vibrieren lassen. Ich habe einen arduino UNO und die Motoren hier und schonmal eine kleine Schaltung aufgebaut, mit der ich einen Motor per NPN Transistor und PWM steuern kann. Als ich jedoch probiert habe Werte am Computer über den Seriellen Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von knapp 2 Sekunden ist bis der Wert übernommen wird. In meiner Vorstellung soll dort später aber eine witzig kleine Latenz sein. Ist das mit einem Arduino überhaupt möglich? Ich habe schonmal gelesen, dass man einen arduino mit Assembler programmieren müsste, um schnellen Code auszuführen? Ich würde mich über Hilfe freuen! Schöne Grüße, Fabian
Fabian D. schrieb: > Ist das mit einem Arduino überhaupt möglich? ja, sollte kein Problem sein. Dafür musst du aber erst mal rausfinden, wo genau die Verzögerung auftritt. 2Sekunden sind auch für einen Arduino eine Ewigkeit.
Fabian D. schrieb: > Als ich jedoch probiert habe Werte am Computer über den Seriellen > Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von > knapp 2 Sekunden ist bis der Wert übernommen wird. Lass mich raten: Du benutzt irgendwo in deinem Programm "delay"? In fast allen Fällen liegt hier das Problem.
Fabian D. schrieb: > Als ich jedoch probiert habe Werte am Computer über den Seriellen > Monitor einzugeben ist mir aufgefallen, dass da eine Verzögerung von > knapp 2 Sekunden ist bis der Wert übernommen wird. Wo? > In meiner Vorstellung soll dort später aber eine witzig kleine Latenz > sein. Lustig, deine Vorstellung... (Lies in Zukunft die Sätze einfach nochmal durch und kontrolliere sie auf Sinn und Fehler) > soll dort später aber eine witzig kleine Latenz sein. Dann ermittle doch einfach, wo in der Signalkette diese Verzögerung passiert. Denn es ist eigenlich nut bei Quadcore-Boliden mit 3GHz üblich, dass auf einen Tastendruck oft erst mit wahrnehmbarer Verzögerung reagiert wird. Miss auf der Seriellen Schnittstelle, wann die Daten übertragen werden und wie lange es dauert, bis der Motor angeschaltet wird. Evtl. ist nämlich nicht der uC für die Verzögerung verantwortlich, sondern der stromfressende Rechenbolide...
Vielen Dank erst einmal für die schnellen Antworten! Ich gehe auf Fehlerjagd und Berichte dann.
Ich fürchte ich muss erstmal in neue Hardware investieren... Ich hatte meinen Arduino damals bei einem Händler aus Deutschland bestellt und einige Zeit später festgestellt, dass es eine gefälschte Kopie ist.. Hat immer schon Probleme mit der Verbindung per USB gemacht und wird nun garnicht mehr erkannt. Vielleicht ist das ja sogar auch Schuld an der "witzig kleinen" Latenz ;) Wenn ich mir jetzt sowieso etwas neues kaufe: Macht es Sinn einen anderen Microcontroller, oder zumindest einen anderen Arduino als den UNO zu kaufen?
Fabian D. schrieb: > Wenn ich mir jetzt sowieso etwas neues kaufe: Macht es Sinn einen > anderen Microcontroller, oder zumindest einen anderen Arduino als den > UNO zu kaufen? Für die Aufgabe "5 Ausgänge mit PWM ansteuern" sollte es allemal dicke reichen. Wir reden hier immerhin von einem 16 MHz Mikrocontroller. Kauf Dir Originalhardware von einem vertrauenswürdigen Distributor. Also zum Beispiel einen originalen Arduino Uno (bzw. Genuino Uno). Dann hast Du auch keine Scherereien.
Der neue Arduino Uno ist da und läuft perfekt. Habe nun herausgefunden, warum mein Programm so langsam war: Ich habe Serial.parseInt() benutzt, die nach empfangen des letzten Zeichens noch länger wartet, ob nicht doch noch eine weitere Zahl kommt und hat somit mein Programm so langsam gemacht. Dafür funktioniert aber alles und auch das Ansteuern aus Unity3D heraus um die PWM-Frequenzen zu manipulieren läuft perfekt ohne spürbare Latenz. Vielen Dank an alle die geholfen haben!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.