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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren