-
        

Ergebnis 1 bis 10 von 10

Thema: RP6Lib Bumper-/ADCerweiterung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    31
    Beiträge
    94

    RP6Lib Bumper-/ADCerweiterung

    Anzeige

    Hallo allerseits,

    da ich in meinem anderen Thread 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:
    Code:
    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()
    Code:
    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ß
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    375
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Wieder mal ein alter Thread, den ich da gefunden hab.
    Aber was macht denn der Teil hier genau? :
    Code:
       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:

    Code:
                writeString_P("BumpHL:");
                writeInteger(statusLEDs.LED2, DEC);
                writeString_P("\n");
                
                writeString_P("BumpHR:");
                writeInteger(statusLEDs.LED5, DEC);
                writeString_P("\n");
    Grüße

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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.
    Gruß
    Dirk

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    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

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Hab das jetzt wie oben beschrieben in meine Lib eingefügt, meine Abfrage:

    Code:
                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:
    Code:
    ../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!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    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

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Auch als extern im HEADER deklariert?
    (--> s. RP6lib header Dateien... )

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Oooops
    Repariert und es geht.

    Vielen Dank!!!!

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    755
    Hätte gleiche Frage, wie RP6fahrer hier:
    http://www.roboternetz.de/community/...fikation/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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •