AsuroLib V2.8.0rc1 veröffentlicht
Hallo,
Eine neue Release der ASURO Library steht zum Download auf Sourceforge bereit. Noch ist es keine endgültige Version sondern nur ein Release Candidate. Große Änderungen sind aber nicht mehr zu erwarten.
Die wichtigsten Änderungen gegenüber der Vorgänger Version sind:
* Unterstützung für ATmega168 Prozessoren
* neue Funktion ReadADC zur A/D Wandler Abfrage
* neue Funktion PrintLCD_p zur Ausgabe von Strings aus dem Programmspeicher
* neue Funktion SetCharLCD zum Setzen von Sonderzeichen
* neue Funktion PollSwitchLCD zur Abfrage der Tasten des Arexx LCD
* neue Funktion MyMotorSpeed die Korrekturwerte aus der myasuro.h berücksichtigt.
* neue Funktion SerPrint_p zur Ausgabe von Strings aus dem Programmspeicher
* UART Baudrate einstellbar durch Define
* Interrupt User Funktionen für Timer und A/D Wandler
* AVR Studio Projektfiles für alle Beispielprojekte
Viel Spaß beim Ausprobieren.
Eine Exe Installer Version mit der AsuroFlash IDE folgt in Kürze.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo m.a.r.v.i.n
schöne neue Funktionen vor allem auch für die LCD-Erweiterung.
Ich selbst nutze diese Erweiterung zwar nicht, aber die Attraktivität der LIB wird dadurch ja nur größer.
Was ich aber besonders gut finde ist der Punkt:
* Interrupt User Funktionen für Timer und A/D Wandler
Damit kann ja wunderbar in das Interruptgeschehen eingegriffen werden, ohne jedesmal die LIB neu zu übersetzen.
Projektbezogene INT-Funktion wird super möglich. Klasse Idee, diese Technik in die LIB zu bringen \:D/ .
Hallo rossir,
leider muss ich auch m.a.r.v.i.n zustimmen. Seit gestern Nacht starre ich auf deine Funktion und erst durch ein heutiges ECEL-Blatt bin ich schlauer geworden.
Die in tmp[] gebildete Historie in dieser Form zu nutzen, da wollte ich schon vor 'Jahren' selber drauf kommen. Vor allem geht auch der erste Tik fast nie im Excel-Simulator verloren. (Wenn man nicht zu stark an den Schrauben dreht.)
Aber trotz mangelnder Kommentare: Hut ab
(Für den tmp-Startwert würde ich max(ADC-Wert - 20; 0) einsetzen, jedesmal wenn autoencode 'frisch' eingeschaltet wird. Damit wird die 'Anlaufphase' in tmp drastisch reduziert.
Auch den Teiler 2 bei der tmp-Berechnung würde ich auf 8 (mein Spielwert) erhöhen. Damit schrumpt der Abstand zwischen Min- und Maxwerten am ADC von ca. 40 auf nur noch 6 ADC-Einheiten.)
Als Dankeschön gibt es dafür mein EXCEL-Blatt O:).
Und ausserdem sehe ich gerade deinen Beitrag mit Kommentaren. Die allerdings sind auch nur knapp bemessen. Die Details stecken ja doch 'zwischen' den Semikolons. Motz, Mecker, Schimpf. Das ist leicht ;-)
Gruß Sternthaler
Liste der Anhänge anzeigen (Anzahl: 1)
PollSwitch() beeinflußt unangenehm die encoder[]-Werte
Hallo marvin,
ich glaube da gibt es ein heftiges Problem in der Lib.
Denn PollSwitch() beeinflußt unangenehm die encoder[]-Werte. Obwohl dies doch die Verwendung von autoencode verhindern sollte.
Ich habe mal die Werte von WHEEL_LEFT und WHEEL_RIGHT in Deiner Interrupt-Routine recorded. Während dessen habe ich 6 mal (um den Effekt hier deutlicher zu zeigen) PollSwitch() aufgerufen. In der angehängten Grafik sieht man den desaströsen Effekt auf die WHEEL_LEFT- und WHEEL_RIGHT-Werte. Entsprechend falsch erhöhen sich dadurch die encoder[]-Werte rasant.
(In meiner konkreten Anwendung, flippt mein PID Regler durch diesen falschen Input, genau in dem Augenblick aus, wo er eigentlich vor einer Wand zum halten kommen sollte :( )
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo marvin,
ok, habe ich gemacht. Siehe patch.zip Datei im Anhang.
Ich bin ausgegangen von eurer SVN Revision 192. Im Patch befinden sich nur die Änderungen welche relativ zu dieser Revision notwendig sind. Das sind 7 geänderte Dateien plus eine readme.txt.
Durch diese Änderung sind alle ADC auf Interrupt umgestellt. Dabei habe ich besonders auf die Rückwärtskompatibilität geachtet.
Die encoder werden weiter unterstützt allerdings so verbessert wie von mir hier in
https://www.roboternetz.de/phpBB2/ze...=367880#367880
vorgestellt.
Die gesammelten Kommentare zum Patch finden sich in der Datei readme.txt.
Ich hoffe es gefällt Dir.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo rossir,
ich habe mal einen Blick in deinen Code geworfen.
Schon mal vorab: Mir gefällt vor allem deine intergrierte Gleitwertberechnung für die TIK-Zählerei.
Eine Anmerkung zu der Reihenfolge in asuro.c Init() beim Setzen von ADCSRA und ADMUX. Sollte man nicht umgedreht vorgehen da du mit ADFR und ADSC den Wandler ja schon im 'free running'-Mode startest ohne vorher explizit den Kanal ausgewählt zu haben.
Das folgende sei() erlaubt dann ja nur noch, dass der ADC auch in der Interruptfunktion ankommt.
Ansonsten finde ich extreme Ähnlichkeiten in deinem Aufbau wie ich es schon seit einiger Zeit auch mache.
Auslagern der Datenermittlung in den Interrupt und die 'alten' Funktionen liefern nur noch die Ergebnisse aus der Variablen adcValue[].
Hierzu noch ein Tip. Diese Variable sollte als volatile angelegt werden und in den 'alten' Funktionen sollte vor dem Zugriff auf die Variable der Interrupt gesperrt und danach wieder zugelassen werden.
Liegt daran, dass du sinnvollerweise int-Daten nutzt, die aber dann mehrere Maschinenzyclen zum Auslesen benötigen und somit vom ADC-Interrupt mittendrin unterbrochen werden können. Ein Byte also vom vorletzten ADC-Wert, das andere Byte aber schon vom letzten ADC-Wert.
Hat mich etliche graue Haare gekostet diesen Sachverhalt in der ATmega-Doku zu finden um diese unerwarteten falschen ADC-Werte zu finden.
Ansonsten könnte ich hier noch etwas zu Zeiten beim Ein-/Ausschalten der Sensorbeleuchtungs-LEDs und anderem los werden, aber da kannst du mal bei mir nachsehen. Kommentare sind reichlich vorhanden.
Vorsicht falls du das Programm laufen lässt. Der Asuro fährt mit ein paar Kurven ca. 3-4 Meter weit.
Gruß Sternthaler