PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Lib V2.71 veröffentlicht



m.a.r.v.i.n
18.11.2007, 19:25
Hallo zusammen,

heute wurde endlich mal wieder eine neue Version der Asuro Lib veröffentlicht und steht ab sofort zum Download auf Sourceforge (http://sourceforge.net/projects/asuro) bereit.

An der Bibliothek selbst wurde nicht sehr viel geändert:
* Pfadangaben in Makefiles wurden vereinfacht (Autor: m.a.r.v.i.n)
* Projekt Files für AVR Studio und Programmers Notepad kamen dazu (Autor: m.a.r.v.i.n)
* PrintFloat Funktion kam dazu (Autor: M1.R)
* Unterstützung der Ultraschallerweiterung (Autor: dopez)
* kleinere Bugfixes (Variablen volatile gemacht, falls diese in
Interruptfunktionen verändert werden) (Autoren: Sternthaler, m.a.r.v.i.n)

Das Hauptproblem, die Installation, mit der sich viele Nutzer in der Version 2.70 rumplagen mußten, sollte nun deutlich einfacher sein.
So entfällt das kopieren der erzeugten Asuro Objekt Library
in den ACR-GCC Lib Ordner. Die Objekt Library (libasuro.a) bleibt nun in dem Verzeichnis in dem sie erstellt wurde und muß nicht mehr ins AVR Lib Verzeichnis kopiert werden, ebnso die Headerdatei asuro.h. In den neuen Makefiles muß jetzt nur noch eine Zeile (LIBPATH) angepasst werden um das Makefile für beliebige eigene Projekte zu verwenden. In der Doku ist das alles (hoffentlich verständlich) erklärt.

Sternthaler
18.11.2007, 20:03
Hallo m.a.r.v.i.n
klasse, neue Verion ist immer gut.

Hier noch ein paar Kleinigkeiten, die auch geändert wurden:
* SerWrite() schaltet den Sender zum Schluß aus um Strom zu sparen.
* UartPutc() schaltet den Sender zum Schluß aus um Strom zu sparen.
Folgende Funktionen profitieren davon:
* SerPrint() aus print.c
* PrintLong() aus print.c
* PrintInt() aus print.c
* PrintFloat() aus printf.c

* Go()
* Turn()
wurden ersetzt durch GoTurn() um Code zu sparen.
Go() und Turn() sind aber weiterhin nutzbar über Macros.

Und auch von mir nochmal der Hinweis:
Die HTML-Startseite zur Asuro-LIB ist sehr lesenswert.
Hier findet ihr alle Informationen zum erfolgreichen Installieren und Inbetrieb nehmen der Lib.

Gruß Sternthaler

inka
19.11.2007, 17:26
hi allerseits,
habe noch gar nicht alles durchgeschaut, danke fürs PrintFloat M1R...

die installation habe ich mir recht einfach gemacht: die neuen datein in die alten ordner (nach einer datensicherung) verschoben und die alten überschrieben, somit passen alle eingestellten pfade...

alles andere kommt noch :-)

stochri
19.11.2007, 18:00
* Go()
* Turn()
wurden ersetzt durch GoTurn() um Code zu sparen.

Nein ](*,) Ein Tiefschlag für mich ..... O:)

M1.R
19.11.2007, 20:40
danke fürs PrintFloat M1R...
keine Ursache!
Ich freue mich, dass die Funktion in der lib aufgenommen wurde.
Bei der Gelegebheit möchte ich mich ganz herzlich bei allen Machern der lib für die viele Mühe bedanken!
Insbesondere für Anfänger wie mich erleichtert die lib die Programmierung des ASURO erheblich.
Gruss
M.

Andun
19.11.2007, 20:41
Hehe Stochri! Das seh ich genauso! :D Hatte mich in den beiden einzelnen Funktionen ja auch verewigt :D

So, ich schau mal hier auch wieder in die neue Lib, da bei mir auch grade der Asuro wieder mal aktuell wird, da ich ein Projekt damit vorhab.

mfg
Andun

Sternthaler
20.11.2007, 01:22
Hallo stochri,

Nein ](*,) Ein Tiefschlag für mich ..... O:)
Nix Tiefschlag, gute Funktionen schaut man immer wieder gerne an. Dann kommt man ab und zu auf so 'wagemutige' Änderungen.

