PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mini-Segway mit Basic programmieren - Problem!!!



alphatier198
10.05.2010, 20:58
Hey Leute!

ich baue gerade an einem Mini segway und habe mich dafür in die Baskom Basic Programmierung eingearbeitet. Der Segway steuert sich ja dadurch, dass er auf die Sensorwerte, die ihm ein Gyro und ein Beschleunigungssensor mitteilen auswertet. Soweit ist alles gut. Ich verwende als controller einen Atmega 32 und habe gestern gelesen, dass mit Basic das auslesen eines sensorwertes bis zu 300ms dauert! Nun wollte ich ja mehrere Messwerte mitteln um dann mit dem Segway zu reagieren. Jetz weiß ich nicht genau wie ich das Problem lösen soll. Ich habe gelesen man könnte auch Assembler Code mit in das Programm einbauen. Allerdings habe ich davon keine Ahnung und als ich mir das angeschaut habe war ich ziemlich verwirrt. Wie ist es denn mit den werten, wenn ich die in einer Variablen ablegen, wie initialisiere ich den die, ich kann mit dem Assembler code ja nicht auf die in der Basicumgebung initialisierten zugreifen und andersrum oder? Wie muss ich meine Werte hierfür abspeichern. Oder hat jemand ne bessere Idee was ich hier machen könnte?
Vielen Dank für eure Hilfe!
Viele Grüße
Andreas

Vitis
11.05.2010, 13:48
aaalso ... die 300ms sind deutlich übertrieben, ja, die Routine getadc ist etwas lahmer als direkt die Register auszulesen, was die schnellste Methode ist.
Die schnellste Methode den ADC auszulesen ist di Daten linksbündig und nur den MSB, sprich ein Byte zu holen und das ganze noch im free running Mode mit Interrupt bei Sample ... dann können einige kHz Samplerate erreicht werden ... wird bei Dir aber vermutlich nicht gehen, da Du ja mehrere Analogeingänge brauchst.

Dabei ist zu beachten, dass der AVR ATMega32 prinzipiell nur einen (!!) einzigen AD-Wandler (ADC) hat. In der Kosequenz, wenn mehrere Kanäle benötigt werden wird dieser eine ADC auf den jeweils jetzt gebrauchten Eingang umgeschaltet. Dann braucht er erstmal noch ne Zeit um den Messwert zu ermitteln, wodurch durch die Schalterei und dann Messerei eben Zeit und somit Samplerate verloren geht.

Man kann Assembler Code direkt zwischen die Basiczeilen einbauen, das ist kein Problem (Suchbegriff in der Bascom Hilfe: $asm), es wird Dich nur nicht direkt weiter bringen. Zum Einen ist es Käse ASM einzubauen nur um ein paar Register anzusprechen, das kann man unter Bascom auch direkt tun, das schenkt sich praktisch nix, außer das der Code hinterher auch noch lesbar ist. Die Abfrage des ADC-Wertes kann man ebenso direkt aus den Registern und per Overlayvariable ergibt sich auch kaum Geschwindigkeitsverlust gegenüber ASM. Um die Verzögerung für das Wechseln des ADC-Kanales wirst Du aber hardwaretechnisch nicht herum kommen.

s.o.
11.05.2010, 16:15
Frage: Seit ihr von Adveisor?

Vitis
11.05.2010, 17:09
Adveisor ist kein Zeitraum, was die Frage nach der Zeitspanne ziemlich sinnlos macht, oder?

Oder meinst Du dies:

http://www.vocabulix.com/konjugation/sein.html

s.o.
11.05.2010, 17:22
Vitis:??? Nix kapito was du meinen...
http://www.ewt.ei.tum.de/adveisor/index.php?lang=de
Die basteln das nämlich... und auch das Anmeldedatum passt... desshalb frage ich...

Wenn ihr von Adveisor seid, dann geht in die Fachschaft und schnappt euch das Regelungstechnikskript vom Prof. Buzz.
Nochwas: Solange ihr könnt wechselt von Basic auf C, vor allem bei zeitkritischem Regelroutinen. Die Performance wird es euch mehr als danken!