Ich bins nochmal wieder....
Folgendes Programm läuft soweit einwandfrei:
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);
}
}
doch wenn ich den Programmteil für das Datenempfangen in eine eigene Funktion stecke, kriege ich nicht mehr den selben Wert:
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);
}
}
Was mache ich falsch?
Gruss Jey
Lesezeichen