Ich nutze sie jedenfalls sehr gerne, auch mit deiner Änderung Andun ;-)

@M1.R
Ich denke, dass dein 'Ersatz' für fmod() auch noch in die Lib rutschen wird.
Im Übrigen darfst du die Betonung von 'Anfänger' locker weg lassen. O:)

Gruß Sternthaler.

M1.R
20.11.2007, 20:15
Ich denke, dass dein 'Ersatz' für fmod() auch noch in die Lib rutschen wird.
Du meinst meine Restberechnung, oder?
Hier ein Testprogramm mit zwei Vorschlägen:

//------------------------------------------------------------------
// test_rest
// vergleich eigene funktionen und fmod
// restfunktionen für uint16_t und für int16_t
//------------------------------------------------------------------

#include <math.h>
#include "asuro.h"

//------------------------------------------------------------------
// Restberechnung für Zahlen zwischen 1 und 65535

uint16_t RestUint(uint16_t dividend, uint16_t divisor)
{
uint16_t rest;

if (divisor != 0)
{
rest = dividend - (dividend/divisor * divisor);
}
else
{
SerWrite ("ERROR! ", 7);
rest = 0;
}
return (rest);
}

//------------------------------------------------------------------
// Restberechnung für Zahlen zwischen -32768 und 32767

int16_t RestInt(int16_t dividend, int16_t divisor)
{
int16_t rest;

if (divisor != 0)
{
rest = dividend - (dividend/divisor * divisor);
}
else
{
SerWrite ("ERROR! ", 7);
rest = 0;
}
return (rest);
}
//------------------------------------------------------------------

void PrintUint (uint16_t wert)
{
char text [12];

ltoa (wert, text, 10);
SerPrint (text);
}

//------------------------------------------------------------------
void PrintRestUint (uint16_t dividend,uint16_t divisor)
{
float fmodrest;
uint16_t rest;

rest = RestUint(dividend,divisor);
fmodrest = fmod (dividend, divisor);

PrintUint (dividend);
SerWrite ("/", 1);
PrintUint (divisor);
SerWrite ("=", 1);
PrintUint (dividend/divisor);
SerWrite (" ", 2);
PrintUint ((dividend/divisor)*divisor);

SerWrite (" rest: ", 8);
PrintUint (rest);
SerWrite (" fmod: ", 8);
PrintFloat (fmodrest, 5, 2);
SerWrite ("\r\n", 2);
}

//------------------------------------------------------------------
void PrintRestInt (int16_t dividend,int16_t divisor)
{
float fmodrest;
int16_t rest;

rest = RestInt(dividend,divisor);
fmodrest = fmod (dividend, divisor);

PrintInt (dividend);
SerWrite ("/", 1);
PrintInt (divisor);
SerWrite ("=", 1);
PrintInt (dividend/divisor);
SerWrite (" ", 2);
PrintInt ((dividend/divisor)*divisor);

SerWrite (" rest: ", 8);
PrintInt (rest);
SerWrite (" fmod: ", 8);
PrintFloat (fmodrest, 5, 2);
SerWrite ("\r\n", 2);
}
//------------------------------------------------------------------

int main(void)
{
Init ();

StatusLED(YELLOW);

SerWrite ("RestUint:\r\n", 11);

PrintRestUint (100, 6);
PrintRestUint (100, 0);
PrintRestUint (12345, 233);
PrintRestUint (32767, 12345);
PrintRestUint (65535, 123);
PrintRestUint (123, 1234);

SerWrite ("RestInt:\r\n", 11);

PrintRestInt (100, 5);
PrintRestInt (100, 0);
PrintRestInt (12345, 233);
PrintRestInt (32767, -12345);
PrintRestInt (-32768, 539);
PrintRestInt (-345, -123);
PrintRestInt (123, 1234);

//------------------------------------------------------------------
StatusLED (RED);
BackLED (ON, ON);
while (1);
return 0;
}

Gruss
M.

Sternthaler
20.11.2007, 23:57
Hallo M1.R,
Ja, genau so etwas hatte ich gemeint.
Da ich gestern/heute aber erst gegen 4:30 in Bett kam, werde ich mir das etwas später mal genauer ansehen.

Gruß Sternthaler

