Posts by OSchubert

    Könntest du mir vlt. sagen, an welcher Stelle im Code du "spi.max_speed_hz = 1000000" hinzugefügt hast?

    Der Quelltext den ich benutze ist dieser hier, hoffe es hilft:


    #!/usr/bin/python

    from spidev import SpiDev

    from time import sleep


    class MCP3008:

    def __init__(self, bus = 0, device = 0):

    self.bus, self.device = bus, device

    self.spi = SpiDev()

    self.spi.open(self.bus, self.device)


    # Dies ist nötig, weil ab Kernel 4.9 die Frequenz des SPI von 100 auf 125 MHz geändert wurde (OST: 20180102)

    self.spi.max_speed_hz = 1000000


    def read(self, channel = 7):

    adc = self.spi.xfer2([1, (8+channel)<<4, 0])

    data = ((adc[1] & 3) << 8 ) + adc[2]

    return data


    def ConvertVolts(data,places):

    volts = (data * 3.3) / float(1023)

    volts = round(volts,places)

    return volts



    DELAY = 0.5


    try:

    print('Reading MCP3008 values, press Ctrl-C to quit...')

    # Print nice channel column headers.

    print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8)))

    print('-' * 57)

    while True:

    adc = MCP3008()

    values = [0]*8


    for i in range(8):

    values[i] = adc.read( channel = i )

    print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))

    sleep(DELAY)

    except KeyboardInterrupt:

    GPIO.cleanup()


    Quelltext ENDE.


    EDIT: Ach so, lese gerade, dass es sich bereits erledigt hat, freut mich das es jetzt klappt, viel Spaß!

    Problem behoben, lag wohl tatsächlich an der Frequenz, Beispiel Code um spi.max_speed_hz = 1000000 erweitert, nun klappt es wieder, auch mit aktuellen Kernel. Werde bei zukünftiger Gelegenheit mal die Details klären, aber für den Moment reicht es mir, dass es wieder funktioniert.


    Danke für Eure Hilfe!

    Hab den Artikel nur überflogen und mich mit der Hardware des RasPi noch nicht intensiv auseinander gesetzt, aber da auch ein Kumpel von mir mit der bekannten Verdrahtung und den üblichen Beispiel-Codes auch keinen Erfolg hatte bis er einen anderen RasPi benutzt hat (wo es dann sofort klappte, vermutlich wegen einem "älterem" Kernel), tippe ich auf das 100 bzw. 125 MHz Frequenz-Problem, wie hier beschrieben:


    https://github.com/bulletmark/…2d66b5f395227d9785221ff21


    Die Verdrahtung haben wir zigmal gegenseitig überprüft, die kenne ich schon fast auswendig, ist kein Hexenwerk - beim "älteren Pi" bekommt er, ja nach Quell-Code, die bekannten zufälligen Schwankungen bei Anschlüssen die nicht Genullt sind, ist fast nie genau Null, im Gegensatz zu den zwei anderen, aktuelleren Pi's die exakt Null ausgeben - aber wie gesagt, werde am Wochenende alle Tipps ausprobieren.


    Hintergrund ist übrigens, dass ich meine Solaranlage die bisher mit Resol gesteuert wird selbst managen will, da ein Holzbrenner zusätzlich zum Ölbrenner dazugekommen ist und kein Programm des Resol Systems damit klar kommt.

    Vielen Dank für die Hilfe - bin unterwegs, kann es also noch nicht testen, aber habe folgendes gefunden:


    Code
    1. The linux-raspberrypi kernel update to 4.9.43 included a change to the
    2. default reported max speed of the linux spidev, from 100KHz to 125MHz.
    3. kernel: BCM270X_DT: Set spidev spi-max-frequency to 125MHz.
    4. See raspberrypi/linux#2165.

    Habe den Verdacht, dass der MCP3008 nur 100MHz verträgt, würde "das große Schweigen" des Chips erklären, wenn ich also zurück bin, werde ich mal schauen, wie die Frequenz des SpiDev eingestellt werden kann, von vermutlich 125 MHz (seit Kernel 4.9.43) zurück auf 100 MHz.

    Dort bitte DEINE Schaltung einpflegen und als .PNG oder .JPG hier posten.

    OK, aber das wird exakt so aussehen wie im Tutorial...

    EDIT: Rein interessehalber: Wo hast Du denn diese blaue Arbeitsplatte her? Ich habe sowas ähnliches für einen Arduino mit Steckbrett. Aber die Kombination mit einem Raspberry und Steckbrett zum Aufkleben gefällt mir...

    Zum Beispiel hier: https://www.amazon.de/dp/B01MQSWUGY

    Mh, nicht schön, aber für den Moment reicht es (oder?):


    pi@raspberrypi:~ $ nano MCP3008Soft.py

    GNU nano 2.7.4 File: MCP3008Soft.py


    #Python Timerklasse importieren

    import time

    #Python Raspberry Pi GPIO Klasse importieren

    import RPi.GPIO as GPIO


    # Festlegung der Nutzung der vorgegebenen Nummerierung der GPIOs

    GPIO.setmode(GPIO.BCM)


    HIGH = True # 3,3V Pegel (high)

    LOW = False # 0V Pegel (low)


    # SCI Funktion

    def getAnalogData(adCh, CLKPin, DINPin, DOUTPin, CSPin):

    # Pegel definieren

    GPIO.output(CSPin, HIGH)

    GPIO.output(CSPin, LOW)

    GPIO.output(CLKPin, LOW)


    cmd = adCh

    cmd |= 0b00011000 # Kommando zum Abruf der Analogwerte des Datenkanals adCh


    # Bitfolge senden

    for i in range(5):

    if (cmd & 0x10):

    GPIO.output(DINPin, HIGH)

    else:

    GPIO.output(DINPin, LOW)

    # Clocksignal negative Flanke erzeugen

    GPIO.output(CLKPin, HIGH)

    GPIO.output(CLKPin, LOW)

    cmd <<= 1 # Bitfolge eine Position nach links verschieben


    # Datenabruf

    adchvalue = 0

    for i in range(11):

    GPIO.output(CLKPin, HIGH)

    GPIO.output(CLKPin, LOW)

    adchvalue <<= 1 # 1 Postition nach links schieben

    if(GPIO.input(DOUTPin)):

    adchvalue |= 0x01

    time.sleep(0.5)

    return adchvalue


    # Konfiguration Eingangskanal und GPIOs

    CH = 0 # Analog/Digital-Channel

    CLK = 18 # Clock

    DIN = 24 # Digital in

    DOUT = 23 # Digital out

    CS = 25 # Chip-Select


    # Pin-Programmierung

    GPIO.setup(CLK, GPIO.OUT)

    GPIO.setup(DIN, GPIO.OUT)

    GPIO.setup(DOUT, GPIO.IN)

    GPIO.setup(CS, GPIO.OUT)


    while True:

    print getAnalogData(CH, CLK, DIN, DOUT, CS)


    Leider können wir mit Tutorials, an denen Du Dich orientierst, wenig anfangen. Bestenfalls können wir dort Fehler entdecken...


    Am schnellsten und sichersten kommen wir zum Ziel LÖSUNG, wenn Du uns DEINE Schaltung (aktuell, vergebliche Versuche) und ebenso auch den von Dir VERWENDETEN Code zu sehen bekommen.

    Na ja, ok, weiß zwar noch nicht, wie ich die Quelltexte via SSH vom Raspi auf meinen Windows Rechner bekomme, zudem habe ich den via copy/paste übernommen, aber ein Bild der Verkabelung kann ich schicken - ist nur ziemlich unübersichtlich, stimmt aber ziemlich sicher mit dem Tutorial überein.


    Nicht wundern, plus und minus sind nicht wirklich vertauscht, war nur einfacher so herum, weil die Verkabelung vom vorherigen Test noch so war.

    Hi, bin neu hier und beim Thema RasPi ebenfalls. Das Thema hier ist als "erledigt" markiert, aber ich sehe keine Lösung für dieses Problem?


    Ich habe das gleiche Problem wie es scheint. Habe bereits verschiedene Varianten ausprobiert, Software GPIO Nutzung, Hardware, verschiedene Quelltexte, verschiedene Verkabelungen, aber es kommt immer 0 als Wert an. Ich nutze einen Raspberry Pi 3 mit einem MCP3008 (eigentlich mittlerweile mehreren um einen fehlerhaften Chip auszuschliessen) und zwecks Tests einen 10k Poti.


    Hat irgendwer eine Idee bzw. was war die Lösung???