Analogwerte vom I2AE18-Modul einlesen
Das Programmbeispiel liest auf Tastendruck die Analogwerte von der 18-Bit Analog-Eingangskarte ein, schreibt den Wert in ein Label und gibt ihn in einer Balkengrafik aus.
Programmcode
#!/usr/bin/python import ast import smbus bus = smbus.SMBus(1) #Bus definieren from time import sleep import tkinter from tkinter import * import tkinter.ttk as ttk mainWin = Tk() mainWin.title('Analoge Eingabe') stBy = 0 addr = 0x68 def wert(): def read(): stBy = 0 adrOp_v = var1.get() auflOp_v = var2.get() versOp_v = var3.get() if versOp_v == "1": stBy = stBy+0 elif versOp_v == "2": stBy = stBy+1 elif versOp_v == "4": stBy = stBy+2 elif versOp_v == "8": stBy = stBy+3 if auflOp_v == "12": stBy = stBy+0 elif auflOp_v == "14": stBy = stBy+4 elif auflOp_v == "16": stBy = stBy+8 elif auflOp_v == "18": stBy = stBy+12 stBy = stBy+128 print(stBy) addr = ast.literal_eval(adrOp_v) bus.write_byte(addr,stBy) sleep(0.05) if auflOp_v == "12" or auflOp_v == "14" or auflOp_v == "16": var = bus.read_i2c_block_data(addr,0,3) print(var) var = var[2]*256+var[1] if auflOp_v == "18": var = bus.read_i2c_block_data(addr,0,4) var = bus.read_byte_data(addr,4) print(var) var = var[3]*65536+var[2]*256+var[1] print(var) #val = var[2]*256+var[1] #Berechnung der korrekten Zahlenwerte aus dem Array #label.config(text=str(val)) #Umwandeln der Integer Zahl in eine String Ziffer + Ausgabe in Label #label.after(20, read) #read() wird nach 20 ms erneut ausgeführt #pb1.config(value=var[1]) #Value der Progressbar wird angepass read() #dropdown AdrOp var1 = StringVar(mainWin) var1.set("104") # initial value adrOp = OptionMenu(mainWin, var1, "104", "105", "106", "107", "108", "109", "110", "111") adrOp.pack() #dropdown AdrOp var2 = StringVar(mainWin) var2.set("12") # initial value auflOp = OptionMenu(mainWin, var2, "12", "14", "16", "18") auflOp.pack() #dropdown AdrOp var3 = StringVar(mainWin) var3.set("1") # initial value versOp = OptionMenu(mainWin, var3, "1", "2", "4", "8") versOp.pack() #Progressbar für Analoge Darstellung pb1 = ttk.Progressbar(mainWin, orient='horizontal', maximum=255, length=100, mode='determinate') pb1.pack() button = ttk.Button(mainWin, command=wert) button.pack() mainWin.mainloop()
Hallo,
Ich bin zwar Anfänger, kann mir aber nicht vorstellen das dieser Code so funktioniert.
Bei 18 Bit Auflösung:
var = var[3]*65536+var[2]+256+var[1]
wozu +256?
var = var[3]*65536+var[2]*256+var[1]
würde meiner Meinung nach eher zum richtigen Ergebnis führen!
Gruß
Werner
stimmt 🙂
Habe den Code korrigiert. Danke für den Hinweis.