PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibo2 ansteuerung Jumper | copro_setTarget



setle
02.06.2012, 13:42
Moin,

bin gerade ein bisschen am Programmieren und habe mich gefragt, ob schon einer von euch es geschafft hat mit dem Jumper (JP1) zu arbeiten.
Da beide über den ADC gehen bin ich mir nicht sicher ob ich dann ein bit als Output (IO_INPUT_2) und den anderen dann mit adc_read(IO_INPUT_3) auslesen soll. Wenn ich beide auslese konnen da nicht die gleichen werte raus, und es hat nicht viel mit nicht/gejumpert zu tun


adc_init(IO_INPUT_2_BIT);
int j1=adc_read(IO_INPUT_2_BIT);
char test[10];
sprintf(test,"%d",j1);
gfx_move(0,55);
gfx_print_text(test);

adc_init(IO_INPUT_3_BIT);
int j2=adc_read(IO_INPUT_3_BIT);
char test2[10];
sprintf(test2,"%d",j2);
gfx_move(50,55);
gfx_print_text(test2);



und dann meine zweite frage:
Wie läuft bei euch copro_setTargetRel(r,l, spd), bzw copro_setTargetAbs(r,l,spd)?
denn bei mir wartet die funktion nicht solange bis sie den wert erreicht hat, sondern ich muss es mit nem delay/bzw while schleife machen.

Bsp
while(copro_ticks_r !=0){
copro_update();
if((copro_current_r |copro_current_l) >=16 && copro_speed_l<=0){
copro_stop();
run_display();
while (PIND&(1<<4)) { //warten auf Betätigung von S3 zum Starten
delay(1500);
PORTE=0xFF; //alle rot LEDs einschalten
delay(100);
PORTE=0x00; //alle rot LEDs ausschalten
}
}
copro_setTargetRel(-101,-101, 10); //könnte hier ja genauso copro_setSpeed(-10,-10) nehmen
}

eigentlich habe ich auch schon mit "copro_setPositionParameters(6,5,7);" die Regelungsparameter gesetzt.
ich hatte auch schon versucht mit "uint16_t copro_target_distance;" den fehler zu finden. dabei ist mir aufgefallen das die target_distance oft noch 0 ist.

setle
03.06.2012, 22:01
Okay das mit dem Jumper hat sich erledigt.
Ich hab eine Lösung gefunden :)



set_output_bitval(IO_INPUT_2, 1); // 1. Pin vom Jumper auf HIGH setzten, sollte auch mit LOW funktionieren

adc_init(IO_INPUT_3_BIT); //adc initialisieren für den 2. Pin
int adc_jumper=adc_read(IO_INPUT_3_BIT); //2. Pin auslesen

if(adc_jumper>=990){ // Entscheiden, ob Jumper gesteckt oder nicht ist. Bei mir ist mit gestecktem J meist ein wert von 1016 und ohne 600 bis 700
gfx_move(0,55);
gfx_print_text("EIN");
}
else{
gfx_move(0,55);
gfx_print_text("aus");
}
////// debug von mir, falls eure werte etwas abweichen könnt ihr die analog werte anpassen
////char test[10];
////sprintf(test,"%d",adc_jumper);
////gfx_move(50,55);
////gfx_print_text(test);


vielleicht sieht man jetzt noch ein paar mehr programme die den Jumper nutzen :)
Oder zumindest den ADC :)

MfG

Stefan

EDIT:
Hier mein Beispielprogramm auf roboter.cc
http://roboter.cc/index.php?option=com_nicaiwci&view=project&Itemid=61&projectid=757

bisben
20.06.2012, 08:44
Hallo setle,
warum setzt Du nicht einfach Pin F4 auf Input und Pin F5 auf Output. Am Pin F4 dann noch den internen Pull-up eingeschaltet und Pin F5 auf low geschaltet. Dann siehst Du doch am Input F4, ob der Jumper gesteckt ist, oder nicht.
Du musst ja nicht ein digitales Signal über einen ADC einlesen, wäre ja Zeitverschwendung.
mfg Ben