Hallo,
mache grade erste Gehversuche mit TWI. Es soll eine Speicheradresse
eines ICs ausgelesen werden.
Leider hängt das Programm in dieser Subfunktion (siehe Pfeil):
1 | #define BASEADR 0x19 // Basisadresse lt. Datenblatt: 0011001
|
2 | #define TW_READ 1 // LSB bei Busadresse zur Kennzeichnung eines Lesezugriffes
|
3 | #define TW_WRITE 0 // LSB bei Busadresse zur Kennzeichnung eines Schreibzugriffes
|
4 |
|
5 | ...
|
6 |
|
7 |
|
8 | /**
|
9 | @brief Byte aus EEPROM von Adresse lesen
|
10 | @param Adresse
|
11 | @return Datenbyte
|
12 | */
|
13 |
|
14 | uint8_t EEPROM_ByteRead(uint16_t addr)
|
15 | {
|
16 | uint8_t wert;
|
17 |
|
18 | i2c_start();
|
19 | i2c_send(BASEADR | TW_WRITE); <--- *** an dieser Stelle haengt das Programm ***
|
20 |
|
21 | // i2c_send(addr >> 8, 0); // bei 16-Bit Adressierung HSB zuerst
|
22 | i2c_send(addr);
|
23 |
|
24 | i2c_start();
|
25 | i2c_send(BASEADR | TW_READ);
|
26 | wert = i2c_receive(0);
|
27 | i2c_stop();
|
28 | return wert;
|
29 | }
|
Der Controller ist ein M168 und und verwendet wird AVR-Studio 4.19/GCC.
Der IC ist ein Beschleunigungssensor und kein Eeprom.
Im Anhang ist der vollständige Beispiel-Code für das Eeprom, an dem ich
mich orientiere.
Kann man an dem geposteten Code schon absehen, wo der Fehler liegt?
Ansonsten kann ich später auch den von mit veränderten Code-Teil
(Änderungen nur in der Main-Funktion vorgenommen) posten (ist auf einem
anderen Rechner).