Hallo zusammen,
ich versuche gerade über den I2C Bus zwischen einem Atmega32 und dem
Lichtsensor TSL45315 (Datenblatt im Anhang) über die i2cmaster.h von
Peter Fleury zu kommunizieren.
Um festzustellen, ob die Kommunikation richtig ist möchte ich mir
einfach nur das Highbyte des Sensors auf einem Display anzeigen lassen.
Leider funktioniert das noch nicht so, wie ich mir das vorstelle.
In dem Datenblatt des Lichtsensors befindet sich eine Veranschaulichung
des Protokollaufbaues. Es wird dort angegeben, dass die Slave Adresse
einen 7 Bit Wert darstellt. Jedoch wird im gleichen Dokument die Slave
Adresse mit 0x29 angegeben. Binär wäre es ja somit 0b00101001. Das LSB
wird aber doch als READ/WRITE Bit gesetzt?
Hat jemand zu diesem Problem eine Idee oder Lösung?
Vielen Dank schonmal im Voraus! Untenstehend befindet sich der
Sourcecode im AtmelStudio.
1 | #include <avr/io.h>
|
2 | #define F_CPU 8000000
|
3 | #include <util/delay.h>
|
4 | #include <stdlib.h>
|
5 | #include "i2cmaster.h"
|
6 | #include "lcd-routines.h"
|
7 |
|
8 | #define TSL45315 0x29
|
9 |
|
10 |
|
11 | uint8_t DATAHIGH, DATALOW;
|
12 | char cBuffer;
|
13 |
|
14 |
|
15 | int main(void)
|
16 | {
|
17 |
|
18 | while (1)
|
19 | { /******Einlesen des Lichtsensors TSL4531*****/
|
20 |
|
21 | lcd_init(); // initialize LCD library
|
22 | i2c_init(); // initialize I2C library
|
23 |
|
24 | i2c_start(TSL45315 + I2C_WRITE);
|
25 | i2c_write(0x00);
|
26 |
|
27 | i2c_rep_start(TSL45315 + I2C_READ);
|
28 | DATALOW = i2c_readAck();
|
29 | DATAHIGH = i2c_readNak();
|
30 | i2c_stop();
|
31 |
|
32 | itoa(DATAHIGH,cBuffer,2);
|
33 | lcd_setcursor(0,1);
|
34 | lcd_string(cBuffer);
|
35 |
|
36 |
|
37 | _delay_ms(1000);
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | }// end while
|
43 | }// end main
|