MCP3008 keine sinnvollen Werte

  • Hallo zusammen,

    mein MCP3008 bringt keine sinnvollen Werte, lediglich >> gibt man an CH0 circa > 3 Volt geht die anzeige auf 0.00322 (also den geringsten Wert, sprich 1)

    Misst man alle acht Kanaele, so springen (wenn ich an CH0 > 3Volt anlege) CH2 & CH4 & CH6 auf 0.00322 Volt.

    Was ich tat:

    1.) in der Raspberr< Konfiguration >> SPI enabled und Neustart

    2.) git clone https://github.com/Gadgetoid/py-spidev

    cd py-spidev

    sudo python3 setup.py install

    sudo shutdown -r now

    (alles dies OHNE FEHLERMELDUNGEN)

    3.)

    a.)Ich baute ZWEIMAL (jeweils vor dem Anschliessen die Schaltung kontrolliert!) die MCP3008-Schaltung (wie in Kofler, Kuenast & Scherbeck angegeben)

    auf:

    Pin1=CH0; Pin 9=GROUND verbunden mit Pin 6 des Pi, dem Messeingang und Pin 14; Pin 10(CS/SHDN) an Pin26 des Pi;

    Pin11 (DIn) an Pin 19(MOSI) des Pi; Pin12(DOut) an Pin21(MISO) des Pi; Pin13(CLK) an Pin23(SCLK) des Pi; Pin 14 an Pin9 des MCP3008;

    Pin15 & 16 an Pin1(3,3V) des Pi

    b.) ich tauschte (da ich vier besaß) die MCP3008 mehrfach aus (DImple == Pin1)

    c.) Ich schloss einen 10k-Poti an MCP3008>Pin9&Pin1&Pin 16 >> KEINE sinnvolle Einlesung, d.h. Nur bei einer Stellung > 3V auf CH0 (des Potis)

    springen CH0&CH2&CH4&CH6 auf 0.00322 Volt und bei weniger Volt wieder auf 0.0 V

    4.) Dies versuchte ich an meinem alten Pi3B+ und des gleichen an meinem neuen Pi 4

    5.) im /boot/config.txt steht

    dtparam=spi=on

    Ich schliesse Schaltungsfehler eigentlich aus (vier verschiedene ICs & zweimal Schaltungsaufbau & mehrfache Schaltungskontrolle)

    Vielleicht hab' ich mir die falsche Software geladen oder der Code(hier fuer die Einkanal-Anzeige):

    #!/usr/bin/python3

    import spidev

    import time

    spi = spidev.SpiDev()

    spi.open(0,1)

    while True:

    antwort = spi.xfer([1,128,0])

    if 0 <=antwort[1] <=3:

    wert = ((antwort[1] *256) +antwort[2]) * 0.00322

    print(wert, " V")

    time.sleep(0.2)

    ist falsch !?!?

    Kann mir bitte jemand helfen, ich hab' keine Idee was das sein koennte und ich brauche AD-Wandlung fuer mein Robo-Projekt.

    Vorab Danke

    Stierhof

  • Tell,

    warum fragst Du das ?...denk mal nach.....wahrscheinlich stand es so in der Anleitung, und wie Du selbst sagst ist es auch nicht falsch...Mein alter Pi3B+ ist wie ich sagte alt, nix von wegen letzten Herbst. Ging mit altem SpiDEv nicht und nicht mit dem Neuen.

    Tell, sagst Du denn wenigstens, dass das beschriebene Vorgehen sonst richtig ist, (wuerde mir helfen) oder kannst Du es nicht beurteilen ?

    Gruss

    Stierhof

  • Hallo hyle,

    Pin24 ist der Pin, wenn als CHip-Enable-Ausgang CE0 gewaehlt wird. Dann ist das open-statement:

    spi.open(0, 0)

    Waehlt man den CHip-Enable-Ausgang CE1 soist's der Pin 26 und das statement:

    spi.open(0, 1)

    .....so steht's zumindest hier.

    Ich habe BEIDES AUSPROBIERT (im Programm also geaendert und den Pin auf 24 umgesteckt>>>>>>

    das selbe Ergebnis.

    Ich zweifelte schon an der Pinbelegung des MCP3008, d.h. von oben gesehen>> oben links ist Pin1, links drunter Pin2 etc rechts oben(gegenueber des Dimples; oder rechts der IC-Kerbung) liegt Pin 16 drunter 15 etc.

    ...und hyle, deiner Meinung nach stimmt der Rest meiner Angaben ?

    Dein Hinweis sieht interessant aus. Leider hab' ich heute abend wenig Zeitdeinem Link zu folgen und es mit 'gpiozero' auszuprobieren....doch vielleicht ist das ein gangbarer Weg zu einem AD-Wandler zu kommen.

    Gruss

    Stierhof

  • Ich zweifelte schon an der Pinbelegung des MCP3008, d.h. von oben gesehen>> oben links ist Pin1, links drunter Pin2 etc rechts oben(gegenueber des Dimples; oder rechts der IC-Kerbung) liegt Pin 16 drunter 15 etc.

    Hier ist ein Datenblatt https://asset.conrad.com/media10/add/16…ern-pdip-16.pdf, da findest Du auch die Pinbelegung / -bezeichnung.

    Leider hab' ich heute abend wenig Zeitdeinem Link zu folgen und es mit 'gpiozero' auszuprobieren....doch vielleicht ist das ein gangbarer Weg zu einem AD-Wandler zu kommen.

    Ok, dann hier nach das API dazu: https://gpiozero.readthedocs.io/en/stable/api_…piozero.MCP3008

  • Dieser Code ist letzten Herbst gelaufen und hat sinnvolle Werte gebracht:

    Der Wandler war ein MCP mit 8 Kanaelen und 10 Bit Aufloesung. Den genauen Typ muesste ich erst nachsehen.

  • Hallo RTFM,

    bei mir war nur der Eintrag:

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

    dtoverlay=vc4-fkms-v3d

    Nach Lesen der /boot/overlays/README dachte ich, ich muesse noch:

    dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"

    einfuegen (mcp3008 (den ich nutze ist aehnlich mcp3204).

    Das meintest Du doch ?

    Mir ist nicht klar, ob noch andere Eintraege in

    /boot/config.txt rein muessen...wird mir aus dem Text nicht klar, oder braucht man noch

    dtoverlay=i2c-rtc,ds1307

    oder/und

    modprobe i2c-bcm2835

    modprobe rtc-ds1307

    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

    ..wird nicht klar gesagt hier fuer mein Verstaendnis

    Habe obigen EIntrag

    dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"

    in /boot/config.txt

    hinzugefuegt, neu gebootet>>>KEINE VERAENDERUNG, geht immernoch nicht.

    Nun werd' ich noch TELLs Vorschlag probieren>> im Programm noch:

    from spidev import SpiDev

    BUS = 0
    DEVICE = 0

    vor

    spi = spidev.SpiDev()

    einfuegen >>>KEINE VERAENDERUNG, geht immernoch nicht.

    Hallo hyle,

    ....muss jetzt nochmal bis heute nachmittag weg... dann versuche ich deinen Vorschlag, gemaess

    https://gpiozero.readthedocs.io/en/stable/api_…piozero.MCP3008

    mal vorzugehen


    Gruss

    Stierhof

  • Nach Lesen der /boot/overlays/README dachte ich, ich muesse noch:

    dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"

    einfuegen (mcp3008 (den ich nutze ist aehnlich mcp3204).

    Das meintest Du doch ?

    Nö, ich meinte den mcp3008 overlay

    Ich sehe aber geradem dass Du den nur für spi1 oder spi2 aktivieren musst.

    Wenn Dir auf allen 8/4 Kanälen denselben NULL-Wert ausgegeben wird, könnte das aber auch bedeuten, dass die serielle Kommunikation zwar funktioniert, die Analog/Digital Konvertierung aber danebenging und Du immer den Registerwert zum Einschaltzeitpunkt als Digitalwert ausgegeben erhältst. Der mcp3008 hat imho keine error Ausgabe, wenn die A/D Wandlung nicht gelingt. Dazu muss die richtige Sample Rate/CLK Speed (laut Datenblatt #6 ) eingestellt werden. Die max. Saple Rate ist überdies von der Versorgungsspannung abhängig.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo RTFM,

    Sorry, meine SUche nach mcp3008 schlug beim ersten Mal fehl(Wurstfingersyndrom) und somit fand ich den Eintrag Im README, speziell fuer den MCP3008 nicht.

    DOch unklar sind mir die Parameter, daa ich als Hinweis eben nur Habe, dass man beim open:

    spi.open(0, 0) den CE0 auf Pin 24 des Pi, und beim

    spi.open(0,1) den CE1 auf Pin 26 des Pi (CHip Enable Ausgabe) anspricht.

    Koreliert das mit spi1 == CE0; spi2== CE1 oder ist das noch kryptischer ?

    Moegliche EIntraege hier kann ich mir nicht erklaeren. Kannst DU mir bitte sagen, was da geht und was nicht geht

    dtoverlay=mcp3008, spi???????

    Vorab Danke

    Stierhof

  • Hallo RTFM,

    Im Internet gefunden:

    dtparam=spi=on

    dtoverlay=mcp3008:spi0-0-present,spi0-0-speed=2000000

    ...soll in /boot/config.txt stehen.

    1.) eingefuegt

    2.) neu gebootet

    3.) GEHT NICHT !

    ...dann hab' ich nochmal OHNE speed-Angabe versucht

    >>>> GEHT AUCH NICHT

    Gruss

    Stierhof

  • Im Internet gefunden:

    3.) GEHT NICHT !

    >>>> GEHT AUCH NICHT

    Ich bin auch nur einfacher Linux Anwender, kein Q&A Robot, oder als Linux-Tutor fürs Web 2.0 zertifiziert.

    Im Datenblatt des MCP3008 ist der Wandlerbaustein genau beschrieben, einschliesslich der maximalen und minimalen Geschwindigkeiten. Die dtoverlay Syntax entspricht auch nicht meinem README, was aber nicht bedeutet, dass Deine Internet-Syntax mit dem ":" vielleicht auch noch zufällig funktioniert.

    Wenn Du das Datenblatt nicht lesen kannst, oder willst, musst Du schlimmstenfalls auf die Verwendung des mcp3008 verzichten.

    Möglicherweise ist Dir die Bedeutung von RTFM auch nicht geläufig. Sie stammt aus einer Zeit, als das Web, geschweige denn das Web 2.0 noch gar nicht erfunden war. Google einmal >danach<

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo RTFM, hallo hyle,

    irgendwie geht's nun ! ....nach mehrfachen Umstellungs versuchen und Um-Konfigurationen, wenn auch etwas komisch, ABER WOHL GENAU !

    Wichtig fuer mir nachfolgende, welche gleiche oder aehnlich Probleme haben>>

    Was ich tat:

    Nach Suche im Internet fand ich den Hinweis in /boot/config.txt muesse sowas wie dtoverlay=mcp3008:spi0-0-present stehen>>> GING ABER NICHT!

    Ich versuchte weiter und dachte an den CE0 (Pin 24 ) bzw. CE1(Pin 26)> Chip-Enable. Ich steckte also um auf CE0(Pin 24), doch das ging nicht.

    Ich versuchte den Code aus http://tutorials-raspberrypi.de/raspberry-pi-m…gnale-auslesen/ der etwas anders ist und NICHT auf eine fertige Antwort des mcp3008 wartet....ging immer noch NICHT.

    NUN SO GEHT'S:

    1.) trug ein in /boot/config.txt:

    dtoverlay=mcp3008:spi0-1-present

    2.) im Code muss zu Anfang noch der speed eingestellt werden also:

    ...

    spi.max_speed_hz = 1000000

    (waere wohl auch im dtoverlay-Argument mitteilbar)

    3.) booten

    UND ES FUNKTIONIERT!!! HEUREKA!!!

    OBWOHL, kurioser weise (!) im COde von http://tutorials-raspberrypi.de/raspberry-pi-m…gnale-auslesen/

    der Faktor nicht mehr stimmt, da ~irgendwie~ 12bit-artig (oder versetzt) eingelesen wird (d.h. das Programm funktioniert mit dem Faktor 0.00081 (erst dann stimmt die Voltzahl ungefaehr)

    Nun jetzt wissen wir wie's funktioniert...SCHADE, DASS SO VIEL im Raspberry Pi-Konfiguration >> so schnell

    so viel geaendert wird, dass Anleitung SCHNELL veralten.

    >> RTFM(read the fucking manual) hilft natuerlich NICHT, wenn es verschiedene Anleitungen gibt und die Loesung

    so in KEINER ANLEITUNG steht

    So war's bei mir; und/oder wenn die Anleitungen sehr in die Tiefe gehen OHNE eine einfache default-Einstellung

    anzubieten. Um sowas dann (aufzu)loesen ist ein RaspberryPi Forum hilfreich.

    Ich Danke Euch >> hyle und RTFM

    Gruss

    Stierhof

Jetzt mitmachen!

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