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