Hallo!
Ich hab seit einiger Zeit den MCP3004 AD-Wandler (gibts für ein paar Euro bei Conrad) an meinem Pi hängen um zB die Helligkeit auszulesen. Die Kommunikation mit dem Pi läuft über SPI.
Das Auslesen hat mit einem Python Script auf Anhieb geklappt und die Werte werden an auch FHEM weitergemeldet.
Bisher ruft ein at das Script jede Minute auf, in dem auch das FHEM direkt eingetragen ist. Das würde ich gerne ändern und das Python Script in Perl Script ändern.
Hat jemand einen Tipp für mich wie ich das umbauen könnte? Mit Python kenn ich mich leider gar nicht aus.
Grüße
#! /usr/bin/env python
# Python Code to communicate with MCP3004
#Import SpiDev wrapper and Sleep function from time
import spidev
import os, sys
from time import sleep
#Establish SPI Connection on Bus 0, Device 0
spi = spidev.SpiDev()
spi.open(0,0)
def get_adc(channel):
#Check valid channel
if((channel > 3) or (channel < 0)):
return -1
#Perform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (8+channel)<<4, 0])
#Filter data bits from returned bits
adcout = ((r[1]&3) << 8) + r[2]
adcout2 = 1024 - adcout
percent = int(round(adcout2/10.23))
#Print 0-1023 and percentage
# print("ADC Output: {0:4d} Percentage: {1:3d}%".format(adcout,percent))
os.system('perl /opt/fhem/fhem.pl 7072 "setreading raspiVT_vzHelligkeit value'+str(channel)+' '+str(adcout2)+'"')
os.system('perl /opt/fhem/fhem.pl 7072 "setreading raspiVT_vzHelligkeit percent'+str(channel)+' '+str(percent)+'"')
get_adc(0)
Zitat von: fhainz am 08 Dezember 2014, 10:34:51
Ich hab seit einiger Zeit den MCP3004 AD-Wandler (gibts für ein paar Euro bei Conrad) an meinem Pi hängen um zB die Helligkeit auszulesen. Die Kommunikation mit dem Pi läuft über SPI.
Das Auslesen hat mit einem Python Script auf Anhieb geklappt und die Werte werden an auch FHEM weitergemeldet.
Naja am einfachsten wäre es, stattdessen den MCP3422 oder MCP3424 zu nehmen. Der wird über I2C angeschlossen und seit heute gibt es ein Modul dafür.
Oder eine Lösung entsprechend dem RPII2C Modul. Die SPI Schnittststelle sollte sich ähnlich ansprechen lassen. Dafür könnte man dann auch weitere passende logische Module entsprechend den I2C Modulen entwerfen.
Das ist ein SMD Chip oder? Ich bin mir sicher, dass alle SMD Chips die ich löte anschließend tot sind ;D
Ich werde mir mal das RPII2C Modul ansehen, aber ich befürchtete das ist noch mind. einen Schritt zu hoch für mich.
Danke für die Infos.
Grüße
das RPII2C musst Du Dir nicht anschauen, sondern einfach benutzen, das ist simpel.
Interessant ist dann erst das (neue) device Modul. Ich werde das die Tage mal mit dem UniPi Board testen.
Das RPII2C Modul zu benutzen ist sicher simple nur würde es bei mir vorher schon scheitern das SMD Ding auf eine Platine zu löten.
Deswegen wollte ich mir das RPII2C Modul ansehen um das mit spi nachzustellen bzw einen Ansatz bekomme wie ich das Python Script von oben in Perl abbilden kann.
Zitat von: fhainz am 09 Dezember 2014, 20:02:11
Deswegen wollte ich mir das RPII2C Modul ansehen um das mit spi nachzustellen bzw einen Ansatz bekomme wie ich das Python Script von oben in Perl abbilden kann.
Als erstes müsstest du rausfinden, wie man über Ioctl auf den Spi Bus zugreift.
Der Rest ist nur Fleißarbeit.
edit:
hier (https://www.kernel.org/doc/Documentation/i2c/dev-interface) habe ich die infos für den I2C her.
und hier (https://www.kernel.org/doc/Documentation/spi/spidev) gibt es was vergleichbares für den SPI Bus.
Einige Infos fehlen, aber es ist ein guter Einstieg.
Danke für die Links!
Ich hab mir das jetzt mehrmals durchgelesen, aber ich werde daraus nicht schlau. Das ist anscheinend wirklich noch eine Stufe zu hoch für mich. Hab auch noch gegooglet und gesehen das es von HiPi eine SPI.pm (https://code.google.com/p/hipi-perl-raspberrypi/source/browse/trunk/lib/HiPi/Device/SPI.pm?r=2) und eine MCP3004.pm (https://code.google.com/p/hipi-perl-raspberrypi/source/browse/trunk/lib/HiPi/Interface/MCP3004.pm?r=2) gibt, aber aus denen werde ich auch nicht schlau ;D
Vielleicht finde ich im Weihnachtsurlaub Zeit mich da näher einzulesen, aber mit meinen derzeitigen Kenntnissen wird das nix ;)
Grüße
Hallo zusammen,
mhhh den MCP3004/3008 gibt es doch als DIP ?? Oder bin ich da falsch ??
http://www.tme.eu/de/details/mcp3004-i_p/ad-wandler-integrierte-schaltungen/microchip-technology/
Naja bist du den Totgebraten hättest ! Habe ich bis jetzt noch nie geschafft .
Alternative könntest du doch den ADC PI nehmen alles fertig I2C fertig zum aufstecken fürn rasp.
https://www.abelectronics.co.uk/products/3/Raspberry-Pi/17/ADC-Pi-V2---Raspberry-Pi-Analogue-to-Digital-converter
Alternative könnte man auch wenn ich das Python script richtig verstanden habe das auch ohne SPI Bus machen .
Wichtig wäre nur die GPIO Library um den IC Daten zu senden und zu empfangen. Sende Eingang => Chip Selsect => Jedes Mal mit Flanke quittieren => Daten empfangen => Umwandeln von binär auf dezimal . (Da kommt bestimmt nocht korrektur wie ich das geschrieben habe grins.)
http://erik-bartmann.de/component/attachments/download/21.html
Der MCP3004 läuft ja (mit dem python scrit) diesen löten war nicht das Problem. SMD löten ist schon ein problem ;)
Könnte dich vielleicht interessieren .
http://forum.fhem.de/index.php/topic,34360.0.html