test-mcu.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from smbus2 import SMBus, i2c_msg
  2. import struct
  3. import time
  4. # Beispiel: I2C-Adresse des Geräts
  5. DEVICE_ADDRESS = 0x48 # z.B. EEPROM oder Sensoradresse
  6. I2C_BUS = 1 # I2C-1 ist meist Standard beim Raspberry Pi
  7. slot = input("Slot id (default: 0): ")
  8. if slot == "": slot = 0
  9. else: slot = int(slot)
  10. def read_status(bus):
  11. data_to_write = [(0x06 | slot << 4)]
  12. write = i2c_msg.write(DEVICE_ADDRESS, data_to_write)
  13. bus.i2c_rdwr(write)
  14. # Lesen von 3 Bytes roher Binärdaten
  15. read = i2c_msg.read(DEVICE_ADDRESS, 8)
  16. bus.i2c_rdwr(read)
  17. data_read = bytes(read)
  18. print("data:", data_read.hex())
  19. data = struct.unpack("<HhHH", data_read)
  20. # data[0] is voltage in mV
  21. print(f"Spannung: {data[0]/1000:.2f}V, Strom: {data[1]}mA, Temperatur: {data[2]}°C, Error: 0x{data[3]:02X}")
  22. with SMBus(I2C_BUS) as bus:
  23. # Schreiben von Rohdaten
  24. while True:
  25. print("Mögliche Aktionen:")
  26. print(" r <n> n Zyklen lesen")
  27. print(" w <i> i mA Strom positiv: laden (DAC), negativ entladen: (PWM)")
  28. act = input("nächste Aktion: ")
  29. if act[0] == "r":
  30. n = int(act.split(" ")[1])
  31. for i in range(n):
  32. time.sleep(1)
  33. try:
  34. read_status(bus)
  35. except:
  36. print("Bus error.")
  37. elif act[0] == "w":
  38. i = int(act.split(" ")[1])
  39. # 5 is the command for setting the current
  40. byte_str = struct.pack("<Bh", (5 + (slot << 4)), int(i))
  41. print("Sending bytes", byte_str.hex())
  42. write = i2c_msg.write(DEVICE_ADDRESS, list(byte_str))
  43. bus.i2c_rdwr(write)
  44. else:
  45. "Ungültiges Kommando."