NomiS
21.11.2007, 12:57
Eine Frage zur neuen Lib.
Laut "Mehr Spaß mit ASURO Band2" gibt es eine EEPROM.h
Diese sollte ja eigentlich auch in der neuen Lib. sein, oder?
Dort sollte es die Befehle:
eeread
eewrite
eepromread_word
eepromwrite_word
....
geben.
Beim Compilieren kommt jedoch: Funktion nicht gefunden.
Wo befindet sich diese oder durch was wurde sie ersetzt.

Gruß NomiS

damaltor
21.11.2007, 13:38
diese ist in der lib nicht drin. dazu musst du die datei eeprom.h includieren. dein programmcode beginnt dann etwa so:

#include "asuro.h"
#include <eeprom.h>

...

wichtig ist, dass die datei keine anführungszeichen "" bekommt, sodern spitzklammern <>. das sagt dem compiler, dass die dateien nicht im selben verzeichnis liegen, sondern in den conpilerdateien versteckt sind.

NomiS
21.11.2007, 13:48
OK danke das heißt dann wohl die Orginal eeprom nehmen

damaltor
21.11.2007, 14:18
wie gesagt - die eeprom.h ist nicht in der neuen lib, sondern bereits im compiler gespeichert. warum sollte man also die arbeit doppelt machen...

stochri
27.11.2007, 20:45
Hallo Zusammen,

gerade eben habe ich mir die neue Lib runtergeladen ( zugegebnermaßen etwas spät :-b )
Ich habe mir die Installationsanleitung durchgelesen und wollte die Lib schnell mal mit AVR-Studio verwenden ( ist meine Lieblingsentwicklungsumgebung für die AVR's ). Wenn ich mich recht erinnere, gab es hier mal einen Thread, in dem die Installation beschrieben wurde.
Falls ich es in der Anleitung nicht überlesen habe, würde ich als Anregung anmerken, die Installationsanleitung für AVR-Studio mit aufzunehemen ( vielleicht mit einem kleinen Beispiel, dann kriegt man's schnell hin )

Bester Gruß,
stochri

stochri
27.11.2007, 21:40
Nach einigem herumprobieren bin ich jetzt dazu übergegangen, einfach alle c-Files und h-Files ins Projekt einzubinden und die asurolib.a wegzulassen.

Testweise habe ich das RC5 Infrarotprogramm kompilert. Das Hex-File wurde korrekt erstellt, aber leider funktioniert das Programm nicht. Das RC5-Orginal Hex-File läuft allerdings.

Kann es sein, dass es irgendein Problem mit der Infrarotfernstuerung in der neuen Lib gibt?

Sternthaler
27.11.2007, 22:40
Hallo stochri,
na, hast du den 'Schock' überwunden? ;-)

Falls du den Beitrag von mir meinst: So wird die Asuro-LIB installiert und in Betrieb genommen /2 (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=33149)
Da muss ich dich nochmals entäuschen. Es ist keine Anleitung für das AVR-Studio enthalten, sondern eher eine Beschreibung, was für Zusammenhänge bestehen, die das/die Makefile/s auflösen müssen.

Kannst mal bitte angeben, welches Original-RC5-Infrarotprogramm du meinst?

Ganz nette Grüße vom Sternthaler

M1.R
28.11.2007, 10:07
Hallo,

so hats bei mir geklappt mit dem AVR-Studio:

Vorbereitung:
- Projekt-Ordner anlegen
- da rein Ordner mit dem Namen "default"
- ins Makefile aus der lib die Pfadangabe zur lib reinschreiben (siehe lib-Anleitung)
- geändertes Makefile in den default-Ordner

AVR Studio:
- im AVR Studio neues Projekt im Projekt-Ordner anlegen
ins Projekt einfügen:
- Source Files: asuro.c (und eigene c-Datei)
- Header Files: asuro.h, myasuro.h
Menü Project-Configurations Options:
- Include Directories: Pfad...\asuro_libv271\lib\inc\
- Libraries (oben): Pfad1...\asuro_libv271\lib\
- Libraries (unten): libasuro.a Add Library-->

Gruss
M.

stochri
28.11.2007, 10:21
Hallo Sternthaler,


na, hast du den 'Schock' überwunden? Zwinkern

klar O:)


welches Original-RC5-Infrarotprogramm du meinst?

Das Programm im Beispielordner /example/RC5Test

Hallo M.
die Bildschirmkopieen sind sehr praktisch. ( Die Pfadnahmen passen übrigens sehr gut zum Synonym )

