Python i2c write_bus_data Nutzung

8I haben eine Reihe von 4-stellige sieben-segment-displays, die ich versuche zu kontrollieren, mit Beaglebone Black (unter Ubuntu) und i2c.

Die SSD ' s sind Byvac BV4614 ist und die vollständige Datenblatt ist hier verfügbar.

Habe ich verkabelt die Schaltung richtig mit den pins P9_19 und P9_20 auf dem Beaglebone. Ich habe auch pullup-widerstände und bin mit einem i2c-Logik-Konverter für zusätzliche Sicherheit.

Ich habe überprüft, dass das Gerät mit i2cdetect (es ist 0x31, die richtig ist) und das Gerät schaltet sich schön und tritt i2c-Modus.

Aber ich verstehe nicht, wie man Lesen oder schreiben von Daten auf das Gerät mit Python SMBbus. Die SSD Handbuch sagt

Format dieses Gerät besteht aus einem Befehl, ist dies ein
Zahl, gefolgt von den anderen bytes, je nach Befehl. Die Methode
schreiben, um das Gerät mit dem I2C-Protokoll folgt einer einheitlichen
format, in der Regel: Wo S-Addr ist die
start-Bedingung, gefolgt von der Geräte-Adresse (0x62). Befehl ist eine
die Befehle in der Tabelle angegeben. Data ist ein Byte und Stoppen
ist die Stopp-Bedingung.

(auf 7-bit-Adressierung dem Gerät ist 0x31, die ist, was ich verwende).

Wenn Sie also, zum Beispiel, wollte ich die SSD auf dem display eine Zahl auf die Ziffer 1 das Handbuch sagt, ich habe zu tun

Befehl 5 - Name: Rufnummer Senden, um den Ziffern -
Format:<S-ADR><5><digit><byte><Stop>

Meine Frage ist, wie Schreibe ich, dass der Befehl mit Python? Ich denke, ich bin auf der Suche nach so etwas wie dieses

import smbus
b = smbus.SMBus(1)
b.write_byte_data(0x31, 0x35, 0x30, 0x38)

was möchte ich zu meinen "Befehl senden, 5 (0x35) zum Gerät 0x31 Ziffer 0 (0x30) und zeigt die Zahl 8 (0x38)" aber wrrite_byte_data nicht akzeptieren, dass die Anzahl der Argumente. Ich habe auch versucht, mit Hilfe write_i2c_block_data (), die sieht eher hoffnungsvoll, aber wieder, ich kann nicht herausfinden, wie die Funktionen richtig.

Ich das Gefühl, dass ich mich vor ein BCK problem hier, aber jede Hilfe würde geschätzt werden.

Bearbeiten
Ok, ich habe versucht

b.write_block_data(0x31, 5, [8, 0x38] )

wodurch die Zahl 8 erscheint auf Ziffer 3

b.write_block_data(0x31, 5, [2] )

macht 2 erscheinen auf Ziffer 2. Ich habe noch nicht herausgefunden, wie man statt alles auf die Ziffer 1 oder 4, noch.

b.write_block_data(0x31, 4, [44]) # nur in random stuff jetzt

erhöht die Helligkeit und dann ist die SSD nicht mehr reagiert.

So, ich bin immer näher,

Bearbeiten und LÖSEN

Am Ende war es lächerlich einfach.

b.write_i2c_block_data(0x31, 5, [0, 8]) # write number 8 to digit 0
b.write_i2c_block_data(0x31, 5, [4, 5]) # write number 5 to digit 4 etc etc

Laut http://www.raspberry-projects.com/pi/programming-in-python/i2c-programming-in-python/using-the-i2c-interface-2 die Funktion write_block_data ist nicht sehr gut.

write_block_data(int addr,char cmd,long vals[])

Schreiben bis zu 32 bytes an ein Gerät. Diese Funktion fügt einen ersten byte
Angabe der Länge der vals-array vor der valls-array. Verwenden
write_i2c_block_data statt!

  • Nur ein Kommentar: Stelle ist im Bereich 0-3.
InformationsquelleAutor Hugo Rune | 2013-11-25
Schreibe einen Kommentar