Hallo, ich habe 2 Atmega8 über TWI verbunden und verwende folgendes Programm, jedoch tut sich bei dem Slave nichts... währe super wenn einer von euch mit vlt. helfen könnte Slave:
1 | #define F_CPU 1000000
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | |
6 | |
7 | void twi_init() |
8 | {
|
9 | // 10khz
|
10 | TWBR = 10; |
11 | TWSR = 1; |
12 | |
13 | // Meine Adresse
|
14 | TWAR = 50; |
15 | |
16 | // TWI aktivieren
|
17 | TWCR = (1<<TWEN | 0<<TWSTO | 1<<TWSTA); |
18 | }
|
19 | |
20 | |
21 | int main(void) |
22 | {
|
23 | // PortB als Eingang
|
24 | DDRB = (1<<0 | 1<<1 | 1<<2 | 1<<3); |
25 | |
26 | // TWI Init
|
27 | twi_init(); |
28 | _delay_ms(500); |
29 | |
30 | while(1) |
31 | {
|
32 | PORTB = TWDR; |
33 | }
|
34 | }
|
Der master
1 | #define F_CPU 1000000
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | |
6 | |
7 | void twi_init() |
8 | {
|
9 | // 10khz
|
10 | TWBR = 10; |
11 | TWSR = 1; |
12 | }
|
13 | |
14 | void send(unsigned char daten) |
15 | {
|
16 | // Startbedingung
|
17 | TWCR = ((1<<TWINT) | (1<<TWSTA) | (1<<TWEN)); |
18 | |
19 | // Warten
|
20 | while(!(TWCR &(1<<TWINT))); |
21 | |
22 | // Adresse von dem Slave auf dem Bus senden
|
23 | TWDR = 50; |
24 | TWCR = ((1<<TWINT) | (1<<TWEN)); |
25 | while(!(TWCR &(1<<TWINT))); |
26 | |
27 | //Daten senden
|
28 | TWDR = daten; |
29 | TWCR = ((1<<TWINT) | (1<<TWEN)); |
30 | while(!(TWCR &(1<<TWINT))); |
31 | |
32 | // Stopp senden
|
33 | TWCR = ((1<<TWINT) | (1<<TWSTO) | (1<<TWEN)); |
34 | }
|
35 | |
36 | int main(void) |
37 | {
|
38 | // Variablen
|
39 | unsigned char zustand; |
40 | |
41 | // PortB als Eingang
|
42 | DDRB = 0; |
43 | |
44 | // TWI Init
|
45 | twi_init(); |
46 | _delay_ms(500); |
47 | |
48 | while(1) |
49 | {
|
50 | // Status von PortB abfragen
|
51 | zustand = PINB; |
52 | |
53 | send(zustand); |
54 | |
55 | _delay_ms(100); |
56 | }
|
57 | }
|