Forum: Mikrocontroller und Digitale Elektronik Atmega64 -> TWI -> TC74


von Andreas (Gast)


Lesenswert?

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?

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
Noch kein Account? Hier anmelden.