Raspberry B+ MCP3208 empfange nur Nullen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Moep
User
Beiträge: 4
Registriert: Freitag 4. Mai 2018, 14:32

Hi,

ich habe in der Suche folgenden Beitrag gefunden, aber leider wurde nicht beschrieben woran das Problem genau lag.
Ich habe das Problem, dass ich von meinem MCP nur Nullen übermittelt bekomme.
Testweise habe ich den die Programmzeilen aus dem Beitrag eingefügt, aber es kommt immer noch nur Nullen raus.

Code: Alles auswählen

import spidev
import time
 
spi = spidev.SpiDev()
spi.open(0,0)
 
while True:
         rcv = spi.xfer2 ([6, 0 , 0])
         adcval = ((rcv[1] & 15) <<8) + rcv[2]
         print(adcval)
         time.sleep(1)
         

viewtopic.php?f=31&t=39058&hilit=MCP3208&start=15
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann auch an falscher Verkabelung liegen. Mit dem Oszilloskop mal pruefen, ob das alles seine Richtigkeit hat. Und du kannst auch mal testweise MOSI mit MISO ueber ein kabel direkt verbinden, und dir dann die *gesamte* Ausgabe anzeigen lassen. Da sollte eigentlich das Bitmuster wieder rein geschoben werden, ggf. um ein Bit verschoben.
Moep
User
Beiträge: 4
Registriert: Freitag 4. Mai 2018, 14:32

Hatte schon mit Miso und Mosi gebrückt und es kam um ein Bitverschoben an(Muss ja auch). Habe vorher auch mal SPI deaktiviert und die Pins seperat geschaltet um einen defekt auszuschliessen. Die Pins funktionieren auch. Verkabelung habe ich kontrolliert und mal mit paar aus dem Internet verglichen. da ist kein Fehler drin.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na der Code ist es sicher nicht. Das ist ja quasi keiner.

Ich würde das halt mit nem oszi prüfen. Ohne das ist IMHO kein arbeiten mit Elektronik. Und natürlich auch nochmal abgleichen mit Datenblatt des ICs etc.
Moep
User
Beiträge: 4
Registriert: Freitag 4. Mai 2018, 14:32

Habe noch was gefunden. Einen Eintrag gefunden bei Raspberrypi.org. Da jemand ein update auf stretch gemacht und danach lief es nicht mehr. Mit einem Downgrade hat es wieder funktioniert.
Er hat ein wenig getestet und er musste nur die spi.max_speed_hz = 5000 rein schreiben.
Ich schaue gerade wie ich das implementiert bekomme.
Ansonsten werde ich auch testweise ein älteres Raspbian besorgen.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst sie Geschwindigkeit verringern. Auf ein älteres OS zu gehen ist aber kompletter Overkill. Das SPI device ist sehr Basic & da hat sich bestenfalls ein defaultwert geändert.

https://github.com/doceme/py-spidev/blo ... /README.md
Moep
User
Beiträge: 4
Registriert: Freitag 4. Mai 2018, 14:32

So hab es jetzt am laufen.


Zusammen gefasst:

Wenn man ein Update auf Raspbian "Stretch" macht, dann funktioniert der SPI nicht mehr mit den MCP3208. Hier wurde irgendetwas an der maximalen Frequenz geändert.

Das Problem habe ich gelöst in dem ich durch "spi.max_speed_hz = 5000" die Geschwindigkeit eingebremst habe.


Ich bedanke mich für die Hilfe.


Viele Grüße

Moep
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Schön das es klappt. Aber 5000 ist SEHR konservativ. 500.000 sollte enauso gut gehen.
eugmel
User
Beiträge: 2
Registriert: Mittwoch 6. November 2019, 20:21

Hallo Zusammen,

