guten abend an alle. ich hab ein problem beim auslesen der resigster vom
SRF02 Ultraschallsensor. ich verwende den sensor über twi an einem
atmega128 und 16mhz. für TWBR habe ich 72 eigetragen.
die funktion bleib an der kommentierten stelle hängen und läuft nicht
merh weiter. kann mir da jemand weiterhelfen, wie ich über twi die
register auslesen kann??? alleine finde ich den fehler leider nicht.
das übertragen mit einer anderen funktion läuft ohne problme, nur am
empfangen gibt es schwierigkeiten.
1 | //Funktionsaufruf:
|
2 | range = i2c_read(0xE0,2) <<8;
|
3 | range += i2c_read(0xE0,3);
|
1 | char i2c_read(char address, char reg)
|
2 | {
|
3 | char read_data = 0;
|
4 |
|
5 | TWCR = 0xA4; // send a start bit on i2c bus
|
6 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
7 | TWDR = address; // load address of i2c device
|
8 | TWCR = 0x84; // transmit
|
9 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
10 | TWDR = reg; // send register number to read from
|
11 | TWCR = 0x84; // transmit
|
12 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
13 | TWCR = 0xA4; // send repeated start bit
|
14 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
15 | TWDR = address+1; // transmit address of i2c device with readbit set
|
16 | TWCR = 0xC4; // clear transmit interupt flag
|
17 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
18 |
|
19 | ///////////////////ab hier geht es dann nicht mehr weiter
|
20 | TWCR = 0x84; // transmit, nack (last byte request)
|
21 | while(!(TWCR & 0x80)); // wait for confirmation of transmit
|
22 | read_data = TWDR; // and grab the target data
|
23 | TWCR = 0x94; // send a stop bit on i2c bus
|
24 | return read_data;
|
25 | }
|