- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Mcp23017

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.03.2018
    Beiträge
    47

    Mcp23017

    Anzeige

    Powerstation Test
    Hallo Zusammen,
    derzeit bin ich dabei einen Roboter zu programmieren. Das Steuerelement des Roboters ist ein Raspberry Pi Zero W. Damit ich genügend GPIOS bekomme habe ich zwei MCP23017 gekauft. Diese anzusteuern funktioniert allerdings noch nicht so gut. Ich verstehe nicht was mein Fehler ist, kann mir jemand dabei helfen? An den MCPs sind nur Drehwinkelgeber angeschlossen, die ausgelesen werden müssen. Wenn ich den Code ausführe und die Drehgeber bediene, wird nach wie vor eine 1 ausgegeben (pull up)

    Grüße,
    Thomas

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <pca9685.h>
    #include <wiringPi.h>
    #include <mcp23017.h>
    void setup()
    {
    
    
    
            wiringPiSetup();                                                //setup of wiringPi lib
            mcp23017Setup(PINBASE3,0x20);                   //setup of mcp23017
            mcp23017Setup(PINBASE4,0x70);                   //setup of mcp23017
    
    
            pinMode(PINBASE3,INPUT);                                //encoder 1 of leg 1
            pullUpDnControl(PINBASE3,PUD_UP);               //pull up encoder 
            pinMode(PINBASE3+1,INPUT);                              //encoder 1 of leg 1
            pullUpDnControl(PINBASE3+1,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+2,INPUT);                              //encoder 2 of leg 1
            pullUpDnControl(PINBASE3+2,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+3,INPUT);                              //encoder 2 of leg 1
            pullUpDnControl(PINBASE3+3,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+4,INPUT);                              //encoder 3 of leg 1
            pullUpDnControl(PINBASE3+4,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+5,INPUT);                              //encoder 3 of leg 1
            pullUpDnControl(PINBASE3+5,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+6,INPUT);                              //encoder 1 of leg 2
            pullUpDnControl(PINBASE3+6,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+7,INPUT);                              //encoder 1 of leg 2
            pullUpDnControl(PINBASE3+7,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+8,INPUT);                              //encoder 2 of leg 2
            pullUpDnControl(PINBASE3+8,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+9,INPUT);                              //encoder 2 of leg 2
            pullUpDnControl(PINBASE3+9,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+10,INPUT);                             //encoder 3 of leg 2
            pullUpDnControl(PINBASE3+10,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+11,INPUT);                             //encoder 3 of leg 2
            pullUpDnControl(PINBASE3+11,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+12,INPUT);                             //encoder 1 of leg 3
            pullUpDnControl(PINBASE3+12,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+13,INPUT);                             //encoder 1 of leg 3
            pullUpDnControl(PINBASE3+13,PUD_UP);    //pull up encoder 
    pinMode(PINBASE3,INPUT);                                //encoder 1 of leg 1
            pullUpDnControl(PINBASE3,PUD_UP);               //pull up encoder 
            pinMode(PINBASE3+1,INPUT);                              //encoder 1 of leg 1
            pullUpDnControl(PINBASE3+1,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+2,INPUT);                              //encoder 2 of leg 1
            pullUpDnControl(PINBASE3+2,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+3,INPUT);                              //encoder 2 of leg 1
            pullUpDnControl(PINBASE3+3,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+4,INPUT);                              //encoder 3 of leg 1
            pullUpDnControl(PINBASE3+4,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+5,INPUT);                              //encoder 3 of leg 1
            pullUpDnControl(PINBASE3+5,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+6,INPUT);                              //encoder 1 of leg 2
            pullUpDnControl(PINBASE3+6,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+7,INPUT);                              //encoder 1 of leg 2
            pullUpDnControl(PINBASE3+7,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+8,INPUT);                              //encoder 2 of leg 2
            pullUpDnControl(PINBASE3+8,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+9,INPUT);                              //encoder 2 of leg 2
            pullUpDnControl(PINBASE3+9,PUD_UP);             //pull up encoder 
            pinMode(PINBASE3+10,INPUT);                             //encoder 3 of leg 2
            pullUpDnControl(PINBASE3+10,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+11,INPUT);                             //encoder 3 of leg 2
            pullUpDnControl(PINBASE3+11,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+12,INPUT);                             //encoder 1 of leg 3
            pullUpDnControl(PINBASE3+12,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+13,INPUT);                             //encoder 1 of leg 3
            pullUpDnControl(PINBASE3+13,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+14,INPUT);                             //encoder 2 of leg 3
            pullUpDnControl(PINBASE3+14,PUD_UP);    //pull up encoder 
            pinMode(PINBASE3+15,INPUT);                             //encoder 2 of leg 3
            pullUpDnControl(PINBASE3+15,PUD_UP);    //pull up encoder 
    
    
    
    }
    int main()
    {
            setup();
            while(1)
            {
                    
                    for(int i=PINBASE3;i<PINBASE3+16;i++)
                    {
                            delay(500);
                            printf("%d) %d\n",i,digitalRead(i));
                    }
    
    
            }
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    sieht zumindest erstmal richtig aus

    leg dir doch mal das ergebnis von digitalRead vorher in eine 2te variable, eventuell hat der aufruf nebeneffekte

    hast du geprüft ob deine ausgänge auch alle entsprechend auf low gehen? also open drain anschlüsse sind? nicht dass deine eingänge einfach permanent auf high fliegen?!

    der portexpander sieht auch für meine anwendung gut aus, den werde ich mal bestellen, leider kann ich erst nächste woche ausprobieren
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.03.2018
    Beiträge
    47
    Okay, ich habe jetzt mal alle auf PULL_DOWN gesetzt und er spuckt mir immer noch dauerhaft 1 aus... meint ihr ich habe was falsch eingestellt?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Okay das klingt eher nach einem Kommunikationsfehler
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Welche I2C Adressen hast du den beiden Expandern gegeben? 0x20 + 0x70 erscheint mir nicht ganz richtig.

    Die beiden Expander müssen über die Adresspins unterschiedliche Adressen bekommen. Ich vermute du willst 0x20 und 0x21 verwenden.
    Kannst du die Ausgabe von
    Code:
    sudo i2cdetect -y 1
    zeigen?

    Klicke auf die Grafik für eine größere Ansicht

Name:	MCP23017-I2C.jpg
Hits:	6
Größe:	69,0 KB
ID:	34397

Ähnliche Themen

  1. MCP23017 Adressierungsproblem
    Von modtronic im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 05.06.2019, 01:26
  2. i2c Bus Timing mit dem MCP23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 13.03.2018, 16:55
  3. Input beim MCP23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 14
    Letzter Beitrag: 23.03.2017, 11:08
  4. Mcp23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 17
    Letzter Beitrag: 20.02.2017, 00:15
  5. MCP23017 mit Python steuern
    Von opc im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 23.01.2015, 10:43

Berechtigungen

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

12V Akku bauen