PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Go Funktion nicht Interruptfähig!?



Arphiba
09.05.2011, 23:02
Hallo alle zusammen!

Ich bin schon lange stiller leser dieses Forums. Doch heute kam eine Frage auf die sich für mich nicht durch die "Suchen" Funktion klären lässt. Wohlgemerkt zum ersten mal!

Also nun zum Problem:

Mein Asuro soll sich innerhalb eines Labyrinthes in "Schritten" fortbewegen. Dazu benutze ich aktuell die "Go(,);" Funktion da diese die Odometrie nutzt.
Da ich aber um navigieren zu können die Taster abfragen muss benutze ich hierzu die "StartSwitch" Funktion da diese ja einen Interrupt darstellt.

Wenn mein Asuro nun an eine Wand fährt und die Räder, bei gesetzten Tastern, blockieren bekommt wohl die Go-Funktion keinen Wert für die zurückgelegte Strecke zurück. Der Asuro bleibt einfach stehen ?? Das Programm springt also nicht zur Interrupt Routine für die Schalterabfrage ? Ist dies unvermeidbar oder habe ich da etwas übersehen?

Vielen Dank schon mal im Vorraus,

Gruß Arphiba

markusj
10.05.2011, 12:09
Sowie ich mich die Interna der RN-Asurolib noch zusammenkratzen kann, mag deren Implementierung nicht mehr als einen ADC-Task, entweder es wird die ganze Zeit der Encoder gepollt, oder du machst andere Dinge, beides zusammen geht aber nicht.
<Schleichwerbung>Mit der Tiny ASURO Lib (https://www.roboternetz.de/community/showthread.php?49779-Tiny-ASURO-Library-Eine-weitere-Bibliothek-f%FCr-den-ASURO) funktioniert das was du tun möchtest, du kannst dort den ADC in so ziemlich *jeder* Lebenslage verwenden</Schleichwerbung>

mfG
Markus

Arphiba
10.05.2011, 14:18
Hi Markus,

ahh das dachte ich mir schon! Danke dafür!
Ich habe mir gerade deine Tiny ASURO Lib runtergeladen und angeschaut. Doch leider schaffe iche s nicht sie in AVR Studio einzubinden sodas ich auch nur "Self test" oder sonstiges compilieren kann. Zu was für einem Verzeichnis muss ich im Makefile verlinken? Wo mein Projekt liegt? Oder "asuro" und "util"?? Ich bekomme das aus deiner Dokumentation leider nicht rausgelesen.

Jezt muss ich mal sehen wie ich weitermache. Die Lösung mit der vorherigen Lib ist es wohl eine Funktion zu schreiben die mittels der Odometrie nur gerade fährt... bis eben ein Taster gedrückt wird und den Interrupt auslöst.

Vielen Danke für deine Mühe!
MfG

Arphiba

markusj
10.05.2011, 15:49
Zu was für einem Verzeichnis muss ich im Makefile verlinken? Wo mein Projekt liegt? Oder "asuro" und "util"?? Ich bekomme das aus deiner Dokumentation leider nicht rausgelesen.

Ich habe die Bibliothek nie mit AVR Studio verwendet, nach meinem Wissensstand kann man aber im AVR Studio auch Makefiles aufrufen lassen.
Das Makefile muss im (Wurzel-)Verzeichnis deines Projektes liegen und dann wie folgend modifiziert werden:
"TARGET" muss auf den Dateinamen der Quelltextdatei gesetzt werden, die die "main"-Funktion enhält. (Quasi das Haupt-Sourcefile) Im Falle meiner Beispiele ist das "main".
"SRC" muss um deine übrigen Quelltextdateien ergänzt werden.
"TINYASURODIR" muss auf den Ordner verweisen, in dem "asuro", "util" und, sofern du die Bibliothek in vorkompilierter Form verwendest, auch die "libtinyasuro.a" liegen. Das dortige Makefile dient übrigens zum bauen der Bibliothek und nicht von eigenen Projekten.

Am Einfachsten startest du, wenn du eines der beiden lib-* Beispiele aus dem "examples"-Ordner kopierst, den Inhalt von "main.c" nach eigenen Wünschen ausprogrammierst und deine zusätzlichen Quelltextdateien dann unter "SRC" im Makefile einträgst. Außerdem muss, wenn du die Kopie nicht gerade in ./examples/ ablegen möchtest, halt "TINYASURODIR" wie oben erwähnt angepasst werden.

mfG
Markus