Mithilfe von Python-smbus auf einem Raspberry Pi verwechseln mit der syntax

Ich bin versucht, python-smbus auf einem Raspberry Pi für die Kommunikation mit einem accelerometer-MMA7660-chip mit I2C.

Im nachfolgenden code lese ich die Register 0x00, 0x01, 0x02 und 0x03 in der span -, und ich bin immer der exakt gleiche Werte für alle. Blick auf die Werte, und kippen Sie den chip, ich kann sehen, dass Sie alle entsprechen register 0x00, X-Wert zu registrieren.

Ausgabe:

...
1 1 1 2
3 3 3 3
1 1 1 1
59 60 60 60
51 51 51 51
58 58 58 58
3 3 3 3
62 62 62 62
58 58 58 58
62 62 62 62
...

Code:

  import smbus
  import time

  bus = smbus.SMBus(1)
  # I2C address for MMA7660                                                     
  addr = 0x4C
  try:
    bus.write_byte_data(addr, 0x07, 0x00)
    bus.write_byte_data(addr, 0x06, 0x10)
    bus.write_byte_data(addr, 0x08, 0x00)
    bus.write_byte_data(addr, 0x07, 0x01)
  except IOError, err:
    print err

  while True:
    try:
      x = bus.read_byte_data(addr,0x00)
      y = bus.read_byte_data(addr,0x01)
      z = bus.read_byte_data(addr,0x02)
      tr = bus.read_byte_data(addr,0x03)
      print x, y, z, tr
      time.sleep(0.25)
    except:
      print 'exiting...'
      break

Mache ich etwas falsch mit dem smbus-syntax? Ich habe mir die Dokumentation hier.

Habe ich verifiziert, dass der chip funktioniert - ich kann kommunizieren gut mit es mit einem Arduino und dem setzen der Register in der gleichen Reihenfolge wie oben.

Update #1 (28 Jun 2013):

Als pro Sylvain Kommentar, ich füge Oszilloskop-Ausgang für die SDA/SCL-Leitungen für den folgenden code:

bus.write_byte(addr, 0x01)
print bus.read_byte(addr)

Mithilfe von Python-smbus auf einem Raspberry Pi verwechseln mit der syntax

Update #2:

Ich denke, es ist ein bekanntes problem mit I2C am Raspberry Pi - es gibt keine ", Wiederholte Starten".

https://raspberrypi.stackexchange.com/questions/7138/mma8452-i2c-module

Laut der Linux SMBus spec:

SMBus Read Byte:  i2c_smbus_read_byte_data()
============================================

This reads a single byte from a device, from a designated register.
The register is specified through the Comm byte.

S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P

Aber wenn ich es versuchte, die osciiloscope zeigt deutlich ein STOP (P) bevor der Wiederholte Start (S).

Also ich denke, ich bin viel Glück für die Verwendung von I2C-hardware auf dem Pi zu sprechen, um die MMA7760.

InformationsquelleAutor M-V | 2013-06-26

Schreibe einen Kommentar