Hi Leutz,
ich hab da ein Problem mit der TWI Kommunikation!
Meine 2 Atmega32 sind über 2 Kabel verbunden(SDA - SDA / SCL -SCL)
diese jeweils über nen 10KOhm zu VCC. Desweiteren hängt an jedem der µC an PortB 0 eine LED + Widerstand gegen GND.
Hier der Mastercode:
und hier der Slavecode:Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned volatile char slave_adresse, daten, error; int twi_start(void); int twi_adresse(void); int twi_daten(void); void twi_stop(void); int main(void) { DDRB = 0x00; TWAR = 0x01; TWBR = 0xC; slave_adresse = 0x02; daten = 0x03; for(;;) { error = twi_start(); error = twi_adresse(); error = twi_daten(); if(error == 1) { PORTB = (1<<PB0); } else { PORTB &= ~(1<<PB0); } } } int twi_start(void) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while (!(TWCR & (1<<TWINT))); if ((TWSR & 0xF8) == 0x08) { return 0; } else { return 1; } } int twi_adresse(void) { TWDR = slave_adresse; TWCR = (1<<TWINT)|(1<<TWEN); while(!(TWCR & (1<<TWINT))); if ((TWSR & 0xF8) == 0x18) { return 0; } else { return 1; } } int twi_daten(void) { TWDR = daten; TWCR = (1<<TWINT)|(1<<TWEN); while(!(TWCR & (1<<TWINT))) if ((TWSR & 0xF8) == 0x28) { return 0; } else { return 1; } } void twi_stop(void) { TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); }
ich hoffe jemand blickt den Code und kann mir helfen! Helft mir!Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned volatile char slave_adresse, daten; int main(void) { sei(); DDRB = 0xFF; PORTB &= ~(1<<PB0); TWAR = 0x02; TWBR = 0xC; TWCR = (1<<TWEA)|(1<<TWEN); TWSR &= 0b11111100; for(;;) { if(daten == 0x03) { PORTB = (1<<PB0); } else { PORTB &= ~(1<<PB0); } } } SIGNAL (SIG_2WIRE_SERIAL) { if((TWSR & 0b11111000) == 0x80) { daten = TWDR; } TWCR |= (1<<TWINT); }
Gruß Michi







Zitieren

Lesezeichen