I2C ATtiny und Python auf Raspberry

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MAP
User
Beiträge: 5
Registriert: Mittwoch 26. Juni 2013, 19:46

Hallo, ich möchte gerne Werte auslesen die von einem Controller via I2C zur Verfügung gestellt werden. Über die Konsole funktioniert es, sprich über Terminal:

i2cdetect -y 1 > kompletten ersten I2C Bus durchsuchen
i2cdump -y 0x14 i > auslesen als i2c block

hat jemand von euch sowas schon einmal umgesetzt. Danke, ein ähnlicher Beitrag hier im Forum half mir nicht wirklich weiter.
BlackJack

@MAP: Du musst halt mit einer passenden Bibliothek auf den I²C-Bus zugreifen. Beim Raspi beziehungsweise Debian bietet sich das `smbus`-Modul an. Welche Kommandos der Chip erwartet, sollte in der Dokumentation zum Chip nachzulesen sein.
MAP
User
Beiträge: 5
Registriert: Mittwoch 26. Juni 2013, 19:46

Hallo, danke für den ersten Tip, nun habe ich mein erstes Script fertig. Die Kommunikation mit dem Controller funktioniert. Ich habe jetzt noch zwei Probleme.
1.) Der übertragene Wert wird Dezimal angezeigt, ich benötige diesen aber in Hex. Ich habe dieses mit .encode probiert, hat leider nicht funktioniert. Dann habe ich es noch mit hex(Zeichen) probiert auch ohne Erfolg.
2.) Wie schreibe ich den empfangenen Wert in eine Datei, with open..... hat bei meiner RS232 verbindung super funktioniert, wieso hier nicht.
3.) ich möchte eigentlich 4 Bytes auslesen, muss ich jetzt zweimal ein WORD auslesen oder halt vier bytes hintereinander?

Code: Alles auswählen

#!/usr/bin/python2.7


import smbus

bus = smbus.SMBus(1)

addr = 0x14

zeichen = bus.read_byte_data(addr,0x00)

print zeichen

with open("akkueins.txt","ab") as fobj_out:
                    fobj_out.write(Zeichen.encode("hex"))
                    fobj_out.close()
Vielleicht kann mir noch einer einen Tip geben, vielen Dank
BlackJack

@MAP: Schau Dir mal genau an was Du von dem Leseaufruf zurück bekommst. Insbesondere den Datentyp solltest Du Dir mal ausgeben lassen. Die `type()`-Funktion hilft dabei.
Antworten