I2C funkt nicht auf dem ATmega8 (ATmega128)

OP #726043
Lesenswert?
• ▲
▼
Ich finde keinen Fehler an meinem Code

Im ersten schritt stelle ich die Baudrate ein, und dann sollte es los 
gehen ...

Im Debuger sehe ich, dass das TWINT Bit nicht gesetzt oder gleich wieder 
auf 0 gesetzt wird

somit bleibt das programm schon in der ersten while schleife hängen:
1
  TWSR = 0;                         // no prescaler 
2
   TWBR = ( ( (F_CPU/SCL_CLOCK)-16 )/2 );  // must be > 10 for stable operation
3
  while (1)      //Endlosschleife
4
  {
5
    
6
    // send START condition
7
    //TWCR = 0x00 | (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
8
    TWCR = 0x00;
9
    TWCR |= (1<<TWEN);
10
    TWCR |= (1<<TWINT);
11
    TWCR |= (1<<TWSTA);
12
    
13
    
14
    asm("nop");
15

16
    // wait until transmission completed
17
    while(!(TWCR & (1<<TWINT)));
18

19
    // check value of TWI Status Register. Mask prescaler bits.
20
    twst = TW_STATUS & 0xF8;
21
    if ( (twst != TW_START) && (twst != TW_REP_START)) PORTD = 0x01;
22

23

24

25
    // send device address
26
    TWDR = address;
27
    TWCR = (1<<TWINT) | (1<<TWEN);
28

29
    // wail until transmission completed and ACK/NACK has been received
30
    while(!(TWCR & (1<<TWINT)));
31

32
    // check value of TWI Status Register. Mask prescaler bits.
33
    twst = TW_STATUS & 0xF8;
34
    if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) PORTD = 0x02;
35

36

37

38
    // send data to the previously addressed device
39
    TWDR = 0xF0;
40
    TWCR = (1<<TWINT) | (1<<TWEN);
41

42
    // wait until transmission completed
43
    while(!(TWCR & (1<<TWINT)));
44

45
    // check value of TWI Status Register. Mask prescaler bits
46
    twst = TW_STATUS & 0xF8;
47
    if( twst != TW_MT_DATA_ACK) PORTD = 0x04;
48

49

50

51
    //send stop condition
52
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
53
  
54
    // wait until stop condition is executed and bus released
55
    while(TWCR & (1<<TWSTO));


lg und danke im voraus

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.