I2C-MCP3424 Analog-In-18Bit-Modul mit Python und TkInter

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.

I2C-Analog-Input Modul mit MCP3424

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()

Speichere in deinen Favoriten diesen permalink.

2 Kommentare

  1. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert