Pi: Auslesen von AD-Konverter (MCP3008) will nicht

ts7622

Ensign
Registriert
Aug. 2012
Beiträge
237
guten Abend,

im November letzten Jahres habe ich mich kurz mal mit der Frage befasst, wie ich LEDs nach Signalstärke des Subwoofers leuchten lassen kann. Seit ein paar Wochen habe ich nun die LEDs für das Projekt am laufen, welches ich bereits mit einem kleinen Programm mithilfe der Electron API steuere.

Jetzt geht es darum, wie ich das Signal vom Subwoofer mittels Raspberry Pi verwerten kann. Dazu habe ich mir einen MCP3008 AD-Konverter besorgt und nach entsprecheneder Anleitung verkabelt und die Software installiert. Leider bekomme ich nur Nullen zurück. Zusätzlich habe ich diese Variante ausprobiert - mit gleichem Misserfolg.

Jetzt ist die Frage wo der Fehler liegt. Verkabelt sieht das Ganze so aus:

IMG_20170710_203437.jpgIMG_20170710_203257.jpgIMG_20170710_202703.jpg
(Auch wenn die Lötungen nicht hübsch aussehen, dem Multimeter gefällts ;) )

Zurzeit möchte ich zwei Analoge Signale konvertieren. Einmal das vom Subwoofer und eines von einem Spannungssensor. Mit einem Y-Kabel ist ein zweites Klinke-Kabel an dem entsprechenden Ausgang am PC angeschlossen und führt direkt zum Kanal 1 des MCP3008. Das Signal vom Spannungssensor sitzt an Kanal 2. Masse jeweils an Masse. Spiele ich jetzt einen tiefen Ton ab springt der Multimeter beim Messen der Spannung an. Ich müsste also theoretisch etwas verwertbares vom Konverter auslesen können.

Angeschlossen am PI sind Momentan 8 Relais, Mosfets zum LED dimmen und einen Temperatur Sensor. Naja ... ich bin überfragt ... und kein Elektriker ...

Gruß,
ts7622

Code:
pi@raspberrypi:/ $ gpio readall
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |  OUT | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |  OUT | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |  OUT | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 1 | 11 || 12 | 0 | OUT  | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | OUT  | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 1 | OUT  | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |  OUT | 1 | 21 || 22 | 1 | OUT  | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT  | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | OUT  | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 0 | 27 || 28 | 0 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |  OUT | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |  OUT | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |  OUT | 1 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |  OUT | 1 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |  OUT | 1 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
pi@raspberrypi:/ $ lsmod
Module                  Size  Used by
bnep                   12051  2
hci_uart               20020  1
btbcm                   7916  1 hci_uart
bluetooth             365511  22 hci_uart,bnep,btbcm
evdev                  12423  2
snd_usb_audio         147900  2
spidev                  7373  0
snd_hwdep               6688  1 snd_usb_audio
snd_usbmidi_lib        22487  1 snd_usb_audio
snd_rawmidi            23790  1 snd_usbmidi_lib
snd_seq_device          5504  1 snd_rawmidi
brcmfmac              222874  0
brcmutil                9092  1 brcmfmac
cfg80211              543027  1 brcmfmac
rfkill                 20851  4 bluetooth,cfg80211
snd_bcm2835            24427  0
snd_pcm                98501  3 snd_usb_audio,snd_bcm2835
snd_timer              23968  1 snd_pcm
snd                    70032  11 snd_hwdep,snd_usb_audio,snd_timer,snd_rawmidi,snd_usbmidi_lib,snd_seq_device,snd_bcm2835,snd_pcm
spi_bcm2835             7596  0
bcm2835_gpiomem         3940  0
w1_gpio                 4818  0
fixed                   3285  0
uio_pdrv_genirq         3923  0
uio                    10204  1 uio_pdrv_genirq
w1_therm                6401  0
wire                   32619  2 w1_gpio,w1_therm
cn                      5889  1 wire
i2c_dev                 6913  0
fuse                   99603  3
ipv6                  408971  83
pi@raspberrypi:/ $
 
Schau dir mal Zeile 15 an. MISO: OUT. Da sollte ALT0 stehen (oder auch IN), aber definitiv nicht OUT.
Du hast wahrscheinlich irgendein Skript, was dir den Pin überschreibt.

Es gibt dieses SPI-Testprogramm mit MISO-MOSI Kurzgeschlossen um die Funktionalität zu testen. Guck mal, ob das tut (nachdem du MISO auf ALT0 gestellt hast).
 
Ich würde vorschlagen erst einmal klein anzufangen.

Also als erstes nur den Pi über SPI-Schnittstelle mit dem ADC verbinden und am ADC eine beliebig erlaubte Fixspannung anlegen.

Dann versuchen die Spannung über den ADC per Pythonscript aus dem Beispiel auszulesen. (ich denke du meinst das Script: https://learn.adafruit.com/reading-...ing-audio-volume-with-the-raspberry-pi/script)

Wenn das funktioniert, kannst du dein Projekt ja langsam erweitern.
 
Ganz grundsätzlich wirst Du auch das Problem haben, dass dein ADC nur positive Spannungen messen kann, das Audiosignal jedoch aus Frequenzen (= auch negative Spannungen) besteht.

Die elegantere Lösung wäre vermutlich ein Audio Hat (oder eine billige USB-Soundkarte, Stichwort CM108), über die Du das Audio-Signal direkt einliest. Dieses kannst du anschließend über eine Fourier-Analyse in ein Spektrum überführen in dem Du deine "Bass-Intensität" ablesen (und an die LEDs weiterleiten) kannst.
 
@47Hancock
Tatsächlich, hatte zuvor ein Relais über den Pin betrieben dessen Modus ein Skript beim booten schaltete.
Laut dem Testprogramm läuft die Schnittstelle prima. Jedenfalls wird eine andere Spannung gemessen (=0), wenn ich die Brücke entferne.

@57Icewurm
Werde ich mal machen, jedoch gibt es doch tatsächlich eine bessere Lösung, weil ...

@02Kanibal
... ich eine USB-Soundkarte bereits verwende und das Signal über die HTML5 Web Audio API verwerten könnte. Danke für den Tipp! Nur leider verwende ich bereits ein Mikrofon für meine Sprachsteuerung. Ist es Möglich zwei USB-Soundkarten am Pi zu betreiben? Ist eventuell ein Remap vom Line-Out zum Line-In möglich?
 
Zuletzt bearbeitet:
Den Line-Out kannst Du leider nicht als Eingang verwenden. Es sollte jedoch kein Problem sein, 2 Soundkarten an den RaspberryPI zu hängen, notfalls über einen USB Hub. Alternativ ginge auch eine Soundkarte mit mehr Kanälen.
 
Zurück
Oben