PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6Lib Bumper-/ADCerweiterung



nil.at
09.12.2008, 15:17
Hallo allerseits,

da ich in meinem anderen Thread (https://www.roboternetz.de/phpBB2/viewtopic.php?t=43982&start=22) scheinbar keine Antworten mehr bekomme, ich aber keine 5 Posts hintereinandern schreiben will, frage ich einfach hier nochmal:

Ich habe 2 weitere Bumper und zwei Fototransistoren zum RP6 hinzugefügt und wollte nur wissen ob folgende Annahmen meinerseits stimmen:

1) Die zwei freien ADC Ports sind fix fertig programmiert und können mit den Variablen adc0 bzw adc1 mittels task_ADC(void) abgefragt werden, richtig?

2) Die zusätzlichen Bumper sind an IO2 bzw. IO4 angeschlossen. Stimmt diese RP6Lib Anpassung?

Hinzugefügt zur uint8_t getBumperRight bzw Left:

uint8_t getBackBumperLeft(void)
{
PORTC &= ~SL2;
DDRC &= ~SL2;
nop();
uint8_t tmp = PINC & SL2;
if(statusLEDs.LED2) {
DDRC |= SL2;
PORTC |= SL2;
}
return tmp;
}

uint8_t getBackBumperRight(void)
{
PORTB &= ~SL5;
DDRB &= ~SL5;
nop();
uint8_t tmp = PINB & SL5;
if(statusLEDs.LED5) {
DDRB |= SL5;
PORTB |= SL5;
}
return tmp;
}

und die geänderte task_Bumpers()

volatile uint8_t bumper_timer;
uint8_t bumper_left;
uint8_t bumper_right;
uint8_t bumper_back_left;
uint8_t bumper_back_right;

void task_Bumpers(void)
{
if(bumper_timer > 50) { // 50ms
uint8_t left = getBumperLeft();
uint8_t right = getBumperRight();
uint8_t backleft = getBackBumperLeft(); //NEW
uint8_t backright = getBackBumperRight(); //NEW
if(bumper_left != left || bumper_right != right || bumper_back_left != backleft ||bumper_back_right != backright) {
bumper_left = left;
bumper_right = right;
bumper_back_left = backleft;
bumper_back_right = backright;
BUMPERS_stateChangedHandler();
}
bumper_timer = 0;
}
}

Danke und Gruß

RP6conrad
09.12.2008, 20:32
Die Annhahme ist richtig. adc0 / adc1 functionieren mit die standard lib. Das zweite Teil scheint mir auch IO. Kannst du das compilieren ohne Problemen ? Functioniert das auch ?
Schaltung IO ? (Nachmessen mit der multimeter)
Wichtig für die Ports zu sicheren : Wiederstand von 470 ohm in serie. Dan kannst du eigentlich nichts kaputmachen.

fabqu
21.10.2011, 23:28
Wieder mal ein alter Thread, den ich da gefunden hab.
Aber was macht denn der Teil hier genau? :


PORTC &= ~SL2;
DDRC &= ~SL2;
nop();
uint8_t tmp = PINC & SL2;
if(statusLEDs.LED2) {
DDRC |= SL2;
PORTC |= SL2;
}
return tmp;

DDRC ist klar, aber der Rest nicht wirklich. Ich will genauso die ADCs und diese beiden IOs einbinden. Außerdem sollen die beiden anderen IOs als Ausgänge bleiben:



writeString_P("BumpHL:");
writeInteger(statusLEDs.LED2, DEC);
writeString_P("\n");

writeString_P("BumpHR:");
writeInteger(statusLEDs.LED5, DEC);
writeString_P("\n");


Grüße

Dirk
22.10.2011, 12:50
Der Code schaltet Status-LED 2 (SL2) zuerst aus (PORTC &= ~SL2 ), stellt den uC-Portpin PC5 (IO2, daran ist SL2 angeschlossen!) auf Eingang um (DDRC &= ~SL2 ), wartet etwas (nop() ), liest den Eingang PC5 (IO2) in die Variable tmp ein (uint8_t tmp = PINC & SL2; ) und schaltet zum Schluß noch die SL2 wieder ein, wenn sie vorher auch an war (if(statusLEDs.LED2) {DDRC |= SL2; PORTC |= SL2;}), sonst bleibt sie aus.

fabqu
22.10.2011, 21:35
Ahh!!!
Super, das geht dann in der Lib von Arexx genauso.
Ich kann also diese I/Os als Ausgänge verwenden, obwohl sie eigentlich die Bumper einlesen?
Schick!
Bevor ich das so übernehme, hat es denn eigentlich geklappt?

Grüße

fabqu
23.10.2011, 10:50
Hab das jetzt wie oben beschrieben in meine Lib eingefügt, meine Abfrage:



writeString_P("BumpL:");
writeInteger(bumper_left, DEC);
writeString_P("\n");

writeString_P("BumpR:");
writeInteger(bumper_right, DEC);
writeString_P("\n");

writeString_P("BumpHL:");
writeInteger(bumper_back_left, DEC);
writeString_P("\n");

writeString_P("BumpHR:");
writeInteger(bumper_back_right, DEC);
writeString_P("\n");


Klappt auch für die alten Bumper, aber nicht für die neuen...
Die Fehlermeldung beim Kompilieren:

../Library/RP6base/PCConnection_Base.c:177: error: 'bumper_back_left' undeclared (first use in this function)
../Library/RP6base/PCConnection_Base.c:177: error: (Each undeclared identifier is reported only once
../Library/RP6base/PCConnection_Base.c:177: error: for each function it appears in.)
../Library/RP6base/PCConnection_Base.c:181: error: 'bumper_back_right' undeclared (first use in this function)


Weiß grad auch nicht weiter. Habe alles so gemacht, wie von nil.at. Und in meiner Lib sieht alles identisch aus zu den alten Bumpers.
Danke für die tips!

fabqu
24.10.2011, 13:21
Also ich finds nicht.
Ich muss ja so wies aussieht irgendwo bumper_back_left und ..._right deklarieren, hab ich doch aber so gemacht, wie es nil.at gemacht hat und wie es für bumper_back und ..._left schon in den Libs steht!?!?!?

Grüße,
Fabian

SlyD
24.10.2011, 16:39
Auch als extern im HEADER deklariert?
(--> s. RP6lib header Dateien... )

fabqu
24.10.2011, 16:48
Oooops :p
Repariert und es geht.

Vielen Dank!!!!

fabqu
05.12.2011, 10:12
Hätte gleiche Frage, wie RP6fahrer hier:
https://www.roboternetz.de/community/threads/39036-Lichtsensormodifikation/page4
Ich will die Bumper hinten in der M128 auslesen. RP6fahrer hats mit den Registern gemacht, aber ich weiß nicht, ob das nicht besser mit Interupt geschieht???
Oder ists relativ egal?
Muss ich im bumpersStateChanged-Handler noch was verändern, oder reicht es, das Register beider Controller um die 2 Einträge zu erweitern?

Danke euch schon mal!
Vg,
Fabian