|
Linux-Projekte
für den Raspberry Pi
(in Python)
Voltmeter
und mini Oscilloscope
|
Voltmeter
Während
der Anfangsphase der Entwicklung des optischen Lesekopfes für
den EDL/ SML Zähler mußte ich herausfinden, in welcher Form und
Amplitude die Daten der IR-Empfangs Photodiode vorlagen und wie
weit sich der Empfänger an der Sendediode befinden mußte. Auch
das Verhalten der Zusatzelektronik mußte bewertet werden können.
Ein einfaches Voltmeter half hier leider nicht. Ein Oszilloskop
hatte ich nicht. Da fiel mir ein, daß ich von meinen Anfängen
des Raspberry noch ein Experimentierkit mit verschiedenen ICs
hatte. Hier fand sich glücklicherweise auch ein 8-kanaliger
Analog/ Digitalwandler. Also hieß es jetzt, diesen zum Laufen zu
bringen.
Bei
dem Chip handelte es sich um den 'MCP3008 I/P' mit acht 10-Bit
Kanälen und SPI-Interface mit einer Samplerate von 75 bis 200
ksps (kilo samples per second). Das
Datenblatt war schnell gefunden.
Die Pinbelegung
des Chips, die Belegungstabelle dazu und die SPI-Programmierung,
alles kein Problem.
|
Bitkonfiguration für MCP 3008
|
Auswahl Steuerbit
|
Kanal-Selektion
|
|
Einzel/ Diff
|
D2
|
D1
|
D0
|
Kanal-Selektion
|
|
1
|
0
|
0
|
0
|
CH0
|
|
1
|
0
|
0
|
1
|
CH1
|
|
1
|
0
|
1
|
0
|
CH2
|
|
1
|
0
|
1
|
1
|
CH3
|
|
1
|
1
|
0
|
0
|
CH4
|
|
1
|
1
|
0
|
1
|
CH5
|
|
1
|
1
|
1
|
0
|
CH6
|
|
1
|
1
|
1
|
1
|
CH7
|
|
0
|
0
|
0
|
0
|
+ CH0/ - CH1
|
|
0
|
0
|
0
|
1
|
- CH0/ + CH1
|
|
Pinbeschreibung MCP 3008
|
Pin
|
Symbol
|
Beschreibung
|
|
1
|
CH 0
|
Analogeingang
|
|
2
|
CH 1
|
Analogeingang
|
|
3
|
CH 2
|
Analogeingang
|
|
4
|
CH 3
|
Analogeingang
|
|
5
|
CH 4
|
Analogeingang
|
|
6
|
CH 5
|
Analogeingang
|
|
7
|
CH 6
|
Analogeingang
|
|
8
|
CH 7
|
Analogeingang
|
|
9
|
DGND
|
Digital-Masse
|
|
10
|
_CS/SHDN
|
Chip-Select/ Shutdown
|
|
11
|
D in
|
Serial Data Eingang
|
|
12
|
D out
|
Serial-Data Ausgang
|
|
13
|
CLK
|
Serial Clock
|
|
14
|
AGND
|
Analog-Masse
|
|
15
|
V ref
|
ReferenzSpannung Ein
|
|
16
|
V dd
|
Betriebsspannung 2,7-5,5V
|
|
|
Quelle: J. Hoppe
|
V
dd = +3,3V
Vref= 5.0V
A gnd +
D gnd = 0V (Analog- und Digital-Ground)
CLK= SPI SCLK
CS
= SPI CS_0
D out= SPI MISO
D in= SPI MOSI
CH 0
– CH 7 die 8 möglichen Eingangskanäle
|
Es
war hier lediglich zu beachten, daß die Eingangsspannung der
Kanäle CH0 – CH7 nie höher als Vref sein darf. Daher habe ich
diese auf 5,0 Volt des Raspberry gelegt. Vref ist die
Spannung die sich ergibt, wenn alle Bits des Wandlers gesetzt
sind.
Eine Verstärkung von kleinen Eingangssignalen hatte
ich nicht erwogen.
Da der A/D-Wandler 10 Bit hatte, war
der Multiplikator für die Digitalwerte schnell errechnet:
Vref
(5,0V) / 2^ Bitanzahl (1024) = 0,0048828125. (Der Wandler kann
NUR positive Spannungen verarbeiten!)
Auf
einem kleinen Experimentierboard (17x 4+4) wurde die Schaltung
schnell aufgebaut und an ein 320x240 Pixel LCD-Farbdisplay
(C-Berry28
von admatec, mit LED-Backlight, ist unübertroffen günstig)
angeschlossen,
das direkt auf den GPIO-Port des Raspi aufgesteckt wurde, und die
ersten 26 Pins der GPIO-
Ports an der Seite zur Verfügung stellte. Hier wurde auch wieder
die Eingabeeinheit
aus einem früheren Projekt verwendet (2 Tasten)
Die
Programmierung der SPI-Schnittstelle war kein großer Aufwand,
hier kannte ich mich inzwischen aus. Schwieriger gestaltete sich
die Ansteuerung des Farb-Displays, da hier die Datenblätter
tatsächlich Fehler aufwiesen. Aber die Ansteuerung des
Farb-Displays wird in einem anderen Projekt erklärt.
Die
Darstellung der Werte aller 8 Kanäle auf dem Display war auch
schnell erledigt (alles ist relativ, auch 'schnell'). Ein wenig
Aufenthalt gab es bei der Frage, wie löse ich eine Messung aus
(ohne Tastatur und Monitor)
und ist es eine Einzelmessung, oder soll es eine Endlosschleife
sein. Ich entschloß mich für eine Menüzeile am unteren Rand
des Displays, über die man verschieden Auswahlen treffen konnte.
Bedient wurde sie wieder mit der 'Eingabeeinheit'
(den 2
Tasten).
Das Voltmeters sieht folgendermaßen aus:
|
|
Ja, ja.... das könnte besser
aussehen.
Aber das Projekt ist noch nicht ganz fertig
und
an der Optik 'feile' ich auch noch.
|
Folgende
Menüpunkte können hier ausgewählt werden:
|
Einzel-M
|
Einzelmessung
|
Es wird EINE Messung mit
allen Kanälen durchgeführt
|
|
Dauer-M
|
Dauermessung
|
Es werden laufend alle
Kanäle gemessen und dargestellt. Dann werden ca. 1 Messung
pro Sekunde durchgeführt. Die Messung wird durch Druck auf
die Taste 2 gestopt
|
|
Clear
|
Löschen
|
Die Grafik wird leer neu
aufgebaut.
|
|
E N D E
|
Programmende
|
|
Hier
ist jetzt wohl nochmal eine Erklärung der Eingabeeinheit (2
Tasten) angebracht:
|
Dauer
|
Taste 1
|
Taste 2
|
|
< 0,2 Sekunden
|
Licht
ein/aus
|
Auswahl
|
|
>= 0,2 bis < 1.0
Sekunden
|
Nächster Menüpunkt
(runter/ rechts)
|
Voriger Menüpunkt (rauf/
links)
|
|
> 1 Sekunde
|
Nicht verwendet
|
Nicht verwendet
|
So,
ein Digitales Voltmeter mit Zahlenanzeige hatte ich nun. Das
brachte mich dem Ziel, der Signalanalyse der Infrarotdiode der
SML Schnittstelle des Stromzählers, einen
entscheidenden
Schritt näher.