Hallo Allerseits.
Habe aktuell ein paar Probleme bei der Ausgabe von Werten.
Hintergrund ist dieser, dass ich aus einem ADC128 von Ti gerne Werte
auslesen würde. Was soweit auch gar nicht mal so schlecht funktioniert.
Aber, ich bekomme wenn ich den entsprechenden Code in einem Programm
festhalten will, funktioniert es nicht mehr. Das Ganze läuft auf nem
Raspberry Pie.
In einer Python Instanz setze ich den Befehl ab und bekomme folgendes
zurück 1 | >>> print adc.read_word_data(0x1d, 0x20)
| 2 | 61590
|
Setze ich den gleichen Befehl in einer *.py ab, so bekomme ich eine 0
als Rückgabewert
1 | 1 import smbus
| 2 | 2 import time
| 3 | 3 import struct
| 4 | 4
| 5 | 5 # Legit addresses for ADC128D818
| 6 | 6 address = [0x1d, 0x1e, 0x1f, 0x2d, 0x2e, 0x2f, 0x35, 0x36, 0x37]
| 7 | 7
| 8 | 8 # Support Values
| 9 | 9 READ = 0
| 10 | 10 WRITE = 1
| 11 | 11
| 12 | 12 # Register
| 13 | 13 reg_config = 0x00
| 14 | 14 reg_interrupt = 0x01
| 15 | 15 reg_interrupt_mask = 0x03
| 16 | 16 reg_conv_rate = 0x07
| 17 | 17 reg_ch_disable = 0x08
| 18 | 18 reg_one_shot = 0x09
| 19 | 19 reg_deep_shutdown = 0x0a
| 20 | 20 reg_adv_config = 0x0b
| 21 | 21 reg_status = 0x0c
| 22 | 22 reg_ch_read = [0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27]
| 23 | 23 reg_limit = [0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39]
| 24 | 24 reg_manu = 0x3e
| 25 | 25 reg_rev = 0x3f
| 26 | 26
| 27 | 27 # Create I2C Session
| 28 | 28 adc128 = smbus.SMBus(1)
| 29 | 29
| 30 | 30 while True:
| 31 | 31 if adc128.read_byte_data(0x1d, 0x0c) == 0:
| 32 | 32 ready = True
| 33 | 33 break
| 34 | 34
| 35 | 35 if ready == True:
| 36 | 36 adc128.write_byte_data(0x1d, reg_adv_config, 0b00000011)
| 37 | 37 print "Adv. config: " + str(bin(adc128.read_byte_data(0x1d, reg_adv_config) ))
| 38 | 38
| 39 | 39 adc128.write_byte_data(0x1d, reg_config, 0b00000001)
| 40 | 40 print "Config: " + str(bin(adc128.read_byte_data(0x1d, 0x00)))
| 41 | 41
| 42 | 42 for i in reg_ch_read:
| 43 | 43 print "Ch " + str(hex(i)) + ": " + str(bin(adc128.read_word_data(0x1d, i )))
| 44 | 44 adc128.read_word_data(0x1d,0x20)
|
Ausgabe von dem Programm 1 | Adv. config: 0b11
| 2 | Config: 0b1
| 3 | Ch 0x20: 0b0
| 4 | Ch 0x21: 0b0
| 5 | Ch 0x22: 0b0
| 6 | Ch 0x23: 0b0
| 7 | Ch 0x24: 0b0
| 8 | Ch 0x25: 0b0
| 9 | Ch 0x26: 0b0
| 10 | Ch 0x27: 0b0
|
Hat jemand eine Idee warum das so unterschiedliche Werte liefert? Habe
schon gedacht, dass es an einem fehlenden Root Zugriff liegt. Aber mit
Root gibt es den gleichen Fehler.
Gruß,
me
OK. Fehler gefunden. Das Problem war nicht der Code, sondern eher die
Auswirkung von dem Schreiben eines Registers.
Denn durch das schreiben des Registers 0x0b, welches alle Register wo
der AD Wandler seine Werte speichert einfach mal löscht. Soweit nicht
schlimm. Nur fällt das halt nicht auf, wenn man die Register 0x20 bis
0x27 nur einmal liest. Liest man diese in einer Schleife, so erkennt
man, dass sich die Register langsam füllen.
Danke für den Beitrag.
Wie hast Du Dein Programm nun geändert, oder welche Anpassungen
vorgenommen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|