mega 16 & I²C

Gast #852754
Lesenswert?

#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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren