Hi Klucky...
Ich habe mir mal die twi.h angeschaut..
da wird START mit TW_START u. MT_SLA_ACK mit TW_MT_SLA_ACK
MT_DATA_ACK mit TW_MT_DATA_ACK
Deklariert
hoffe es hilft....
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <avr/twi.h>
#include <stdlib.h> /*für exit*/
/*SD20 Adresse mit Lese- oder Schreibbit*/
#define SD20_W 0xC2
#define SD20_R 0xC3
typedef unsigned char BYTE;
typedef unsigned short WORD;
void i2c_start(BYTE ADRESSE)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); /*Startbedingung senden*/
while (!(TWCR & (1<<TWINT))); /*Darauf warten dass TWINT gesetzt wurde was aussagt das die Startbedingung gesendet wurde*/
if ((TWSR & 0xF8) != TW_START) exit; /*Überprüfen ob START erfolgreich gesendet wurde sonst abbrechen*/
TWDR = ADRESSE; /*Slave Adresse in TWDR laden*/
TWCR = (1<<TWINT)|(1<<TWEN); /*TWINT und TWEN löschen damit die ADRESSE gesendet wird*/
while (! (TWCR & (1<<TWINT))); /*Darauf warten dass TWINT gesetzt wurde was aussagt dass die ADRESSE gesendet wurde*/
if ((TWSR & 0xF8) != TW_MT_SLA_ACK) exit; /*Überprüfen ob ADRESSE erfolgreich gesendet wirde sonst abbrechen*/
}
void i2c_data(BYTE DATA)
{
TWDR = DATA; /*DATA in TWDR laden*/
TWCR = (1<<TWINT)|(1<<TWEN); /*TWINT und TWEN löschen damit die DATA gesendet wird*/
while (! (TWCR & (1<<TWINT))); /*Darauf warten dass TWINT gesetzt wurde was aussagt dass die DATA gesendet wurde*/
if ((TWSR & 0xF8) != TW_MT_DATA_ACK) exit; /*Überprüfen ob DATA erfolgreich gesendet wirde sonst abbrechen*/
}
void i2c_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); /*Stopbedingung senden*/
}
int main(void)
{
i2c_start(SD20_W);
i2c_data(0x7F);
i2c_stop();
}
mfg uwe
Lesezeichen