Hallo,
ich habe ein kleines Problem mit meinem Atmega64 + einem
Temperatursensor (TC74), welcher über I2C angeschlossen ist.
1 | int START = 0x08;
|
2 | int MT_SLA_ACK = 0x40;
|
3 | int MT_DATA_ACK = 0x50;
|
4 | char temperaturgemessen;
|
5 |
|
6 | void Error(){
|
7 |
|
8 | cursorPostionLCD_XY(0,4);
|
9 | schreibeLCD("Fehler");
|
10 |
|
11 | }
|
12 |
|
13 | int main(void)
|
14 | {
|
15 |
|
16 | portDefine();
|
17 |
|
18 | cursorPostionLCD_XY(0,1);
|
19 | schreibeLCD("START");
|
20 |
|
21 | //TWI Start
|
22 | TWBR = 0xAA;
|
23 |
|
24 | schreibeLCD("0"); _delay_ms(500);
|
25 |
|
26 | TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
|
27 |
|
28 | schreibeLCD("1");_delay_ms(500); //Sendet Start
|
29 |
|
30 | while(!(TWCR & (1<<TWINT))) //Wartet bis Startbit übertragen
|
31 |
|
32 | if ((TWSR & 0xF8) != START) //Statusregister wird überprüft
|
33 |
|
34 | schreibeLCD("2"); _delay_ms(500);
|
35 |
|
36 | TWDR = 0b10011010; //SLA_W bzw. SLA_R wird geladen
|
37 | TWCR =(1<<TWINT) | (1<<TWEN); //Übertragung vorbereiten
|
38 | while(!(TWCR & (1<<TWINT))) //Wartet bis Übertragung abgeschlossen
|
39 |
|
40 | schreibeLCD("3"); _delay_ms(500);
|
41 |
|
42 | if((TWSR & 0xF8) != MT_SLA_ACK) //Übertragung wird überprüft
|
43 |
|
44 | TWDR = 0x00;
|
45 |
|
46 | schreibeLCD("4"); _delay_ms(500);
|
47 |
|
48 | TWCR = (1<<TWINT) | (1<<TWEN); //Datenübertragung starten
|
49 | while (!(TWCR & (1<<TWINT))) //Wartet bis Datenübertragung zu ende
|
50 |
|
51 | schreibeLCD("5"); _delay_ms(500);
|
52 |
|
53 | if((TWSR & 0xF8) != MT_DATA_ACK) //Datenübertragung erfolgt?
|
54 | Error();
|
55 |
|
56 | schreibeLCD("6"); _delay_ms(500);
|
57 |
|
58 | temperaturgemessen = TWDR; //Data wird geladen
|
59 | TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
|
60 |
|
61 | schreibeLCD("7"); _delay_ms(500); //Übertragung abgeschlossen
|
62 |
|
63 | //TWI Ende
|
64 |
|
65 | cursorPostionLCD_XY(0,4);
|
66 | schreibeLCD("ergebnis:"); _delay_ms(500);
|
67 | schreibeLCD(temperaturgemessen); _delay_ms(500); _delay_ms(500);
|
68 |
|
69 | return 0;
|
70 | }
|
So sieht mein C-Code aus. Leider durchläuft er ihn nicht vollständig
durch. Das Display gibt noch die Zahl 2 aus, danach blinkt Start nur
noch. Also irgendwie bricht er an der Stelle ab und startet stets von
vorne?
Was könnte das sein bzw. was mache ich falsch?