PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibo 1 - Odometrie gibt keine Werte (Ticks)



ehenkes
14.07.2020, 12:41
Bei Experimenten mit Nibo1 kommen (plötzlich?) keine Werte mehr von der Odometrie. Ich habe folgendes Testprogramm aufgesetzt:


#include <stdlib.h> #include <avr/io.h>
#include <avr/interrupt.h>



#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"

#include "nibo/delay.h"
#include "nibo/analog.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"


#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/motco.h"
#include "nibo/floor.h"




void textout(int x, int y, char* str, int ft)
{
gfx_move(x,y);
gfx_set_proportional(ft);
gfx_print_text(str);
}


void Go(int dist, int cm_pro_sec)
{
const float TICKS_PER_CM = 1.75f;


motco_resetOdometry(0,0);
motco_update();

int16_t limit = dist * TICKS_PER_CM;


int16_t pwm = cm_pro_sec * 80;
if (pwm > 1024) pwm = 1024;
if (pwm < -1024) pwm = -1024;


motco_setPWM(pwm,pwm);
motco_setSpeed(cm_pro_sec * TICKS_PER_CM , cm_pro_sec * TICKS_PER_CM);
motco_update();


//delay(3000); //TODO: muss weg

char ticks_r_string[6];
char ticks_l_string[6];
char limit_string[6];
char speed_l_string[6];
char speed_r_string[6];




do
{
motco_update(); /* hoffentlich geradeaus fahren */


textout(0,56," ",0);

itoa(motco_ticks_l,ticks_l_string,10);
textout(0,56,ticks_l_string,0);

itoa(motco_ticks_r,ticks_r_string,10);
textout(25,56,ticks_r_string,0);

itoa(limit,limit_string,10);
textout(50,56,limit_string,0);

itoa(motco_speed_l,speed_l_string,10);
textout(75,56,speed_l_string,0);

itoa(motco_speed_r,speed_r_string,10);
textout(100,56,speed_r_string,0);

delay(200);
}
while(motco_ticks_r < limit);
}


int main()
{
sei(); // enable interrupts
bot_init();
leds_init();
pwm_init();
display_init(2);
gfx_init();
motco_setSpeedParameters(5,6,7);

leds_set_displaylight(800);


textout(10,10,"Nibo meldet:",0);
textout(10,24,"Motor an!",0);
textout(10,38,"Licht an!",0);

leds_set_headlights(512);

int i,j;
for(i=1;i<=6;++i)
{
for(j=0;j<i;++j)
leds_set_status(LEDS_GREEN,j);

Go(10,i);
}


leds_set_headlights(0);

motco_stop();
motco_update();

for(j=0;j<6;++j)
leds_set_status(0,j);

textout(10,24,"Motor aus!",0);
textout(10,38,"Licht aus!",0);

while(1);
return 0;
}

Die Werte für ticks oder speed bleiben bei 0.

Kennt jemand dieses Problem? Fehler im Programm? Dass die Hardware auf beiden Seiten ausfällt, halte ich für unwahrscheinlich, es sei denn eine kalte Lötstelle / ein Defekt, der beide Seiten betrifft. Was sollte man nachlöten?

ehenkes
17.07.2020, 10:36
Dass hier niemand antwortet, zeigt, wie schnell man mit neben der Masse liegenden Bots "einsam" wird.

oberallgeier
17.07.2020, 11:17
Dass hier niemand antwortet, zeigt, wie schnell man mit neben der Masse liegenden Bots "einsam" wird.Na ja, nicht wirklich (behaupte ich - jedenfalls ist´s nicht meine Erfahrung hier, zumal ich ja meist neben der "Masse" liege). Ich wollte/konnte nix schreiben, weil meine Nibo ja die Nibobee ist und ich den Aufbau bei Dir nicht kenne. Daher gibts von mir nur allgemeine Anmerkungen. Meine Probleme mit Odometrie kamen fast immer von "Fremdlicht" - irgendwelche mal-da/mal-nicht-Einflüsse von einfallendem Licht.

Abhilfe:
1) Methode des genauen Hinsehens : wo sind vermeidbare Spalte für Lichteinfall? U.U. verdächtige Spalte mit schwarzem Isolierband abdecken.
1b) Methode wie oben - mögliche kalte Lötstellen oder Wackelkontakte (z.B. DMM an Versorgung des Sensors, evtl. auch an Signal-out).
1c) nimmt die Odometriesensorik überhaupt an der lokalen Energieversorgung teil? (im Prinzip Teil von 1b)
1d) Methode wie oben: sind die richtigen Bauteile eingebaut? Aber es steht ja "..kommen (plötzlich?) keine Werte ..".
2) Testprogramm: WENN Odometriesensor schaltet z.B. Signal-on, dann geht ne LED an, bei Signal-off geht die LED aus. Danach/dazu u.U. mit ner nicht zu schwachen Lichtqelle in Nähe der Sensoren rumfuchteln.
3) Ausser dem DMM hilft natürlich auch ein Oszilloskop und klitzekleine Abgreifklemmen. In seltenen Fällen habe ich Testanschlüsse auch an verdächtigen Stellen angelötet.
4) Nur so - als allgemeine Frage: ist Deine Odometrie als Reflexlichtschranke oder als Spaltscheibe mit Gabellichtschranke aufgebaut?

Vielleicht hilfts was, vermutlich hast Du das meiste/alles schon erledigt.

ehenkes
20.07.2020, 09:57
Es war 1b, also eine kalte Lötstelle. Nach Erwärmen der Lötungen - nach Sichtkontrolle - im Bereich des Steckers auf der Hauptplatine funktioniert die Odometrie wieder bestens. Das ist wirklich schön, denn mit dem Nibo1 kan man einiges testen.