Gast
#852754
#include <avr/io.h>
#define Takt 3686400UL
#define AUSAD 0x70
#define EINAD 0x71
#define FAKTOR 44
#define TEILER 1
void init(unsigned char faktor, unsigned char teiler)
{
TWBR = faktor;
TWSR = teiler;
}
void send(unsigned char adres, unsigned char daten)
{
TWCR =(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR =adres;
TWCR =(1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR =daten;
TWCR =(1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWCR =(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}
unsigned char empf(unsigned char adres)
{
unsigned char daten;
TWCR =(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWDR =adres;
TWCR =(1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWCR =(1<<TWINT)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
daten =TWDR;
TWCR =(1<<TWINT)|(1<<TWEA)|(1<<TWEN);
loop_until_bit_is_set(TWCR, TWINT);
TWCR =(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
return daten;
}
void main (void)
{
unsigned char awert, ewert;
DDRB = 0xff;
init(FAKTOR, TEILER);
while(1);
{
awert = PIND;
send (AUSAD, ~awert);
ewert = empf(EINAD);
PORTB = ewert;
}
}
hi ich hab den quell text einfach mal aus nem buch abgetippt...und keine
funktion,
mim oskar mal geschaut da tut sich weder auf daten noch auf der takt
leitung was,
pull up's mit 2mal 10k sind drinne, hat wer noch ne idee?
fuse bits für den I²C muss man nicht setzten oder?