Ich bins nochmal wieder....
Folgendes Programm läuft soweit einwandfrei:
doch wenn ich den Programmteil für das Datenempfangen in eine eigene Funktion stecke, kriege ich nicht mehr den selben Wert:Code:int main(void) { uint8_t output; uint8_t status; uint8_t data; unsigned char buffer[10]; lcd_init(LCD_DISP_ON); // LCD initialisieren twi_slave_init(); // TWI Slave initialisieren while(1) { while(!(TWCR & 0b10000000)); //solange warten, bis was ankommt status = TWSR; // Status abfragen.. TWCR &=~ (1<<TWINT); //TWINT auf 0 setzten damit TWI wieder arbeitet TWCR |= (1<<TWEA); //TWEA auf 1 setzten um Ack zu senden if(TWSR == 128) { data = TWDR; } lcd_gotoxy(0,0); lcd_puts(itoa(data, buffer, 2)); lcd_gotoxy(13,0); lcd_puts(itoa(data, buffer, 10)); _delay_ms(300); } }
Was mache ich falsch?Code:uint8_t twi_slave_recive(void) { uint8_t status; uint8_t data; while(!(TWCR & 0b10000000)); //solange warten, bis was ankommt status = TWSR; // Status abfragen.. TWCR &=~ (1<<TWINT); //TWINT auf 0 setzten damit TWI wieder arbeitet TWCR |= (1<<TWEA); //TWEA auf 1 setzten um Ack zu senden if(TWSR == 128) { data = TWDR; } return data; } int main(void) { uint8_t output; uint8_t status; uint8_t data; unsigned char buffer[10]; lcd_init(LCD_DISP_ON); // LCD initialisieren twi_slave_init(); // TWI Slave initialisieren while(1) { data = twi_slave_recive(); lcd_gotoxy(0,0); lcd_puts(itoa(data, buffer, 2)); lcd_gotoxy(13,0); lcd_puts(itoa(data, buffer, 10)); _delay_ms(300); } }
Gruss Jey







Zitieren

Lesezeichen