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.