Micropython, ESP32: Uhr PCF8583 wird mit I2C-Scanner nicht gefunden, PCA9685 PWM Driver Karte aber schon

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Äd Franzis
User
Beiträge: 16
Registriert: Donnerstag 11. Februar 2021, 14:55

Hallo liebe Foristen,

vielen Dank für die Aufnahme.

Mit diesem Arduino-Programm wird die Uhr PCF8583 noch gefunden:

Code: Alles auswählen

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <Wire.h>
 
void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}
 
void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Unknow error at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }
  delay(5000);          
}
Siehe hier:

Code: Alles auswählen

13:40:49.577 -> Scanning...
13:40:49.648 -> I2C device found at address 0x50
13:40:49.648 -> done
13:40:49.648 -> 
13:40:54.656 -> Scanning...
13:40:54.689 -> I2C device found at address 0x51
13:40:54.724 -> done
13:40:54.724 ->  
Das eigentliche Ziel ist aber, die HW unter

Code: Alles auswählen

Micropython
zu betreiben. Leider wird die Uhr aber mit diesem Python-Programm nicht gefunden:

Code: Alles auswählen

# Scanner i2c en MicroPython | MicroPython i2c scanner
# Renvoi l'adresse en decimal et hexa de chaque device connecte sur le bus i2c
# Return decimal and hexa adress of each i2c device
# https://projetsdiy.fr - https://diyprojects.io (dec. 2017)

import machine
#i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))       #ESP8266
i2c = machine.SoftI2C(sda=machine.Pin(21), scl=machine.Pin(22)) #ESP32

print('Scan i2c bus...')
devices = i2c.scan()

if len(devices) == 0:
  print("No i2c device !")
else:
  print('i2c devices found:',len(devices))

  for device in devices:  
    print("Decimal address: ",device," | Hexa address: ",hex(device))

Und obwohl dasselbe Programm die PCA9685 PWM Driver Karte über I2C korrekt findet, meldet es aber “ No i2c device !“, wenn stattdessen die Uhr PCF8583 angeschlossen ist.

HW (jeweils links ESP32, rechts I2C-Device):
  • PCA9685 PWM Driver Karte (5V = VCC, GND=GND, PIN21=SDA, PIN22=SCL)
  • PCA9685 PWM Driver Karte (3.3V = VCC, GND=GND, PIN21=SDA, PIN22=SCL)
  • ESP32 D1 Mini NodeMCU von AZ-Delivery (D1 Mini ESP32)
Ich hoffe, ihr könnt mir helfen.

Lieben Gruß
Äd
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn ich das richtig verstehe, funktioniert I2C mit einem, aber nicht dem anderen Gerät? Dazu fallen mir folgende Punkte ein:

- nicht 5V mit 3V3 Komponenten mischen. Das kann den ESP zerstören.
- du bist selbst verantwortlich für pull-ups. Du musst die bei den Pins die du übergibst angeben. Wie man in https://github.com/espressif/arduino-es ... 2c.c#L1469 sieht, macht die arduino esp Abstraktion das.
Äd Franzis
User
Beiträge: 16
Registriert: Donnerstag 11. Februar 2021, 14:55

Lieber __deets__,


vielen Dank für die schnelle Hilfe. Yepp, das war's: Mit 10kOhm Pull-Ups hat's gefunzt (vielleicht sollte ich die Widerstanswerte besser noch etwas reduzieren).
Und stimmt, habe mich inzwischen über mich selbst gewundert, dass ich den PCA9685 an 5 V angelegt hatte. Glück gehabt, dass der ESP das mitgemacht hat.

Dritter Fehler war, dass ich den Eingang A0 am PCF8583, mit dem die I2C-Adresse auf 0xA0 oder 0xA1 festgelegt wird, auf GND ziehen muss. Sonst toggeln die beiden Addressen immer (wie man ja auch oben schon im Arduino-Beispiel sieht).

Ohwei, mein Einstand mit gleich mehreren Anfängerfehlern ist nicht so glücklich gestartet.


Lieben Gruß
Äd
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Alles gut, so laeuft's halt mit Hardware. Viel Erfolg beim basteln.
Antworten