895
31.1
Messwerte aus einem Multimeter lesen und darstellen
Jedes Byte besteht aus zwei Teilen. Die ersten vier Bits jedes Bytes stellen fortlaufende Num-
mern dar:
0001, 0010 usw. bis 1110. Das sind die Zahlen von 1 bis 14. Jedes Byte hat also
eine Nummer.
Die letzten vier Bits sind die eigentliche Nutzinformation. Sie geben an, welche Elemente
des LCD-Displays schwarz sind (
1) und welche nicht (0).
31.1.3 Welche Ziffern zeigt das Display des Multimeters?
In diesem Abschnitt entwickeln wir ein Programm, das aus den 14 Bytes, die das Multimeter
über das USB-Kabel liefert, die vier Ziffern herausliest und als Zahlen auf dem Bildschirm
ausgibt.
Abbildung 31.4 zeigt rechts die wichtigsten Elemente auf dem LCD-Display eines digitalen
Multimeters. Bei einer konkreten Anzeige, sagen wir 108.3 , sind nur einige davon einge-
schaltet und erscheinen schwarz. Die anderen sind unsichtbar. Am wichtigsten für unsere
Zwecke sind die Ziffern. Eine Ziffernanzeige ist aus sieben Segmenten aufgebaut, die man
so durchnummeriert wie in Abbildung 31.4 links. Auf dem Display sind vier Ziffern, die mit
A, B, C und D bezeichnet werden. A1 ist das erste Segment der ersten Ziffer, A2 das zweite
Segment der ersten Ziffer usw.
Abb. 31.4: Display des Messgerätes (vereinfacht) und Nummerierung der Ziffernsegmente
Tabelle 31.1 ordnet die Elemente des LCD-Displays den Bits der 14 Datenbytes zu. Jede Zeile
der Tabelle ist ein Byte.
0b00110101
0b01000111
0b01011101
0b01100111
0b01111111
0b10001001
0b10010101
0b10100000
0b10110000
0b11000100
0b11010000
0b11100001
1
2
3
4
7
5
6
P
ABCD
P1 P2 P3
Kapitel 31
Messdaten verarbeiten
896
Skript:
Byte/Bit 0 1 2 3 4 5 6 7
0 0001
1 0 0 1 0 minus A5 A6 A1
2 0011A4A3A7A2
3 01 00P1B5B6B1
4 0101B4B3B7B2
5 0 1 1 0 P2 C5 C6 C1
6 0111C4C3C7C2
7 1 000P3D5D6D1
8 1 0 0 1 D4 D3 D7 D2
91010
nk
10 1011m M
11 1 1 00F
12 1 1 0 1 A V Hz
13 1110 °C
Tabelle 31.1: Bedeutung der übertragenen Bits des Multimeters
Tipp
Übrigens, wenn Sie die Bitmatrix inTabelle 31.1 um 90° nach links drehen, sind die Bits für
die Segmente der Ziffern ungefähr so wie auf dem Display angeordnet.
#dmm.py
import serial
DIGIT = {'1111110':'0',
'0110000':'1',
'1101101':'2',
'1111001':'3',
'0110011':'4',
'1011011':'5',
'1011111':'6',
'1110000':'7',
'1111111':'8',
'1111011':'9'} #1
def get_digits():
897
31.1
Messwerte aus einem Multimeter lesen und darstellen
Bildschirmausgabe (Beispiel):
Erläuterung:
#1: Dieses Dictionary ordnet Bitstrings aus Nullen und Einsen Dezimalziffern zu. Die Bit-
strings geben an, welche Segmente der 7-Segment-Anzeige schwarz sind (
1) und welche
unsichtbar sind (
0). Die Abbildung zeigt einige Beispiele. Am einfachsten zu verstehen ist
die Ziffer 8, bei der alle Segmente schwarz sind. Bei der Ziffer 0 ist nur das siebte Segment
unsichtbar (
0). Alle anderen sind schwarz (1).
"""Liefert die Ziffern auf dem Display als Zahl"""
ser = serial.Serial(2, 2400, 8, 'N', 1, timeout=1)
data = ser.read(28) #2
d1 = [format(i, '#010b')[2:] for i in data] #3
ser.close() #4
i = 0
while not d1[i].startswith("0001"): i +=1 #5
d = d1[i:i+14] #6
A = d[1][7] + d[2][7] + d[2][5] + d[2][4] + \
d[1][5] + d[1][6] + d[2][6] #7
B = d[3][7] + d[4][7] + d[4][5] + d[4][4] + \
d[3][5] + d[3][6] + d[4][6]
C = d[5][7] + d[6][7] + d[6][5] + d[6][4] + \
d[5][5] + d[5][6] + d[6][6]
D = d[7][7] + d[8][7] + d[8][5] + d[8][4] + \
d[7][5] + d[7][6] + d[8][6] #8
return int(DIGIT[A] + DIGIT[B] + DIGIT[C] + DIGIT[D])
if __name__ == '__main__': #9
while True:
try:
n = get_digits() #10
print(n)
except:
print ("error")
1096
1097
1097
...

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.