Hallo, ich möchte einen TAOS TSL2651 (http://www.taosinc.com/Productfamily.aspx?id=4&SD=ltd) über I2C mit einen ATmega8 auslesen. Laut Datenblatt gibt der Sensor die Messwerte in vier Bytes zurück. Ich möchte zunächst testweise nur ein Byte lesen. Bisher sendet der Sensor ein Acknowledge bei Address H39. Ist der Sensor angeschlossen, dann kommt als L1 immer nur der Wert zurück, der nach der Address vom Master geschrieben wurde. Hat jemand vielleicht schon Erfahrungen mit diesem Sensor oder eine Tipp für mich? Nachstehend der Code in BASCOM. Gruß Martesy $regfile = "M8def.dat" $crystal = 3686400 $baud = 9600 $lib "i2c_twi.lbx" Config Scl = Portc.5 Config Sda = Portc.4 Dim L1 As Byte I2cinit Config Twi = 50000 Do I2cstart ' Send start sequence I2cwbyte &H72 ' Slave Address from Datasheet I2cwbyte &H0C ' Data Byte mit 8-bit, Command Code ??? I2cstart ' Restart I2cwbyte &H73 ' Slave Address mit R/W = 1 (read) I2crbyte L1 , Nack I2cstop Waitus 350 Print L1 ; Print Wait 1 Loop End
Anbei ist ein Bild vom Oszi. Könnte mir bitte jemand einen Tipp geben? Gruß Martesy Bascom:
1 | |
2 | $regfile = "M8def.dat" |
3 | $crystal = 3686400 |
4 | $baud = 9600 |
5 | $lib "i2c_twi.lbx" |
6 | Config Scl = Portc.5 |
7 | Config Sda = Portc.4 |
8 | |
9 | Dim L1 As Word |
10 | Dim L2 As Word |
11 | |
12 | I2cinit |
13 | Config Twi = 50000 |
14 | Do |
15 | I2cstart ' Send start sequence: Fallende SDA-Flanke wenn SCL high |
16 | I2cwbyte &H72 ' Slave Address from Datasheet Float 0111001 mit R/W low = H72 (=01110010). Read/Write bit0 encoding Read = 1, Write = 0. |
17 | I2cwbyte &H03 ' h03 = power Up ; h00 = Power Down. The Device Is Powered Down. |
18 | I2cstop |
19 | Wait 1 |
20 | I2cstart |
21 | I2cwbyte &H72 |
22 | I2cwbyte &HB11101110 ' Command Code |
23 | I2cstart ' Restart |
24 | I2cwbyte &H73 ' Slave Address Read mit R/W = 1 |
25 | I2crbyte L1 , Ack |
26 | I2crbyte L2 , Nack ' letzte Variable beendet Konversation mit Nack |
27 | I2cstop |
28 | Waitus 350 |
29 | Print L1 ; " " ; L2 ; |
30 | L1 = 0 |
31 | L2 = 0 |
32 | |
33 | Wait 1 |
34 | Loop |
35 | End |
Martesy schrieb: I2cwbyte &H72 I2cwbyte &H80//COMMAND Register CMD = 1 Plus Adresse des Registers 0x0-0xF I2cwbyte &H03 Jedes Register muss zuerst angesprochen werden, dann die Daten senden. In diesem Register müssen auch die Adressierungen eingestellt werden. zB. 80 Byte, Control Register -> Daten 83 Byte Interrupt -> Daten AE Word Datenregister siehe Projekt: Luxmeter mit TSL2561 und Atxmega32a4 http://www.basteln-mit-avr.de Gruß Xmega
xmega schrieb: Code bisschen verrutscht > I2cwbyte &H72 > I2cwbyte &H80 > I2cwbyte &H03 so soll es ausschauen! Gruß Xmega
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.