kurz vorab, bin ein Neuling was RPi und Python betrifft.
Hab das gleiche Problem. Beschäftige mich schon 3 Tagen damit und komme nicht weiter. Es werden bei mir nur die Nullen angezeigt. Hab schon versucht die Zeile "spi.max_speed_hz = 5000" hinzuzufügen, kommt aber die Fehlermeldung "OSError: [Errno 9] Bad file descriptor".
Hatte mal den MCP3208 aus Versehen auf 5V laufen gelassen. Kann es vielleicht sein, dass die SPI-Pins dadurch beschädigt sind? Hab auch die Pins MISO und MOSI kurzgeschlossen und mit spidev-test (https://github.com/rm-hull/spidev-test) getestet.

Code: Alles auswählen

spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D  | ......@....▒..................▒.
RX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D  | ......@....▒..................▒.
Würde mal sagen das Senden und empfangen funktioniert. Was mich stutzig gemacht hat, sind die komischen Zeichen nach dem @.

Code: Alles auswählen

#!usr/bin/python3
import time
import spidev

spi=spidev.SpiDev()
#spi.max_speed_hz = 5000
spi.open(0,1)

poti_channel=0
fotopoti_channel=1

def ReadChannel(channel):
    adc = spi.xfer2([ 6 | (channel&4) >> 2, (channel&3) << 6, 0])
    data = ((adc[1]&15) << 8) + adc[2]
    return data

while True:
    poti_data=ReadChannel(poti_channel)
    fotopoti_data=ReadChannel(fotopoti_channel)
    time.sleep(0.01)
    print("--------------------------------------------")
    print("Wert für Strom 0-4096 ist: {}".format(poti_data))
    print("Wert für Fotowid.Strom 0-4096 ist: {}".format(fotopoti_data))
    time.sleep(1)
    
Hab RPi 2, an Channel 0 habe ich Poti und an Channel 1 habe ich ein Fototransistor. Verkabelung mehrmals kontrolliert, falls notwendig kann ich ein Foto davon machen.
Würd mich freuen wenn jemand mir helfen könnte. Danke im Voraus. Schöne Grüße
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn der Kurzschluss Daten auf MISO liefert sollte alles ok sein. Ich kenne dieses Testprogramm nicht, aber es sieht so aus als ob reinkommt was rausgeht. Das da Zeichen aus nicht-ASCII dabei sind ist irrelevant. Ich würde den Fehler in deinem Code vermuten. Der sieht etwas komisch aus. Ich mag aber gerade nicht durchs Datenblatt des MCP Stiefeln. Für den gibt’s doch genug Code da draußen, hast du den mal probiert? Ansonsten wie geschrieben - Oszi. ZB Chipselect kann von dem Tool nicht geprüft werden. Könntest du aber auch mit nem Input verbinden & auslesen.
eugmel
User
Beiträge: 2
Registriert: Mittwoch 6. November 2019, 20:21

Danke für die schnelle Rückmeldung.

In meinem Code habe ich die max. Frequenz nach spi.open gepackt. Die Schaltung hat immer noch nicht funktioniert, aber zumindest war der Fehler schon mal weg.

Code: Alles auswählen

spi.open(0,1)
spi.max_speed_hz = 500000
Kurz bevor ich es aufgeben wollte, habe ich SPI über raspi-config deaktiviert und RPi neugestartet. Nach dem Neustart SPI wieder aktiviert und das System neugestartet. Anschließend das Script ausgeführt und es hat auf einmal funktioniert.
bernhardjunk
User
Beiträge: 1
Registriert: Donnerstag 13. Februar 2020, 10:51

Hallo,
ich habe ein ähnliches Problem.
Wenn ich MISO & MOSI verbinde, bekomme ich die richtige Antwort. Getestet mit SPIDEV-Test.
Sobald ich aber den MCP3208 verbinde, bekomme ich Nullen.
Die Verbindungen schon mehrmals kontrolliert und sogar den MCP3208 getauscht. Versorgung 3,3V.
Habe keine Ahnung was noch zu machen ist.
An einem anderen Raspi lief es schon einmal aber der steht mir nicht zur Verfügung.
Gruss Bernd
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn der gleiche Code auf einem anderen PI lief, dann muss es ja zwangsweise an der Hardware oder dem umliegenden System liegen. Alles was mir dazu einfaellt (und anderen) ist hier im Thread beschrieben. Hast du das ausprobiert?
Antworten