PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibo 2 programmier Probleme bei den Distanzsensoren



runat
02.04.2011, 10:33
Hallo
ich habe ein Problem mit der Programmierung der Distanzsensoren von meinem Nibo 2. Im AVR Studio kommen immer die selben Warnings und Errors. Ich wäre sehr erleichtert, wenn mir jemand helfen könnte. Hier wäre die Programmierung und die Build Warnings und Errors:
#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <nibo/copro.h>
#include <nibo/delay.h>
#include <nibo/iodefs.h>
#include <nibo/bot.h>
#include <nibo/spi.h>
#include <avr/interrupt.h>
#include <stdio.h>
int main() {
sei();
bot_init();
spi_init();
display_init();
gfx_init();
gfx_move(15, 0);
gfx_set_proportional(1);
gfx_print_text("Distance sensor test");
gfx_set_proportional(0);
gfx_move(5, 10);
gfx_print_char('R');
gfx_move(118, 10);
gfx_print_char('L');
delay(50);
copro_ir_startMeasure();
while (1==1) {
delay(10);
char text[20]="-- -- -- -- --";
// Co-Prozessor
if (copro_update()) {
sprintf(text, "%02x %02x %02x %02x %02x",
(uint16_t)copro_distance[0]/256,
(uint16_t)copro_distance[1]/256,
(uint16_t)copro_distance[2]/256,
(uint16_t)copro_distance[3]/256,
(uint16_t)copro_distance[4]/256);
}
gfx_move(10, 55);
gfx_print_text(text);
// Spannung
bot_update();
float volt = 0.0166 * bot_supply - 1.19;
sprintf(text, "%3.1fV", (double)volt);
gfx_move(30, 10);
gfx_set_proportional(1);
gfx_print_text("supply: ");
gfx_set_proportional(0);
gfx_print_text(text);
}
return 0;
}

../distanzsensoren.c:14: warning: implicit declaration of function 'spi_init'
../distanzsensoren.c:26: warning: implicit declaration of function 'copro_ir_startMeasure'
../distanzsensoren.c:31: warning: implicit declaration of function 'copro_update'
../distanzsensoren.c:33: error: 'copro_distance' undeclared (first use in this function)
../distanzsensoren.c:33: error: (Each undeclared identifier is reported only once
../distanzsensoren.c:33: error: for each function it appears in.)
make: *** [distanzsensoren.o] Error 1
Build failed with 3 errors and 3 warnings...
Wäre sehr dankbar für eine Antwort.
Runat

Achim S.
02.04.2011, 19:34
Hallo runat
auf den ersten Blick scheint dein Code ok zu sein. Nach deinen Fehlermeldungen zu urteilen, fehlen ein paar Datein bei den Einstellungen vom AVR Studio. r findet z.B. die spi nicht. Kontrollierebitte die Einstellungen dazu. Du kannst auch mal nach Bot-Magazin hier suchen. Da sind ein paar Artikel drin, wo das genau erklärt ist.
achim S.

runat
03.04.2011, 09:18
Danke für den Tipp Achim ich habe es überprüft und habe den Fehler gefunden
runat

Achim S.
03.04.2011, 09:49
Hallo runat
freue mich wenn es geht. Falls du Probleme hast oder Programme brauchst, helfe ich dir gern. Habe mitlerweile eine kleine Sammlung da. Die gehen zum Testen und selber probieren. Hast du schon die Magazine gesucht. Steht eine Menge drin und Hilft zum Anfang besonders.
achim S

runat
03.04.2011, 14:52
Hallo Achim

