Ich verstehe nicht ganz wo ich den Pfad anpassen muss ...Zitat von m.a.r.v.i.n
Bitte um eine genaue Anleitung ...
Danke!
Hallo inka, hallo m.a.r.v.i.n,
dann wäre es aber noch interessant zu ermitteln, ob es ausreichen würde NUR die Interrupt-Funktion aus der ultrasonic.c in die asuro.c zu VERSCHIEBEN.
Also die 'normalen' Funktionen' in der ultrasonic.c lassen, und eben NUR die Interrupt-Funktion in die asuro.c.
Hierbei muss dann aber auch das Makefile für die LIB angepasst werden, damit die ultrasonic.c dann auch mit in die libasuro.a compiliert wird.
Wenn das dann funktioniert, sollte man dies in der nächsten Asuro-LIB-Version so aufnehmen.
Gruß Sternthaler
P.S.: Ja, die Seite vom ehenkes ist tatsächlich sehr ausführlich. Ist schade, dass er schon lange nicht mehr im Asuro-Bereich 'gesehen' wurde. War immer spannend seine Beiträge zu diskutieren.
Lieber Asuro programieren als arbeiten gehen.
Ich verstehe nicht ganz wo ich den Pfad anpassen muss ...Zitat von m.a.r.v.i.n
Bitte um eine genaue Anleitung ...
Danke!
hi Sternthaler,
ist das die ganze timerfunktion?
-----------------
ISR(TIMER2_COMP_vect)
{
count36kHz++;
if(!count36kHz) timebase++;
}
-----------------
gruß inka
Hallo,
@inka, ja das ist die komplette Funktion. Das kopieren bringt aber wohl nichts.
Ich habe mir das gestern nochmal angeschaut. Die ultrasonics.c wird ja gar nicht mit in die Lib gelinkt, sondern immer direkt zum Projekt dazugelinkt. Deshalb bruacht da nichts in die asuro.c kopiert werden. Allerdings sind mir zwischen dem Code von e. henkes und dem Code der Asuro LIb einige Unterschiede aufgefallen. Darin liegt wohl der Fehler. Meine US Erweiterung funktioniert leider immer noch nicht (ist zwar kein Kurzschluß mehr, aber auch keinerlei Funktion erkennbar).
@sternthaler Ich denke ich werde den Programcode von e. henkes unverändert in die Asuro Lib übernehmen.
@h3llGhost Den Libpath ändert man im Makefile des Projektes. Z.B öffnet man das File Makefile im Ordner examples\FirstTry und suchjt die folgenden Zeilen:
Zeilen mit # (Doppelkreuz) sind Kommentare, werden also beim Erstellen des Projektes ignoriert. Die ZeileCode:# additional Include path for libraries #LIBPATH = C:/ASURO_SRC/AsuroLib/lib LIBPATH = ../../lib
LIBPATH = ../../lib
gibt den relativen Pfad zur Asuro Lib an. (Das bedeuted hier: Zwei Verzeichnisse Richtung Rootverzeihnisund dann ins Unterverzeichnis lib wechseln. Dort befindet sich die Asuro lib). Für alle mitgelieferten Beispiele ist das so OK und funktioniert ohne Änderung.
Um den Pfad zu ändern, weil deine Projekte in einem anderen Verzeichnis, Laufwerk oder so stehen, kannst du dich an der auskommentierten Zeile darüber orientieren.
#LIBPATH = C:/ASURO_SRC/AsuroLib/lib
Das ist ein z.B. absoluter Pfad auf das Asuro Lib Verzeichnis. Trotz Windows Umgebung sollte man hier den normalen / (Slash) verwenden nicht den \ (Backslash). Einfach das Makefile aus dem FirstTry Ordner als Vorlage in den eigenen Projekt Ordner kopieren, den Pfad ändern, und übersetzen (mit make) oder dem test_all.bat File (kann man ebenfalls aus dem FirstTry Ordner kopieren).
hi m.a.r.v.i.n,
evtl ein problem?
der code von ultrasonic.c habe ich jetzt in der asuro.c drinn, es funktioniert soweit, aber:
der befehl GoTurn funktioniert hier nicht. Er müsste um 90° drehen und weiterfahren, dreht sich aber ständig im kreis...Code:#include "asuro.h" #include "ultrasonic.h" #include "inka.h" int main(void) { int abstand; Init(); WaitforStart(); while(1) { abstand = Chirp(); StatusLED(GREEN); if (abstand < 15) { StatusLED(RED); BackLED(ON,ON); GoTurn(0, 90, 150); } else { StatusLED(GREEN); BackLED(OFF,OFF); MotorDir(FWD, FWD); MotorSpeed(150, 150); } } return 0; }
Habe ich da wieder was falsches drinn, oder hängt es mit den interrupts zusammen?
gruß inka
achte darauf, interrupts zu aktivieren vorher.. ich meine mich zu erinnern dass die beim ultraschall zeugs manipuliert werden.
die interrupts werden doch damit nach beenden des Chirp() wieder aktiviert, oder?
Code:/** * restores the hardware after using the Ultrasonic module * this function is called automaticly after a Chirp */ void RestoreAsuro(void) { TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20); OCR2 = 0x91; // duty cycle for 36kHz TIMSK |= (0 << OCIE2); // OCIE2: Timer/Counter2 Output Compare Match Interrupt Enable ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64 ACSR |= (0 << ACIS1); if(autoencode) { EncoderInit(); } Sleep(1); }
gruß inka
vielleicht weil sich BackLEDs und Odometrie nicht mieinander vertragen?Zitat von inka
Gruss
M.
habs jetzt noch einmal getestet, auch beim auskomentieren der BackLEDs dreht er nur seine piruetten...
also werde ich weiterdenken...
gruß inka
Hallo inka,
EncoderInit() muß natürlich auch aufgerufen werden, damit GoTurn funktionieren kann.
Lesezeichen