Besten Dank,

stochri

m.a.r.v.i.n
28.11.2007, 19:35
Hallo stochri,

im AsuroWiki hatte ich auch mal eine Seite erstellt, wie man Projekte mit der AsuroLib unter AVRStudio erstellt.
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AVRStudio

Der Trick bei der Sache ist, das vorhandene Makefile zu verwenden:
http://www.asurowiki.de/pmwiki/uploads/Main/avrstudio5.jpg

Für das RC5Test Beispiel gibt es eine Besonderheit: Im Makefile wird dazu das Define RC5_AVAILABLE definiert. Nur damit funktioniert das Projekt.
Weil dadurch eine zusätzliche Funktion im Timer1 Interrupt aufgerufen wird.



# Optional Definitions for conditional compiling
DEF = RC5_AVAILABLE


CFLAGS = -g -O$(OPT) -I$(INCPATH) -D$(DEF) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

Sternthaler
28.11.2007, 22:21
Hallo zusammen,
na, dann sind ja zum Glück alle Probleme beseitigt.

@stochri
Mist eigene Ausbildung. Auf so einfache Dinge im Leben wurde ich nie vorbereitet. ;-)

@M1.R und @m.a.r.v.i.n
Ich habe eure Beiträge mal als Link in dem Inbetriebnahme-Beitrag von mir aufgenommen.

Gruß Sternthaler

stochri
29.11.2007, 17:05
Sehr schön, dann bleibt nur noch die Frage, warum das IR-Beispiel nicht funktioniert.
Hat jeman eine Idee? Wie gesagt, das ebenso beim Beispiel vorkompilierte Hex-File läuft, das selbst kompilierte nicht.
Deshalb meine Vermutung: irgendwas in der Gesamt-Lib hat sich verändert, mit dem die IR-Routinen nicht klar kommen.

m.a.r.v.i.n
29.11.2007, 19:07
Hallo stochri,



Sehr schön, dann bleibt nur noch die Frage, warum das IR-Beispiel nicht funktioniert.
Hat jeman eine Idee? Wie gesagt, das ebenso beim Beispiel vorkompilierte Hex-File läuft, das selbst kompilierte nicht.


das hatte ich doch in meinem vorigen Post schon beschrieben, woran das liegt, s.o.

stochri
30.11.2007, 05:51
Ups, habe ich glatt übersehen. :oops:

Besten Dank,
stochri

inka
19.12.2007, 13:44
hi allerseits,
da meine ultraschalerweiterung wieder tut, wollte ich auch hier auf die neue lib umsteigen. Es gibt da mehrere ansätze im forum, habe damit aber probleme. Welches ist den der erfogversprechendster weg? Versucht habe ich das hier:

#include "asuro.h"
int abstand=0;

int main(void)
{
Init();
SerWrite("\r\n --- ultrasonic test ---",29);
Msleep(1000);

do
{
abstand=Chirp();
SerWrite("\r\n distanz in cm: ",20);
Msleep(500);
PrintInt(abstand);
}
while(1);
return 0;
}
der code lässt sich ohne fehlermeldungen compilieren, beim ablauf bleibt er hängen.
Mit dem einsatz von "PrintInt" zeilen in der ultrasonic.c konnte ich rausfinden, dass das nach dem aufruf von cli() passiert. damit bin aber auch schon am anschlag...

Funktioniert es mit der 2.7.1 überhaupt? Oder - so wie ich auch irgendwo hier gelesen habe - erst mit der 2.8?

ich weiss auch nicht ob mein beitrag hier richtig ist, vielleicht gehört er woanders hin?

danke für hilfe zur selbsthilfe :-)

damaltor
19.12.2007, 13:49
cli() deaktiviert sämtliche interrupts. bevor diese mit sei() nicht wieder aktiviert wurden, geht alles nicht was interrupts benötigt - und msleep() bzw sleep() zB brauchen interrupts. sonst apssiert da nix mehr.

Sternthaler
19.12.2007, 23:24
Hallo inka,

in der Datei ultrasonic.c steht oben im Kommentar, dass der Inhalt bei Bedarf in die asuro.c kopiert werden muss.
m.a.r.v.i.n hatte schon mal darauf hingewiesen, dass er die asuro.c eben nicht in die LIB gepackt hat, da es wohl manchmal zu Problemen kommt, wenn in einzelnenen Sourcen Interrupt-Funktionen vorhanden sind.

