Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro programmier problem
dani1236
03.04.2006, 19:52
Hallo
Bin Schüler und habe für meine Jahresarbeit in Technik mir den Asuro ausgesucht bis jetzt hat alles super geklappt doch beim Programmeren komm ich nicht mehr weiter. Ich habe versucht schon fertig geschriebene Programme zu kopieren und ins Notepad eigefügt aber wenn ich den Asuro dann flashe und ihn danach wiede anschalte leuchten nur die beiden hinteren dioden rot und die hauptleuchte (D12) gelblich danach wird diese grün und das wars.
Habe das hier aus dem Asuro wiki
(http://asuro.pytalhost.de/pmwiki/pmwiki.php?n=Main.KollisionsTestC)
Wenn ich es so in test.c einfüge müsste es doch funktioniren aber er macht nichts?? Wie is es denn richtig damit er auch das macht???
#include "asuro.h"
/* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen
* definieren wir 2 Werte für fullspedd links und rechts
*/
#define FULL_L 250 /* Fullspeed linker Motot */
#define FULL_R 220 /* Fullspeed rechter Motor */
/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rückwärts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
/* Motor rückwärts Rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}
int main(void)
{
unsigned char t1, t2;
Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0) /* keine Taste */
{
MotorFwd(); /* vorwärts fahren */
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07) /* Tasten links gedrückt? */
{
MotorRwdL(); /* Rückwärtskurve links fahren */
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38) /* Tasten rechts gedrückt? */
{
MotorRwdR(); /* Rückwärtskurve rechts fahren */
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000); /* 1 Sekunde fahren */
}
}
return 0;
}
wäre sehr dankbar für eure Antworten ](*,)
dani
Hallo dani1236,
also ich gehe mal davon aus, dass Du den Selbsttest mit dem Asuro erfolgreich absolviert hast - insbesondere die Taster sollten richtig erkannt werden? Hast Du schon irgendwelche anderen Programme erfolgreich benutzt (also insbesondere die, die mit dem Asuro mitgeliefert werden)?
Reagiert der Asuro bei allen Programmen wie von Dir beschrieben (Rücklampen an, Status grün)? Der Compiler meldet keine Fehler (Du brauchst die angepasste asuro.c für das Programm)? Das FlashTool meldet auch ok? Die Batterien sind ok?
Also mehr fällt mir gerade auch nicht ein. Vielleicht mal ein ganz einfaches Programm testen, das nur die StatusLED auf rot schaltet und probieren ob das geht... (dann weisst Du wenigstens, dass das Programmieren richtig geht)
Gruß
kanal28
PS:
1. wenn Du code postest, solltest Du die Funktion für code einfügen verwenden - liest sich besser...
2. Beiträge zum Asuro sollten besser hier hin: Roboterbausätze und Modelle (https://www.roboternetz.de/phpBB2/viewforum.php?f=25) - da gibt es gerade ne ähnliche Diskussion: https://www.roboternetz.de/phpBB2/viewtopic.php?t=7571&start=44
dani1236
05.04.2006, 14:11
Hallo
Ja den selbsttest bekomme ich ohne probleme draufgeladen
-Taster und alle anderen funktionen fuktionieren auch
-Ale pogramme die auf der CD waren bekomme ich nicht auf den Asuro außer den selbstest
- Flash tool meldet auch keine fehler
Also ich kopiere z.B den code für die Rechteckdemo in die test.c datei im Programers Notepad 2 drücke auf make und dann speicher. Jetzt die datei test.hex auf den asuro laden!! Stimmt dass so oder mache ich dabei einen feler
Thx dani126
Hallo dani1236,
also, das klingt verdammt so, als würdest Du entweder nicht das richtige Programm compilieren oder die falsche Datei flashen. Wenn Du den Code in test.c einfügst, musst Du vor make speichern. Der Stern hinter test.c in der Titelzeile muss also weg sein - sonst compilierst Du die alte test.c.
Am besten Du gehst als erstes auf clean (dann wird die alte test.hex gelöscht), änderst dann die test.c, so wie Du es brauchst und dann speicherst Du test.c. Danach gehst Du auf make und schaust, ob er Fehler meldet. Wenn kein Fehler gemeldet wird, kannst Du die neue test.hex flashen (schau noch mal, ob die richtige Datei eingestellt ist).
kanal28
dani1236
06.04.2006, 16:41
Hallo
also hat mir schon einmal geholfen danke. Aber wenn ich diesen code einfüge zeigt es ein fehler an. Das clean und make tool habe ich richtig eingestelt diese funktionieren auch nur jetzt zeigt es mir diese fehler an.
Kann mir jemand sagen was der fehler daran ist. Ich hab auch auf die richtige datei usw geachtet.
/************************************************** *****************************
*
* File Name: RechteckDemo.c
* Project : Demo
*
* Description: This file contains RechteckDemo
*
* Ver. Date Author Comments
* ------- ---------- -------------- ------------------------------
* 1.00 14.08.2003 Jan Grewe build
* 2.00 22.10.2003 Jan Grewe angepasst auf asuro.c Ver.2.10
*
* Copyright (c) 2003 DLR Robotics & Mechatronics
************************************************** ***************************/
/************************************************** *************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* any later version. *
************************************************** *************************/
#include "asuro.h"
#define LEFT 0
#define RIGHT 1
#define LINE 0
#define EDGE 1
SIGNAL (SIG_ADC)
{
static unsigned char tmp[2],flag[2],toggle;
static unsigned char state = LINE, posFlag[2] = {FALSE,FALSE};
static unsigned char pos[2] = {0,0};
static unsigned char rightSpeed = 200, leftSpeed = 200;
tmp[toggle]= ADCH;
if (toggle) ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT;
else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT;
if ( (tmp[toggle] < 128) && (flag[toggle] == TRUE)) {
pos[toggle] ++;
flag[toggle] = FALSE;
}
if ( (tmp[toggle] > 128) && (flag[toggle] == FALSE)) {
pos[toggle] ++;
flag[toggle] = TRUE;
}
toggle ^= 1;
if (state == LINE) {
if (pos[LEFT] > 100) {
leftSpeed = 0;
pos[LEFT] = 0;
posFlag[LEFT] = TRUE;
}
if (pos[RIGHT] > 100) {
rightSpeed = 0;
pos[RIGHT] = 0;
posFlag[RIGHT] = TRUE;
}
if (posFlag[RIGHT] == TRUE && posFlag[LEFT] == TRUE) {
state = EDGE;
leftSpeed = 180;
}
}
if (state == EDGE) {
if (pos[LEFT] > 50) {
leftSpeed = 0;
pos[LEFT] = 0;
posFlag[LEFT] = posFlag[RIGHT] = FALSE;
state = LINE;
leftSpeed = rightSpeed = 200;
}
}
MotorSpeed(leftSpeed,rightSpeed);
}
void RechteckDemo(void)
{
Init();
cli();
MotorSpeed(200,200);
DDRC &= ~ ((1<<PC0) | (1<<PC1)); // Input => no break LED
ODOMETRIE_LED_ON;
ADCSRA = (1<<ADEN) | (1<<ADFR) | (1<<ADIE) | (1<<ADSC) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); // clk/128
ADMUX = (1<<ADLAR) | (1<<REFS0) | WHEEL_LEFT; // AVCC reference with external capacitor
sei();
for(;;);
}
dann kommt der fehler
C:\ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o asuro.o
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -lm
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\lib\avr4\crtm8.o(.in it9+0x0): undefined reference to `main'
make: *** [test.elf] Error 1
> Process Exit Code: 2
Hallo dani1236,
na das sind doch Fortschritte! Also die einzig wichtige Zeile dabei ist die hier:
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\lib\avr4\crtm8.o(.in it9+0x0): undefined reference to `main'
Er findet also offenbar main nicht. Weiß nicht, wie gut Du Dich mit C auskennst, aber eine Funktion main() muss in dem code in jedem Fall vorhanden sein - dort beginnt die eigentliche Programmausführung. In Deiner rechteck.c ist keine Funktion main() - deswegen protestiert der Compiler.
Schau Dir mal die anderen Demo-Dateien an. Da müsste auch eine main.c dabei sein. Dort ist die zugehörige main() drin. Alle anderen Dateien werden über die demo.h eingebunden. Ist ziemlich modular aufgebaut und deswegen anfangs wohl etwas unübersichtlich.
kanal28
dani1236
06.04.2006, 22:37
ok
mache programme funktionieren aber manche sind entweder falsch geschrieben ,es zeigt mir halt einen fehler an. Könnte mir jemand diese hex datei für die rechteckdemo hier posten diese vielen zahlen da.
Oder am besten andere Programme als hex datei mit denen ich meinen lehrer am besten zeigen kann was der asuro so drauf hat.
danke Dani
nochmal ein dankeschön an kanal28 für die hilfe
Hallo dani1236,
gern geschehen. Wenn Programme nicht funktionieren, basieren die vielleicht auf der erweiterten asuro.c library (http://sourceforge.net/project/showfiles.php?group_id=155217) - dazu https://www.roboternetz.de/phpBB2/viewtopic.php?t=7571.
Wenn Du den Asuro vorführen willst, solltest Du auch versuchen das Programm selbst zu compilieren. Ich empfehle Dir, zu versuchen, die Datei main.c aus dem SelfTest-Verzeichnis zu verwenden - das sollte alle Funktionen zeigen. Denke das ist besser, als wenn Du Dir hier einfach ein Programm schicken lässt. (Falls wirklich nötig, gibt es hier ein paar fertige Programme: http://home.planet.nl/~winko001/AsuroIdx.htm)
Gruß
kanal28
Westside
12.04.2006, 17:31
Ich habe da mit der State-Event technik ein Programm geschrieben.
In diesem Programm kann die Asuro ein Hindernis umfahren.
ich möchte Mal wissen, mit welcher technik ihr vorangeht.
ich bin erst 14 Jahre alt und noch ein Anfänger. Daher habe ich noch ein Problem mit meinem Asuro...Er geht nicht geradeaus!
Ich bitte sie daher, ob sie mir ein kleines Programm über die Odometrie posten konnen.....
MfG Westside
Er findet also offenbar main nicht. Weiß nicht, wie gut Du Dich mit C auskennst, aber eine Funktion main() muss in dem code in jedem Fall vorhanden sein - dort beginnt die eigentliche Programmausführung. In Deiner rechteck.c ist keine Funktion main() - deswegen protestiert der Compiler.
Schau Dir mal die anderen Demo-Dateien an. Da müsste auch eine main.c dabei sein. Dort ist die zugehörige main() drin.
kanal28
Wo muss man denn genau main() unterbringen?
mfg ete
SpEEddIsplAY
03.08.2006, 13:18
Soweit ich weiß muß die main()-Funktion direkt unter die "include"-festlegung. klappt es jetzt?
Mfg SpEEddIsplAY
hallo,
hab auch so meine Probleme mit dem Progrmers Notepad 2
wenn ich ein Programm schreib oder auch mir aus dem Forum ein Programm kopier erscheint immer die Meldung:
...
test.c: In function `main':
test.c:36: error: parse error at end of input
make: *** [test.o] Error 1
> Process Exit Code: 2
Kann mir jemand sagen wo ich einen Fehler gemacht habe ?
Vielen Dank schon im vorraus
gruss
cu
Arexx-Henk
03.08.2006, 17:19
Hallo,
ich vermute da fehlt irgendwo eine '}'. ('Schliess-Haken??)
Wenn Du die neuesten WinAVR WinAVR-20060421 verwendet erscheint vielleicht ein deutlicher fehler meldung.
Gruss
Henk
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.