ich habe mir das Bot Magazin angeschaut und es ist toll. Danke auch für die Hilfe. Nun habe ich ein paar neue Probleme: Die Kalibrierung der Bodensensoren. Die hex Datei lädt es drauf und ich kann den Nibo auf den schwarzen und den weissen Untergrund stellen und es speichern. Doch sollte ich von der Anweisung auf dem Display diesen Vorgang wiederholen. Zuerst habe ich einfach weitergemacht die Distanzsensoren programmiert und die letzte Programmierung. Da habe ich so glaube ich ein Linienfolge Programmierung von roboter_cc heruntergeladen. Ich konnte es als hex auf den Nibo laden doch anstatt einer Linie zu folgen fuhr er in jede Richtung ohne genaues Ziel. Ist das so richtig?
Mein zweites Problem ist, das ich in der Programmierung noch nicht sehr stark bin. Sobald das Tutorial abgeschlossen ist muss man ja selbst programmieren. Ich schaffe es einfach nicht, dass sich der Nibo selbstständig frei bewegt (gerade aus gehört nicht dazu) und nun sitze ich einwenig in der Klemme.
Mein drittes Problem: Wie kann man überprüfen, dass jeder Sensor funktioniert, denn ich habe nicht das Gefühl das es überhaupt ein signal aussendet. Beim AVR-Studio ist, bevor man die Programmierung auf den Nibo lädt, ein Kästchen in dem erase device before flash programming steht, Muss man das jedes Mal anhaken?
Runat

Achim S.
03.04.2011, 15:59
Hallo runat
nach deiner Frage zu Urteilen, fängst du gerade mit C an. Wenn das so ist, nimm dir nicht gleich schwierige Sachen vor. Fange langsam an. Suche dir im Netz ein paar Schulungen zu C. Lese sie in Ruhe durch. Nimm dir ein paar einfache Programme und versuche den Aufbau zu verstehen. Schreibe dir ein paar einfache Sachen selbst. Lerne in Ruhe neues kennen. Dann kannst du auch später Fehlersuche an diesen machen. Welche Lib hast du drauf? Hoffe die 2.10. Wenn nicht bitte die neuste laden. Wie lange hast du den denn Nibo 2? Muss erst ein paar Fragen stellen, um einschätzen zu können, wie weit du bist.
Achim S,

runat
04.04.2011, 12:14
Hallo Achim
Ich habe den Nibo erst seit einem Monat
Runat

Achim S.
04.04.2011, 18:14
Und wie sieht es aus mit C?

runat
05.04.2011, 18:57
Leider stehe ich da ganz am Anfang. Die Niboprogrammierung mache ich als Projekt.
runat.

Achim S.
05.04.2011, 20:27
Hallo runat
da würde ich sagen, du fängst langsam an. Im Internet gibt es verschiedene Programme um C zu lernen. Man kann auch verschiedene Bücher als pdf bekommen. Und dann heisst es lesen. Parallel kannst du auch die Beispiele die du zum Nibo bekommen hast durcharbeiten und die Funktion einzelner Befehle lernen. C ist eine Computersprache und diese muss man erst einmal lernen. Fange mit kleinen und leichten Programmen an. Die Programme die du aufgeführt hast, sind schon eine andere Klasse. Falls du nichts findest, helfe ich dir gern weiter. Du kannst auch ein entsprechendes Fachbuch kaufen und damit lernen. Suche im Netz nach entsprechenden Sachen. So habe ich auch angefangen.
Achim

Hero_123
07.04.2011, 22:31
Hallo runat

Ich vermute, Du hast jetzt im AVR-Studio die richtigen Einstellungen (Suchpfade) für die include-dateien und die library eingestellt, denn sonst wird Dein Programm nicht compiliert und Du erhälst die obigen Fehlermeldungen.

Wenn Du die Sensoren des NIBOs checken willst - da gibt es im Nibo- directory ...src/tutorial/nibo2 einige recht gute Lernbeispiele, so ist das tutorial 8 geeignet, die Abstandssensoren zu checken.

Ich nehme an, Du hast Dir das Display mit gekauft, denn sonst kannst Du sehr schlecht checken, ob die Abstandssensoren, die Linien- und Bodensensoren funktionieren...

Du weißt hoffentlich auch, daß Du den NIBO neu mit dem initializer2.hex flashen mußt, wenn Du eine neue NiboLib benutzt; wie das geht, steht u.a. in der NiboWiki und in der Bauanleitung...

