#901 Re: Eigenbau Spektrum Modul für Futaba T8
Verfasst: 22.10.2012 15:01:18
Das Arduino kann locker 12V am Eingang ab!
Hallo,Für die Leute, die sich etwas unwohl fühlen mit verschiedenen Sketches, Arduino-Versionen und Versorghungsspannungslevels, für die sei hier nochmal kurz die Arduino-Freie Version mit nem simplen ATMEGA8 dargestellt. Auch nur ne Handvoll Bauteile. Ich verwende das, wie schon erwähnt, seit mehreren Jahren zusammen mit ner MPX 3030 (funktioniert auch direkt an der L/S-Buchse von Multiplex-Anlagen) und einem HF-Teil aus dem MLP4DSM Sender und unterstützt 6 Kanäle.
Ist halt was für Selberlöter. Auf die Darstellung der ISP-Leitungen habe ich verzichtet (ich toaste den Mega lieber auf dem STK500-Sockel und schleppe dann nicht die nächsten Jahrzehnte einen unbenötigten Anschluss im Sender mit rum).
Das zugehörige Hexfile (enthält intern ein Channel Mapping auf die Multiplex-übliche Kanalreihenfolge) gibts bei mir per PN.
gruß
andi
Nachtrag:Re: Eigenbau Spektrum Modul für Futaba T8
Beitrag #839 von hiwi » 06.08.2012, 14:06:05
Hallo Zusammen,
den Link aus dem chinesischen Blog kenne ich.
Es gab hier das Problem mit einer Hitec Anlage, die eben auch eine andere Framezeit als 22ms hat.
Der Chinese hat aber nicht geschrieben, ob er auch ein Zittern hat.
Er hatte anfangs die gleiche verzögerte Servoreaktion wie wir hier.
Ich habe auch gelegentlich ein leichtes Zittern, im Flug davon bisher aber nichts bemerkt auch nach hunderten Flügen mit MCPX , MQX und MSR keine Ausfälle gehabt.
Ein ganz leichtes gelegntliches Zittern habe ich auch bei meiner T8FG.
Die Software aus Post #757 ist die originale Software von Daniel, die ich nur auf den neuen Arduino Compiler 1.x angepasst habe.
Ich habe bereits stundenlang logs geschrieben und ausgewertet, auch versucht in der Software die Frameraten im Falle der "Ungültigkeit" während des Interuppts
in einem extra Array zu sammeln und dann zu debuggen. Aber dieser Fall ist im Betrieb nie eingetreten. Ich vermute eher, dass es mit der seriellen Übertragung
an das Spektrummodul zusammenhängt. Diese ist nicht immer exakt gleich lang und daher gibts eine kleine "Drift".
Man muss den Workflow des Programms verstehen, um hier etwas umbauen zu können. Die neue Software funktioniert etwas anders als die alte. Bei der neuen
Software werden die Daten immer dann übretragen, wenn der Frame komplett gelesen wurde. Da Spektrum und die T8 20ms verwenden, klappt das ohne Probleme
Die alte Software versucht dies immer zu einem bestimmten Zeitpunkt, nämlich nach ca. 20ms unabhängig von der Interuptroutine. (übrigens hat die alte Arduino Software nicht alle Befehle durch Interrupts auch wirklich unterbrochen). Dauert es beim Interrupt etwas länger, dann könnte es schon mal zu Überlagerungen kommen,d.h. es wird ein älterer Wert aus dem letzten Frame gesendet. Bei einer Framerate von 20ms mag das verschwindend gering sein, aber möglicherweise der Grund für das Zucken.
Daher funktioniert auch die neue Software nicht mit Anlagen die eine PPM-Framerate > 22ms haben.
Abhilfe kann nur dadurch erfolgen, dass man die Daten immer exakt zu einer bestimmten
Zeit sendet, also mittels eines 2. Timerinteruppts, der nach eben 20ms die Daten verschickt. Eine nicht ganz befriedigende Lösung war das Abspecken der
Software auf ein Minimum, was ich im Thread #756 mal gemacht habe, aber es ging mit der FF6 schon mal ganz gut.(serialprint befehle zusammenfassen, unnötige if/else Konstrukte entfernen etc.) Ich bin mir nicht sicher, ob das 328er Board das kann, ich werde mir das ganze
mal ansehen.
Ihr könnt ja selber mal probieren mit vreschiedenen Frameraten zu arbeiten und zwar ist das in der Software unten im Linkerswitch:
#else
delay(20);
#endif
definiert, hier kann man das zwischen 15 und 22 variieren, es braucht ja auch noch etwas Zeit (ca. 1-2ms) die Daten seriell rauszuhauen.
In der neuen Software habe ich folgendes modifiziert: Ich sende die Daten erst wenn 20ms vergangen sind, startTime wird vorher
initialisiert.
if (millis()-startTime >= 20){
startTime = millis();
sendDSM2();
}
Das ist aber nicht so exakt wie eine timergesteuerte Variante.
Ich möchte zuletzt aber noch zu Bedenken geben:
Ein langsames System kann man nicht an ein schnelleres ankoppeln ohne fehlende Daten zu faken, d.h. wenn das Spektrumboard alle 20ms einen Frame erwartet , wir die Daten aber nur alle 24 ms vom Host zur Verfügung gestellt bekommen müssen logischerweise Daten fehlen, wenn ich nach 20ms sende. In diesem Fall kann ich natürlich den alten Wert wiederholen, aber damit wird die Latenzzeit deutlich schlechter bis hin zum ganz verzögerten Ansprechen, wie wir das auch beobachten. Damit wären meinen theoretischen Ansätze wohl auch in der Praxis bewiesen, oder?
Diese "Dreiecke" bedeuten, das diese Punkte auf Masse ( Gnd ) gehen...oder auch Minus genanntAlmigurt hat geschrieben: (es geht so mit dem verstehen , aber was zur Hoelle bedeutet das Dreieck unter dem Taster )