Pi, der MCP3008 und mein Problem

  • Guten Abend liebe Community,
    Nach nun geschätzten 13h getüftle und versuchen, wende ich mich einfach mal an euch :D
    Ich habe über die Möglichkeit gelesen, mit dem Pi und dem MCP3008 analoge Werte zu verarbeiten.
    Die ist, falls nicht bekannt ein A/D-Wandler mit 10bit.
    Ergo ist der maximale Wert den er ausgibt 2^10 = 1024-1 = 1023

    Natürlich habe ich versucht, mein Problem selbst zu lösen, durch das rumgewusel in diversen Threads, dem durchlesen etlicher Anleitungen, hundertfaches kontrollieren meiner Sachen und so weiter...
    Als kleinen Bleistift, diese Foren/Threads:
    https://forum-raspberrypi.de/www.forum-rasp…ssen-mit-dem-pi
    https://forum-raspberrypi.de/www.forum-rasp…rieueberwachung

    Externe Foren:

    Spoiler anzeigen


    Und noch viele andere, die Tabs habe ich aber weder am Laptop, Smartphone noch am Pc offen, eigentlich so alles was google mir im zusammenhang mit dem Pi und dem MCP3008 ausgespuckt hat, der 3208 und ich mein der 3002 sind auch des öfteren dazwischen gewesen...
    Leider habe ich daraus, keine Lösung meines Problems beziehen können... vielleicht habe ich sie auch einfach überlesen oder Gott weiß nicht was. Bin auch nur ein Mensch am Abgrund der Verzweiflung :) Also nicht böse nehmen, wenn ihr mein Problem aus bereits existierenden Threads kennt ;)

    Wie aus den oben genannten Foren zu entnehmen ist, möchte ich gerne mit meinem Pi die Spannung eines Akkus messen. Es handelt sich dabei um eine Autobatterie, bzw. derzeit einen alten akku aus einer BMZ den ich noch rumfliegen hatte.
    ---
    Als Test habe ich jedoch 3,3v als Spannung genommen.
    VDD und VREF waren ebenfalls 3,3v (alles aus der gleichen Spannungsquelle, dem Pi)
    Kurz: ich habe 1zu1 das Beispiel von Erik Bartmann genommen, habe lediglich die GPIO geändert.
    1. Versuch
    VDD = 3,3V vom Pi
    VREF = 3,3V vom PI
    GND = GND vom PI
    SCLK = 17
    MOSI = 27
    MISO = 22
    CS = 04
    GND = GND vom PI

    2. Versuch
    VDD = 3,3V vom Pi
    VREF = 3,3V vom PI
    GND = GND vom PI
    SCLK = 11
    MOSI = 10
    MISO = 09
    CS = 04
    GND = GND vom PI

    3.Versuch
    VDD = 3,3V vom Pi
    VREF = 3,3V vom PI
    GND = GND vom PI
    SCLK = 11
    MOSI = 10
    MISO = 09
    CS = 01
    GND = GND vom PI

    A/D-Channel 0 = 10K Ohm Poti (Zum verändern des Ausgabewertes.)
    -----------------------------------------------

    Den Á/D-Channel habe ich auch schon bei allen konstilationen von 0-7 durchprobiert.

    Hier mein Pythonscript:


    Führe ich das Script nun mit
    sudo python MCP3008.py
    aus, läuft es auch, als Werte bekomme ich jedoch nur "0"
    egal, wie ich am Poti drehe, es verändert sich nichts.
    Die Spannung habe ich dabei mit einem Voltmeter überwacht, um die Funktionsfähigkeit meines Potis zu versichern. von 0 - 3,3V alles dabei.

    Zwischenzeitlich habe ich es auch hinbekommen, fragt mich nicht wie oder warum, dass ich 3-6 mal wirkliche Werte angezeigt bekommen habe.
    Damit mein ich, dass beim Start des Scripts die ersten 3-6 Werte keine "0" waren sondern z.b. "634", "752"... je nachdem wie das Poti halt stand.
    Nach diesen ersten 3-6 "vernünftigen" Werten, kam eine: "2047" und ab dann nur noch "0"
    Die "2047" tauchte auch nicht immer auf, ab und an blieb sie aus und es ging einfach mit "0" weiter.

    Derzeit, bin ich wieder da, wo ich ganz am Anfang war und zwar, dass egal was ich mach die Werte von vornerein "0" sind und nichts anderes mehr.

    Vorallem, warum habe ich den Wert "2047" ausgegeben bekommen, als ein A/D-Wandler mit 10bit, kann er diesen Wert doch gar nicht ausgeben, oder irre ich mich da ?


    Die GPIOS
    7
    8
    25
    24
    23
    18
    Kann ich nicht verwenden, da ich an diesen Bereits ein LCD-Display angeschlossen habe.

    Ich habe diesen Post, so übersichtlich gestaltet, wie es meine kreativität zulässt, bei Fragen oder Unklarheiten: bescheid geben, danke...
    Mir wird des öfteren gesagt, dass ich bei sowas gern ein komplizierter Mensch bin und es schwer für andere ist, sich in meine Arbeit bzw. in mein Machen reinzudenken. :D

    Kann sich irgendjemand ein Bild von dem machen, was ich versucht habe zu beschreiben ? :s


    tl;dr

    Spoiler anzeigen


    Pi -> A/D-Wandler(MCP3008) != Werte
    Case1: Werte = 3-6x OK => 2047 => 0.....n
    Case2: Werte = 3-6x OK => 0.....n
    Case3: Werte = 0.....n
    Poti 10K Ohm = 3,3V PI -> CH0 - 7

    GPIO
    VDD 3,3V PI
    VREF 3,3V Pi
    GND GND PI
    SCLK 17, 11, 11
    MOSI 27, 10, 10
    MISO 22, 09, 09
    CS 04, 01, 04
    GND GND PI

    GPIO Already in use: 7, 8, 18, 23, 24, 25 (LCD-Display)

    Script:

    Für die interessierten, warum ich das unbedingt brauch, s.h. Das bild im Anhang.
    Das dinge will ich nicht nur über den Netzbetrieb laufen lassen können, sondern auch über z.b. Autobatterien und dann wäre es ganz nützlich, neben den Systemdaten wie CPU Auslastung, Temperatur etc. auch die Spannung der Batterie anzeigen zu lassen, um die restliche Laufzeit abschätzen zu können. :)


    Mfg
    Lars

    Ich hoffe, ich nerve euch nicht schon mit meinem ersten Thread ;D

    //Edit: 16.08.2014 14:39Uhr
    Ich habe jetzt die GPIOS vom Display (18,23,24,25) umgesetzt auf 4,17,27,22, damit ich den MCP3008 wie in der Anleitung beschrieben an die GPIO 18,23,24,25 anschließen konnte.
    Das Resultat war: Ich bekomme immernoch keine Werte sondern die ganz Zeit nur "0", wenn ich das Script ausführe.
    Das Display hat nun nicht mehr alle 4Systemdaten gezeigt (Ram, CPU TEMP, Ethernet daten, laufzeit..) Sondern nur noch den RAM und ab und an die CPU TEMP.
    Sind nicht alle GPIOS als Ausgänge geeignet ? also sind z.b. 17,27,22 keine frei Programmierbaren GPIOS? oder sind diese einfach an meinem PI kaputt ? Wäre ärgerlich, da ich diese jetzt das erste mal verwende...
    Ich denke ein defekt des MCP3008 kann ich auch langsam in Erwägung ziehen, da dieser ja keine Werte rausgibt, auch nicht wenn ich die in der Anleitung beschriebenen GPIOS verwende...
    Falls jemand eine Idee hat oder sonstiges, ich würde mich freuen :)

    //Edit: 16.08.2014 18:30Uhr
    Alles klar, habs ans Laufen bekommen.
    Die GPIOS sind wohl doch nicht soooo frei verwendbar für das Teil...
    Nachdem ich den SPI-Bus freigeschaltet hatte, den MCP3008 folgendermaßen angeschlossen habe:
    VDD = 3,3v
    VREF = 3,3v
    GND = GND
    SCLK = 11
    MISO = 09
    MOSI = 10
    CS = 07
    ----------------
    Ein anderes Script, verwendet habe, welches ich im Internet gefunden habe:


    bekomme ich nun auch die Werte ausgegeben :)
    Den SPI-BUS schaltet man wie folgt frei:

    sudo nano /etc/modprobe.d/raspi-blacklist.conf

    Dann einfach "blacklist spi-bcm2708" auskommentieren, speichern und den PI neustarten.
    Damit ist der SPI-BUS aktiv und kann nun verwendet werden.
    Die Pins des SPI-BUS sind:
    09 MISO (Input)
    10 MOSI (Output)
    11 SCLK (Schiebetakt)
    07 CS1 (Chipselect)
    08 CS2 (Chipselect)


    Gott was war das eine Plankerei! :D
    Ich bin auch noch Heilfroh, dass ich den 7er vom Display wegnehmen und umsetzen konnte ohne Probleme...
    Immerhin, kann der nächste der das gleiche Problem hat, hier auch die Lösung finden :)

Jetzt mitmachen!

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