Guten Tag.
Da nun endlich alle Teile für meinen Tricopter angekommen sind, konnte ich das LCD_Config jetzt endlich auch mal im realen Einsatz testen. Dabei fiel mir auf, dass nach der Kalibrierung die MWC Software scheinbar neu anfordert, habe das Programm entsprechend geändert.
Anbei dann also die Version 1.25 mit Logging Funktion. (Hatte mir überlegt, schon auf Version 2.0 hochzugehen, aber durch das Logging haben sich die Testfälle dermassen vervielfacht, dass ich eigentlich damit rechne, dass es noch an der einen oder anderen Stelle bisschen ruckelt und wahrscheinlich noch ein paar Update folgen werden, bevor es richtig stabil läuft).
Änderungen:
* Entwicklungsumgebung ist Arduino 022, in der 021 ist die SD Library noch nicht vorhanden.
* keine wesentlichen Änderungen, was die schon vorhandenen Funktionen betrifft, nur das Fehlerhandling wurde etwas verbessert (z.B. Klartext statt "Read Error #1"). Im Startzustand wird ausserdem jetzt der "AutoLevel" Zustand aktualisiert.
* Das SRAM wurde etwas freigeschaufelt und die meisten Strings ins Flash verschoben.
* Antwort auf Requests vom MWC Board (siehe oben) eingebaut.
* Logging: wenn eine SD Karte über SPI angeschlossen ist, gibt es nun die Möglichkeit, die empfangenen Daten vom MWC auf die Karte zu loggen und das Logfile anschliessend an das MultiWiiConfig zu übertragen. (Ich habe bis jetzt SD und SDHC Karten ausprobiert mit 1 oder 2 GByte und FAT16 und FAT32 Filesystem, scheint bei allen zu funktionierten). Wenn ein LogFile auf der Karte vorhanden ist, wird am Anfang abgefragt, ob das LogFile via serieller Schnittstelle abgespielt werden soll. Der Logging Mode wird ins EEPROM gespeichert und ist auch nach einem Neustart wieder aktiv, Abschalten/Anhalten kann man ihn durch Drücken einer Taste. Beim Einschalten des Logging Modes kommt eine Abfrage, ob sofort mit dem Loggen begonnen werden soll oder ob nur der Logging Mode eingeschaltet werden soll (in letzterem Fall geht das Programm in eine Endlosschleife, aus der man nur durch Reset wieder herauskommt - it's not a bug, it's a feature). Weiterhin gibt es die Möglichkeit, Logfiles zu löschen und das Delay einzustellen, die das LCD_Config beim Loggen zwischen zwei Abfragen wartet (von 0 bist 2500 ms). Logfiles bestehen aus drei Ziffern und der Extension ".log" und können natürlich auch vom PC gelesen werden (die Daten sind allerdings binär abgelegt). Sprich, es können maximal 1000 Logfiles angelegt werden (bin mir aber ziemlich sicher, dass soviele sowieso nicht in das Rootverzeichnis eines FAT Filesystems passen

).
Die Logging Funktionen können über Auskommentieren der Konstante LOGGING auch herauscompiliert werden. (Gibt jetzt jede Menge #ifdef's im Code, was die Lesbarkeit nicht unbedingt vergrößert.) Allerdings ist mir aufgefallen, dass es noch andere Probleme mit den Preprocessor Kommandos gibt als das, was weiter oben schon mal behandelt wurde. Wenn LOGGING undefiniert ist, linkt Arduino scheinbar trotzdem die SD Library in das Executable, jedenfalls wird das Executable um gut 4 kB kleiner, wenn man zusätzlich auch noch die Zeile #include <SD.h> auskommentiert. Wer versucht, das ganze auf nem ATMega168 zum laufen zu bringen, muß das unbedingt beachten, ansonsten wird das Executable zu groß.
Was mich noch ein bisschen stört, ist, dass die Hintergrundbeleuchtung des LCDs beim Loggen flackert, ich nehme an, dass ist ein Hardwareproblem, konnte aber noch nicht ganz rauskriegen, woran das hängt (die Ausgabepins für das LCD und für SPI überschneiden sich nicht). Nehme an, das ist eine Timergeschichte. Ausserdem gibt es ohne LCD keine Möglichkeit, das Loggen anzuhalten, sprich, wenn man das LCD_Config ohne Display mitfliegen läßt, wird beim Ausschalten das Logfile nicht geschlossen. Ausser den Daten, die sich zu dem Zeitpunkt noch im Buffer (512 Byte) befinden, scheint dabei nichts verloren zu gehen, bin mir aber nicht sicher, dass das immer so sein muß.
Have Fun.