Versuch also einfach mal den den ultrasonic.c-Code in der asuro.c.
Oder hast du das schon gemacht? Sonst würde es mich wundern, dass du ohne Fehler übersetzen kannst, da die ultrasonic.c gar nicht im Makefile der LIB ist.

Gruß Sternthaler

inka
20.12.2007, 06:39
hi Sternthaler,
ich habe hemmungen die asuro.c aus der 2.7.1. lib einfach so mal zu verändern, dafür kenne ich die hintergründe viel zu wenig. Auch dachte ich, der hinweis auf die notwendigkeit den code aus der ultrasonic.c in die asuro.c zu verschieben würde noch aus der zeit stammen als die asuro.c noch die einzige sourcedatei war.
Und so versuchte ich die ultrasonic.c wie jede andere von den neuen sourcedateien auch so im AVR-studio einzubinden. Es lässt sich tatsächlich ohne fehlermeldungen kompilieren, das ergebnis ist aber wohl nicht lauffähig. Werde es also doch mit dem kopieren in die asuro.c versuchen...

edit: auch nach dem kopieren des codes aus der ultrasonic.c in die asuro.c ist das ergebnis nicht wie erhofft. Die überschrift aus dem testcode (---ultrasonic test---) erscheint im hyperterminal, die status led wechselt von gelb auf grün und das wars. Nur verständnishalber, ich habe den code in die neue, aus der 2.7.1 lib stammende asuro.c eingefügt...

m.a.r.v.i.n
20.12.2007, 09:35
Hallo inka,

gestern wollte ich meine US-Erweiterung mal wieder ausprobieren. Leider funktioniert diese gar nicht mehr (Kurzschluß). Deshalb kann ich das selbst nicht testen. Vielleicht vergleichst du nochmal den Weg, den Erhard Henkes auf seiner Website dokumentiert hat, mit den Quellen der Lib.

http://www.henkessoft.de/Roboter/ASURO.htm

Es sollte reichen die Interrupt Funktion in die asuro.c zu kopieren.
Wie ich feststellen mußte, werden Interrupt Funktionen, die nur in der asuro Lib stehen, vom Linker manchmal nicht mitgelinkt. Die asuro.c dagegen wird immer komplett mitgelinkt.

radbruch
20.12.2007, 10:20
auf seiner Website dokumentiert
Das ist wohl die umfassenste asuro-doku (einer einzelnen Person, asurowiki und RN-Forum topen es natürlich) überhaupt. Das möchte ich hier mal anmerken, weil ich mir zufällig gestern die Seite auch angeschaut habe. (Wollte eigentlich mal sehen, ob sich beim "Nachfolger" was getan hat...)

Gruß

mic

inka
20.12.2007, 10:44
hi m.a.r.v.i.n,
also ich habe es jetzt genauso gemacht, wie es Erhard auf seiner wirklich tollen webseite beschreibt, es funktioniert :-)
leider nur, wenn allew aus der ultrasonic.c in die asuro.c kopiert wird. Muss man sich halt für später merken...

danke noch einmal....

Sternthaler
21.12.2007, 11:29
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.

H3llGhost
21.12.2007, 11:34
[...]
in den ACR-GCC Lib Ordner. Die Objekt Library (libasuro.a) bleibt nun in dem Verzeichnis in dem sie erstellt wurde und muß nicht mehr ins AVR Lib Verzeichnis kopiert werden, ebnso die Headerdatei asuro.h. In den neuen Makefiles muß jetzt nur noch eine Zeile (LIBPATH) angepasst werden um das Makefile für beliebige eigene Projekte zu verwenden. In der Doku ist das alles (hoffentlich verständlich) erklärt.

Ich verstehe nicht ganz wo ich den Pfad anpassen muss ...
Bitte um eine genaue Anleitung ... ;)

Danke!

inka
21.12.2007, 12:35
hi Sternthaler,

ist das die ganze timerfunktion?
-----------------
ISR(TIMER2_COMP_vect)
{
count36kHz++;
if(!count36kHz) timebase++;
}
-----------------

m.a.r.v.i.n
21.12.2007, 14:18
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:


# additional Include path for libraries
#LIBPATH = C:/ASURO_SRC/AsuroLib/lib
LIBPATH = ../../lib

