Sorry, hatte noch keine Zeit zu schauen wie der Quelltext sauber eingefügt wird, hole ich demnächst nach...
Beiträge von 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/pif…227d9785221ff21
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:
CodeThe linux-raspberrypi kernel update to 4.9.43 included a change to the default reported max speed of the linux spidev, from 100KHz to 125MHz. kernel: BCM270X_DT: Set spidev spi-max-frequency to 125MHz. 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.
-
Kann erst Morgen weiter machen, Danke bis hierhin.
-
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/ref=cm_sw_em_r_mt_dp_U_k9rrAb2FBJWFG?tag=psblog-21 [Anzeige]
-
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.
-
Übrigens, wo ich grad dabei bin:
Debian Version: 9.3
Kernel Version: Linux raspberrypi 4.9.70-v7+ #1068
Python Version: 2.7.13
Vielleicht hilft die Info?
-
-
Oh je, ja klar doch, allerdings habe ich verschiedene Varianten ausprobiert, zuerst diese hier (Verkabelung zig mal überprüft, stimmt sicher überein):
https://tutorials-raspberrypi.de/raspberry-pi-m…gnale-auslesen/
und zuletzt diese hier - ähm, muss ich noch suchen, reiche ich nach
-
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???