wegen C - da gibt es im Netz unter: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial eine sehr gute Anleitung für den AVR - hat mir bei der Einarbeitung SEHR (!!) geholfen!

Hero_123

runat
13.04.2011, 16:33
Hallo Hero_123
danke für den Tipp. Versuche nun die Anleitung für den AVR zu verstehen
runat

lfakner
15.10.2012, 16:09
hallo ich habe dasselbe Problem und würde gerne mal genau wissen, was in den Einstellungen getan werden musste, um das Problem zu beheben.

Hero_123
15.10.2012, 20:47
Hallo lfakner

Das ist etwas wenig Info - welches Problem hast Du? Poste doch mal die Fehlermeldungen. die der Compiler ausgibt, erst dann kann man gezielt helfen

mfg

Hero_123

lfakner
15.10.2012, 21:05
ok, tschuldige.

../Nibo2.c: In function 'weicherechtsaus':
../Nibo2.c:17: warning: implicit declaration of function 'copro_setSpeed'
../Nibo2.c: In function 'rechtskurve':
../Nibo2.c:27: warning: implicit declaration of function 'copro_stop'
../Nibo2.c:29: warning: implicit declaration of function 'copro_setTargetRel'
../Nibo2.c: In function 'main':
../Nibo2.c:72: warning: implicit declaration of function 'spi_init'
../Nibo2.c:74: warning: implicit declaration of function 'sound_init'
../Nibo2.c:88: warning: implicit declaration of function 'copro_setSpeedParameters'
../Nibo2.c:89: warning: implicit declaration of function 'copro_ir_startMeasure'
../Nibo2.c:101: warning: implicit declaration of function 'copro_update'
../Nibo2.c:104: error: 'copro_distance' undeclared (first use in this function)
../Nibo2.c:104: error: (Each undeclared identifier is reported only once
../Nibo2.c:104: error: for each function it appears in.)
make: *** [Nibo2.o] Error 1
Build failed with 3 errors and 8 warnings...

#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <nibo/leds.h>
#include <nibo/delay.h>
#include <nibo/copro.h>
#include <nibo/iodefs.h>
#include <nibo/bot.h>
#include <nibo/pwm.h>
#include <nibo/sound.h>
#include <avr/interrupt.h>
#include <nibo/spi.h>
#include <stdio.h>

void weicherechtsaus(int speed)
{
copro_setSpeed(speed,speed/2); //linkes Rad langsamer drehen
}

void weichelinksaus(int speed)
{
copro_setSpeed(speed/2,speed); //linkes Rad langsamer drehen
}

void rechtskurve()
{
copro_stop();
delay(100);
copro_setTargetRel(27, -27, 10);
delay(2000);
}

void ZeigeZahl(int zahl, int ptit)

{


if(zahl<5)

{

leds_set_status(0,7-ptit); //aus

}

else if(zahl>50)

{

leds_set_status(2,7-ptit); //rot

}

else if ((zahl>=5)&&(zahl<20))

{

leds_set_status(1,7-ptit); //gr¸n

}
else if ((zahl>=20)&&(zahl<=50))
{
leds_set_status(3,7-ptit); //orange
}

}