Zeilen mit # (Doppelkreuz) sind Kommentare, werden also beim Erstellen des Projektes ignoriert. Die Zeile
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).

inka
31.12.2007, 09:06
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:

#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;
}

der befehl GoTurn funktioniert hier nicht. Er müsste um 90° drehen und weiterfahren, dreht sich aber ständig im kreis...
Habe ich da wieder was falsches drinn, oder hängt es mit den interrupts zusammen?

damaltor
31.12.2007, 15:25
achte darauf, interrupts zu aktivieren vorher.. ich meine mich zu erinnern dass die beim ultraschall zeugs manipuliert werden.

inka
31.12.2007, 16:46
die interrupts werden doch damit nach beenden des Chirp() wieder aktiviert, oder?

/**
* 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);
}

M1.R
31.12.2007, 17:09
BackLED(ON,ON);
GoTurn(0, 90, 150);

der befehl GoTurn funktioniert hier nicht. Er müsste um 90° drehen und weiterfahren, dreht sich aber ständig im kreis...
Habe ich da wieder was falsches drinn, oder hängt es mit den interrupts zusammen?
vielleicht weil sich BackLEDs und Odometrie nicht mieinander vertragen?

Gruss
M.

inka
31.12.2007, 17:23
habs jetzt noch einmal getestet, auch beim auskomentieren der BackLEDs dreht er nur seine piruetten...
also werde ich weiterdenken...

m.a.r.v.i.n
31.12.2007, 17:51
Hallo inka,

EncoderInit() muß natürlich auch aufgerufen werden, damit GoTurn funktionieren kann.

inka
31.12.2007, 19:33
ja natürlich, danke...

guten rutsch und euch allen ein gutes neues jahr...

M1.R
13.01.2008, 17:12
Hallo,

kann es sein, dass die Datei SelfTest.hex aus \asuro_libv271\examples\SelfTest nicht so funktioniert
wie die Original SelfTest.hex von der CD?
U.a. fehlt der Motortest ganz...

Gruss
M.

damaltor
15.01.2008, 00:22
kompiliere neu, das programm ist identisch.

inka
15.01.2008, 06:38
hi damaltor,
ich habe jetzt versucht den selbsttest auf die 2.71 lib umzustellen, erhalte aber noch zwei fehlermeldungen mit denen ich nicht viel anzufangen weiss:


c:\programme\asuro\win_avr\bin\..\lib\gcc\avr\4.1. 2\..\..\..\..\avr\bin\ld.exe: Warning: size of symbol `__vector_14' changed from 204 in asuro.o to 294 in RechteckDemo.o
PCDemo.o: In function `__vector_2':
../PCDemo.c:38: multiple definition of `__vector_2'
asuro.o:../../../_asuro_lib/2_7_1/asuro.c:252: first defined here
c:\programme\asuro\win_avr\bin\..\lib\gcc\avr\4.1. 2\..\..\..\..\avr\bin\ld.exe: Warning: size of symbol `__vector_2' changed from 46 in asuro.o to 120 in PCDemo.o
make: *** [SelfTest_2_71.elf] Error 1
Build failed with 2 errors and 7 warnings...

was fehlt mir da noch?

damaltor
15.01.2008, 16:17
da passt was mit den interrupts nich... scheint einer doppelt zu sein.

inka
15.01.2008, 17:27
ok, habe die PCDemo.c und die Rechteckdemo.c aus den quelldateien rausgenommen, compilieren ohne fehlermeldungen, mal schauen wie der test abläuft...

m.a.r.v.i.n
16.01.2008, 12:28
Hallo inka,

ich kann dein Problem nachvollziehen. Bei mir wird der MotorTest und der anschließende serielle Test quasi übersprungen, d.h. die seriellen Ausgeben werden zwar gemacht. Aber die Motoren laufen nicht, bzw. ich kann gar keine Zeichen eingeben, weil alle TTs auf einmal ausgegeben werden und danach wieder der LED Test beginnt.

Das gleiche passiert allerdings auch, wenn ich den Original SelbstTest von der ASURO CD neu übersetze. Nur die alte SelfTest.hex von 2003 funktioniert.

Wahrscheinlich liegt es am Compiler bzw. den Optimierungseinstellungen (ich verwende die aktuelle WinAVR Version). Irgendwie wird da etwas zu viel wegoptimiert.