Raspberry Pi 1 B: Schnittstelle I2C zu MCP 23018 wird nicht erkannt

  • Guten Tag Miteinander

    Ich habe ein Problem bei einem meiner Projekte.

    Die angeschlossene GPIO-Erweiterung (MCP23018) wird via I2C nicht erkannt.

    Vermutlich wird es ein Anfängerfehler sein. Ich wäre dankbar, wenn ihr mich in die richtige Richtung schubsen könntet.

    Vieleicht hatte jemand von euch schon einen ähnlichen Fall.

    Gruss Maesi

    (Falls ich eine wichtige Info vergessen habe liefere ich diese möglichst schnell nach)

    Problem:

    Ein MCP23018 ist an einen Raspberry über die SDA und SCL Pins angeschlossen.

    Die Stromversorgung des MCP23018 wird über die Pins des Raspberrys realisiert.

    Die Stromversorgung des Raspberrys wird über ein separates Netzteil (IRM 20-5) realisiert.

    Es läuft eine frische Installation des Betriebssystem auf dem Raspberry.

    Terminalbefehl "sudo i2cdetect –y 1" liefert eine leere Tabelle zurück. Der Baustein MCP23018 wird nicht erkannt.

    Ziel:

    MCP23018 ansteuern/erkennen können.

    Ich vermute mal folgende Fehlerquellen:

    - ein Detail beim Verkabeln übersehen/falsch gemacht

    - beim Aufsetzten des Raspberrys etwas vergessen --> es handelt sich um ein altes Modell

    - Defekte PINs am Rasperry oder Bauteile (eher unwahrscheinlich --> mehrer durchgetestet)

    Leider finde ich im Internet keine weiteren Anhaltspunkte wo der Fehler liegen könnte...

    Für jeden Denkanstoss wäre ich dankbar.

    eigentliches Projekt

    Um meine Elektrokenntnisse auf Vordermann zu bringen habe ich mir eine Wörteruhr vorgenommen.

    Der Raspberry dient als Steuereinheit (hatte noch ein paar rumliegen). Über die I2C Schnittstelle und die Porterweiterer möchte ich eine LED-Matrix realisieren.

    Das Ganze wird am Schluss noch in einen Rahmen Verpackt.

    Zumindest war das mal der Plan :D

    verwendete Bauteile:

    Raspberry Pi 1 Model B Rev 2

    cat /proc/cpuinfo:

    processor : 0

    model name : ARMv6-compatible processor rev 7 (v6l)

    BogoMIPS : 697.95

    Features : half thumb fastmult vfp edsp java tls

    CPU implementer : 0x41

    CPU architecture: 7

    CPU variant : 0x0

    CPU part : 0xb76

    CPU revision : 7

    Hardware : BCM2835

    Revision : 000e

    Serial : 000000003012fa6d

    Model : Raspberry Pi Model B Rev 2

    MCP23018 (GPIO-Erweiterung)

    IRM-20-5 (Netzteil)

    bisherige Schritte:

    - Ich bin diesem Tutorial (ist zwar für 23017, beide sollten aber kompatibel sein) gefolgt, den Part mit den LEDs habe ich weggelassen.

    - eine schlechte Spannungsversorgung sollte ausgeschlossen sein wegen dem dediziertem Netzteil 5V und 4A.

    - Rasperry sollte korrekt eingerichtet sein. Frisches Betriebssystem und Quervergleich mit anderen Tutorials.

    - MCP23018 ausgetestet mit Versorgungsspannung 5V und 3.3V. Via Netzteil und Raspberry

    (unter anderem wegen diesem Post aus diesem Forum)

    - mehrere MCP23018 durchgetestet und auch mehrere Raspberrys (alle von der 1. Generation)


    Überblick:


    Schaltaufbau gemäss Tutorial:


    evtl hilfreiche Terminal-Ausgaben:

    lsmod

    Module Size Used by

    sg 28672 0

    uas 24576 0

    fuse 114688 3

    hid_logitech_hidpp 40960 0

    sha256_generic 16384 0

    libsha256 20480 1 sha256_generic

    cfg80211 667648 0

    rfkill 28672 2 cfg80211

    8021q 32768 0

    garp 16384 1 8021q

    stp 16384 1 garp

    llc 16384 2 garp,stp

    joydev 20480 0

    hid_logitech_dj 24576 0

    raspberrypi_hwmon 16384 0

    i2c_bcm2835 16384 0

    bcm2835_codec 36864 0

    bcm2835_v4l2 45056 0

    v4l2_mem2mem 32768 1 bcm2835_codec

    bcm2835_isp 28672 0

    bcm2835_mmal_vchiq 28672 3 bcm2835_isp,bcm2835_codec,bcm2835_v4l2

    videobuf2_vmalloc 16384 1 bcm2835_v4l2

    videobuf2_dma_contig 20480 2 bcm2835_isp,bcm2835_codec

    videobuf2_memops 16384 2 videobuf2_dma_contig,videobuf2_vmalloc

    videobuf2_v4l2 28672 4 bcm2835_isp,bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem

    videobuf2_common 53248 5 bcm2835_isp,bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2

    videodev 225280 6 bcm2835_isp,bcm2835_codec,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2

    mc 45056 6 bcm2835_isp,bcm2835_codec,videobuf2_common,videodev,v4l2_mem2mem,videobuf2_v4l2

    vc_sm_cma 32768 2 bcm2835_isp,bcm2835_mmal_vchiq

    uio_pdrv_genirq 16384 0

    uio 20480 1 uio_pdrv_genirq

    fixed 16384 0

    i2c_bcm2708 16384 0

    snd_bcm2835 28672 4

    snd_pcm 94208 1 snd_bcm2835

    snd_timer 32768 1 snd_pcm

    snd 73728 11 snd_timer,snd_bcm2835,snd_pcm

    i2c_dev 16384 0

    ip_tables 28672 0

    x_tables 32768 1 ip_tables

    ipv6 446464 26

    raspi-blacklist.conf

    options i2c_bcm2708 baudrate=100000 #macht keinen Unterschied

    modules

    i2c-dev

    snd-bcm2835

    i2c-bcm2708

    config.txt

    #For more options and information see

    # http://rpf.io/configtxt

    # Some settings may impact device functionality. See link above for details

    # uncomment if you get no picture on HDMI for a default "safe" mode

    #hdmi_safe=1

    # uncomment this if your display has a black border of unused pixels visible

    # and your display can output without overscan

    disable_overscan=1

    # uncomment the following to adjust overscan. Use positive numbers if console

    # goes off screen, and negative if there is too much border

    #overscan_left=16

    #overscan_right=16

    #overscan_top=16

    #overscan_bottom=16

    # uncomment to force a console size. By default it will be display's size minus

    # overscan.

    #framebuffer_width=1280

    #framebuffer_height=720

    # uncomment if hdmi display is not detected and composite is being output

    #hdmi_force_hotplug=1

    # uncomment to force a specific HDMI mode (this will force VGA)

    #hdmi_group=1

    #hdmi_mode=1

    # uncomment to force a HDMI mode rather than DVI. This can make audio work in

    # DMT (computer monitor) modes

    #hdmi_drive=2

    # uncomment to increase signal to HDMI, if you have interference, blanking, or

    # no display

    #config_hdmi_boost=4

    # uncomment for composite PAL

    #sdtv_mode=2

    #uncomment to overclock the arm. 700 MHz is the default.

    #arm_freq=800

    # Uncomment some or all of these to enable the optional hardware interfaces

    dtparam=i2c_arm=on

    dtparam=i2c1=on

    #dtparam=i2s=on

    #dtparam=spi=on

    # Uncomment this to enable infrared communication.

    #dtoverlay=gpio-ir,gpio_pin=17

    #dtoverlay=gpio-ir-tx,gpio_pin=18

    # Additional overlays and parameters are documented /boot/overlays/README

    # Enable audio (loads snd_bcm2835)

    dtparam=audio=on


    # uncomment to force a HDMI mode rather than DVI. This can make audio work in

    # DMT (computer monitor) modes

    #hdmi_drive=2

    # uncomment to increase signal to HDMI, if you have interference, blanking, or

    # no display

    #config_hdmi_boost=4

    # uncomment for composite PAL

    #sdtv_mode=2

    #uncomment to overclock the arm. 700 MHz is the default.

    #arm_freq=800

    # Uncomment some or all of these to enable the optional hardware interfaces

    dtparam=i2c_arm=on # <-------------------------------

    dtparam=i2c1=on # <-------------------------------

    #dtparam=i2s=on

    #dtparam=spi=on

    # Uncomment this to enable infrared communication.

    #dtoverlay=gpio-ir,gpio_pin=17

    #dtoverlay=gpio-ir-tx,gpio_pin=18

    # Additional overlays and parameters are documented /boot/overlays/README

    # Enable audio (loads snd_bcm2835)

    dtparam=audio=on

    [pi4]

    # Enable DRM VC4 V3D driver on top of the dispmanx display stack

    dtoverlay=vc4-fkms-v3d

    max_framebuffers=2

    [all]

    #dtoverlay=vc4-fkms-v3d

    Einmal editiert, zuletzt von maesi (27. Dezember 2020 um 12:41)

  • Raspberry Pi 1 B: Schnittstelle I2C zu MCP 23018 wird nicht erkannt? Schau mal ob du hier fündig wirst!

  • Hallo maesi,

    in der Richtung wie Bertthias gehen auch meine Gedanken.

    Und seit wann muss zwischen - und y ein Leerzeichen stehen?

    Könntest Du mal in einen meiner Threads gehen, in denen ich mich dem BME280 angenähert habe?

    Dort habe ich eine Abfrage drin, welcher I2C-Device überhaupt aktiv ist.

    Wenn Du mal die Reaktion auf die ersten dort vorgestellten Linux-Kommandos posten würdest, könnten wir Dir wahrscheinlich weiterhelfen.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (26. Dezember 2020 um 23:22)

  • Ihr habt aber schon gesehen, dass im ersten Post die config.txt steckt? Und die sieht gut aus.

    Du lädst das Modul (=Treiber) gleich 4 mal und zwei bleiben im Kernel hängen.

    Du solltest nur einmal über dtoverlay (Device-Tree-Overlay) in config.txt ein Modul laden und modprobe und /etc/modules weglassen.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Vielen Dank für die verschiedenen Ansätze, ich habe mal soweit alles durchgetestet/angepasst.

    Nach jeder Änderung wurde der Pi neu gestartet.

    RTFM

    Wenn ich die Module nur via "config.txt (Device-Tree-Overlay)" lade und "modules" leer lasse gibt es diesen Error bei "sudo i2cdetect -y 1":

    Eror: Could not open file ´/dev/i2c-1' or ´/dev/i2c/0': No such file or directory

    Wenn ich Config, modules und Blacklist auf Anfang setzte und "Raspberry Pi Configuration" zum aktivieren von i2c verwende würde es so aussehen:

    Einstellungen

    modules:
    i2c-dev

    config.txt:

    ........

    dtparam=i2c_arm=on

    .......

    weiter habe ich auch noch diese Einstellungen getestet (gemäss Infos aus der ReadMe):

    Einstellungen

    config.txt:

    ........

    dtparam=i2c_arm=on

    dtparam=i2c-bcm2708=on

    dtparam=i2c0=on,pins_28_29

    dtparam=i2c1=on

    .......

    modules:

    i2c-dev

    Resultat: "dir /dev/i2c*"

    /dev//i2c-0  /dev//i2c-1  /dev//i2c-10  /dev//i2c-11

    Bei alle Varianten bekomme ich mit "i2cdetect" eine leere Tabelle oder gar keine zurück.


    kle

    der Eintrag i2c1 war für eine Anpassung der Pin-Belegung, habe es auskommentiert und nocheimal getestet.

    leider gleiches Ergebniss


    Bertthias

    Soweit ich das mitbekommen habe ist dies nur bei der 1. Revision so, später wurde es auf 1 geändert.

    Ich verwende die 2. Revision der 1. Generation. Zur Sicherheit werde ich noch alles mit "i2cdetect -y 0" durchtesten


    Andreas

    Es dürfte kein Leerzeichen zwischen - und y haben, dies habe ich im Post falsch geschrieben, werde es noch ändern.

    Ich habe die ersten Punkte deines Threads durchgeführt. Bis 4.1 geht es ohne Probleme, bei 4.2 bekomme ich eine leere Tabelle zurück.

    Resultat: "dir /dev/i2c*"

    /dev//i2c-1

    Einstellungen

    config.txt:

    ........

    dtparam=i2c_arm=on

    .......

    modules:

    i2c-dev

  • Hallo maesi,

    Ich habe die ersten Punkte deines Threads durchgeführt. Bis 4.1 geht es ohne Probleme, bei 4.2 bekomme ich eine leere Tabelle zurück.

    Resultat: "dir /dev/i2c*"

    /dev//i2c-1

    Mit leerer Tabelle meinst Du

    Code
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    
    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    70: -- -- -- -- -- -- -- --   

    Dann bleibt nur die Schlussfolgerung übrig, dass Du eine I2C-Schnittstelle zwar richtig konfiguriert bekommen hast. Die Verkabelung scheint aber nicht zu stimmen, um auch physikalisch ein I2C-Device erkennen zu können.


    Was hat Du wie verkabelt? Hast Du die verwendeten Kabel, Kontakte etc. mal getestet? Bitte zitiere dabei nicht das verwendete Tutorial, sondern mache Dir die Mühe, DEINE SCHALTE zu zeichnen!


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas

    genau diesen Terminal-Output habe ich gemeint.

    Theoretisch müsste die Adresse 0x20 lauten

    Mit leerer Tabelle meinst Du

    Code
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    
    00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    70: -- -- -- -- -- -- -- --   

    Die Pins habe ich nocheinmal neu gesteckt und durchgetestet.

    Dort ist alles soweit in Ordnung.

    Für ein gutes Schema brauche ich noch etwas Zeit. Ich muss mich noch in das entsprechende Programm einarbeiten.

    Für die Zwischenzeit habe ich einmal etwas zusamengebastelt.

    gruss Maesi

  • Jetzt fühle ich mich ein bisschen verarscht von der Schaltung.

    Es war tatsächlich ein Wackelkontakt. Dabei hatte ich vor diesem Thread die Schaltung extra 3 mal frisch aufgebaut, genau um so etwas auszuschliessen.

    Nach dem letzten Neuaufbau kann ich das Bauteil nun ansprechen.

    Vielen Dank allerseits für die Geduld mit einem Anfänger.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!