int main(void)
{ // initialisierung
sei();
bot_init();
spi_init();
pwm_init();
sound_init();
display_init();
gfx_init();
leds_init();

gfx_move(15, 0);
gfx_set_proportional(1);
gfx_print_text("Distance sensor test");
gfx_set_proportional(0);
gfx_move(5, 10);
gfx_print_char('R');
gfx_move(118, 10);
gfx_print_char('L');
delay(50);
copro_setSpeedParameters(5,6,7);
copro_ir_startMeasure(); //Zaehler der IR-Sensoren (0..4)
int zahl;
int ptit;
int speed=20;
int sensitvity=25;

while(1)
{
delay(10);
char text[20]="-- -- -- -- --";
copro_setSpeed(speed,speed);

if (copro_update())
{
sprintf(text, "%2d %2d %2d %2d %2d",
copro_distance[0]/256,
copro_distance[1]/256,
copro_distance[2]/256,
copro_distance[3]/256,
copro_distance[4]/256);


if((copro_distance[3]/1000)>sensitvity) //Sensor mitte links
{
weicherechtsaus(speed);
}
if((copro_distance[4]/1000)>sensitvity) //Sensor links
{
weicherechtsaus(speed);
}
if((copro_distance[1]/1000)>sensitvity) //Sensor mitte rechts
{
weichelinksaus(speed);
}
if((copro_distance[0]/1000)>sensitvity) //Sensor rechts
{
weichelinksaus(speed);
}
if((copro_distance[2]/1000)>50) //Sensor mitte
{
rechtskurve();
}
if((copro_distance[1]/1000)>55&&(copro_distance[3]/1000)>55) //Sensoren mitte rechts und links
{
rechtskurve();
}
if((copro_distance[0]/1000)>55&&(copro_distance[4]/1000)>55) //Sensoren rechts und links
{
rechtskurve();
}

for(ptit=0; ptit<=4; ptit++)
{

zahl=copro_distance[ptit]/1000; // Skaliere auf 0-64;

ZeigeZahl(zahl, ptit);
}

}
gfx_move(10, 55);
gfx_print_text(text);
// Spannung
bot_update();
float volt = 0.0166 * bot_supply - 1.19;
sprintf(text, "%3.1fV", (double)volt);
gfx_move(30, 10);
gfx_set_proportional(1);
gfx_print_text("supply: ");
gfx_set_proportional(0);
gfx_print_text(text);
}
return(0);

}
Bitte

Hero_123
16.10.2012, 21:01
Hallo lfakner

Ich habe Dein Programm bei mir compiliert und es kamen keine Fehlermeldungen. Ich benutze AVRStudio 4.18 Build700.

Verwendest Du das AVRStudio zum Kompilieren? Wenn ja, sind Deine Suchpfadeinstellungen beim AVRStudio nicht korrekt => der Compiler findet die include-files und die lib-files nicht. Check mal die Einstellungen (siehe auch das Nibo2Tutorial*.pdf auf Seite 5ff).

mfg

Hero_123

lfakner
16.10.2012, 23:33
ja es funktionieren auch alle Programme, die keine copro Befehle nutzten. Und die Libraries findet Avr, denn unter Configuration Options/Libraries werden alle notwendigen Objekte wie libnibo2.a usw. angezeigt.

Hero_123
17.10.2012, 20:13
../Nibo2.c: In function 'weicherechtsaus':
../Nibo2.c:17: warning: implicit declaration of function 'copro_setSpeed'
../Nibo2.c: In function 'rechtskurve':
../Nibo2.c:27: warning: implicit declaration of function 'copro_stop'
../Nibo2.c:29: warning: implicit declaration of function 'copro_setTargetRel'
../Nibo2.c: In function 'main':
../Nibo2.c:72: warning: implicit declaration of function 'spi_init'
../Nibo2.c:74: warning: implicit declaration of function 'sound_init'
../Nibo2.c:88: warning: implicit declaration of function 'copro_setSpeedParameters'
../Nibo2.c:89: warning: implicit declaration of function 'copro_ir_startMeasure'
../Nibo2.c:101: warning: implicit declaration of function 'copro_update'

=> "implicit declaration" heißt nichts anderes, als dass die Suchpfade nicht korrekt sind (bedeutet, daß eine Funktion "implizit" deklariert ist - und WO ist das in Deinem Programm??)


ja es funktionieren auch alle Programme, die keine copro Befehle nutzten. Und die Libraries findet Avr, denn unter Configuration Options/Libraries werden alle notwendigen Objekte wie libnibo2.a usw. angezeigt. kann nicht stimmen (siehe oben), denn die Soundausgabe wird auch nicht fkt, da
./Nibo2.c:74: warning: implicit declaration of function 'sound_init'

Mit welcher Entwicklungsumgebung arbeitest Du? Zeig doch mal ein funktionierendes Programm