Raspberrypi mit A/D Wandler Modul PCF8591

Raspberrypi mit A/D Wandler Modul PCF8591

Beitragvon DL3NDD » Mo 13. Jul 2015, 17:14

Die vorangegangenen Projekte (Spannungs-Strommessung) mit dem pi und mcp3008 haben eine große Resonanz.
Viele Nachfragen aber auch Anfragen, ob ich nicht (in Lohnarbeit) :D die Hardware zusammenlöten könnte.
Die doch recht einfache Geschichte, scheint für manchen, nicht so technikaffinen Interessierten, ein großes Hindernis zu sein.
Als Alternative habe ich mich umgeschaut, was es inzwischen so gibt und bin auf den PCF8591 A/D Wandler Modul
gestoßen.

Hardware: Fotos klick zum Vergrößern

PCF8591 Modul, bei Ebay 3 Euro incl. Versand! Keine Lötarbeiten!

pcf8591_3.jpg
Das Modul hat vier Eingänge (AN0, AN1, AN2, AN3) und einen digitale Ausgang (out). Die Jumper verbinden die Eingänge mit den Sensoren auf dem Board.


Anschluss:

Der PCF8591 Modul arbeitet mit dem i2c-Bus.
A0 wird mit Plus der externen zu messenden Spannung verbunden.

Achtung!
Diese darf nicht 3.3Volt überschreiten. Wer höhere Spannungen messen will,
z.B. an einem Solarakku o.ä. muss mit einem Spannungsteiler arbeiten.


gpio.jpg




i2c einrichten:


Hier wird es etwas tricky. Dazu gibt es im Netz jede Menge Info. Ich fasse es mal zusammen wie es bei mir funktionierte.

Ab Kernel 3.18 findest du unter
Code: Alles auswählen
sudo raspi-config

Advanve - i2C aktivieren

config.jpg


weiter
Code: Alles auswählen
sudo apt-get install python-smbus


und
Code: Alles auswählen
sudo apt-get install i2c-tools


dann
Code: Alles auswählen
sudo reboot


Dann überprüfen wir und fügen evtl.hinzu
Code: Alles auswählen
sudo nano /etc/modules


modules.jpg


Wichtig: bei meinem neuen B+ funktionierte es erstmal nicht, nach langem suchen die Lösung im Netz gefunden.

in die config.txt muss noch hinzugefügt werden:
Code: Alles auswählen
sudo nano /boot/config.txt


boot.jpg


Jetzt sollte alles gehen :-), test mit:

Code: Alles auswählen
sudo i2cdetect -y 1


das Ergebnis sieht dann so aus:

i2c.jpg


Einfaches Python Skript zum auslesen:

Code: Alles auswählen
#!/usr/bin/python2
import smbus
import time

bus = smbus.SMBus(1)
add = 0x48

ch0=0x00
ch1=0x01
ch2=0x02
ch3=0x03

def readAD():
    analog = bus.read_byte(add)
    return analog
   
def writeDA(value):
    bus.write_byte_data(add, 0x44, value)
   
while(0==0):
    an0 = readAD()
    an1 = readAD()
    an2 = readAD()
    an3 = readAD()
    print 'Licht = %3d Volt = %3d Poti = %3d Temp = %3d' % (an0, an1, an2, an3)
    writeDA(an0)
    time.sleep(0.5)
    writeDA(0x00)


Geht wunderbar...das Skript muss dann noch erweitert werden zum Sammeln, Umrechnen und Darstellen der Werte,
und evtl. Transport auf eine Webseite. (laufendes Skript mit ctrl C unterbrechen)
Dateianhänge
pcf8591_4.jpg
Synology DS213+ als Web-FTP-und VPN Server, FT2000 SteppIr, homemade PA LDMOS
Benutzeravatar
DL3NDD
 
Beiträge: 900
Registriert: Sa 10. Nov 2012, 21:34

Zurück zu Tutorials

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron