Soo ich denk ich hab das Programm fertig^^.
Könnte das funktionieren oder hab ich was grundlegendes verpeilt?!?
Code:
#include <avr/twi.h>
#include <avr/delay.h>
#define MESSUNG 0x51
#define SRF10_1 0xE0
#define AUSGABE 0xFF
void i2c_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Sende START Bedingung
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
}
void i2c_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //STOP signal (kann jederzeit benutzt werden)
}
int i2c_read(int adresse,int anweisung)
{
i2c_start();
TWDR = adresse; //Byte in Daten-Register schreiben + LESEN
TWCR = (1<<TWINT)|(1<<TWEN); //Starte Übertragung
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
TWDR = anweisung; //Byte in Daten-Register schreiben
TWCR = (1<<TWINT)|(1<<TWEN); //Starte Übertragung
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
TWCR = (1<<TWINT)|(1<<TWEN); //Byte von Slave empfangen
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
int byte = TWDR;
i2c_stop();
return byte;
}
void i2c_send(int adresse,int anweisung)
{
i2c_start();
TWDR = adresse + 1; //Byte in Daten-Register schreiben + SCHREIBEN
TWCR = (1<<TWINT)|(1<<TWEN); //Starte Übertragung
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
TWDR = anweisung; //Byte in Daten-Register schreiben
TWCR = (1<<TWINT)|(1<<TWEN); //Starte Übertragung
while(!(TWCR&(1<<TWINT))) //Warte bis Übertragung beendet ist
;
i2c_stop();
}
void main(void)
{
int value;
initLcdUart();
rprintf("init done!");
while(1)
{
i2c_send(SRF10_1,MESSUNG);
delay_ms(100);
value = i2c_read(SRF10_1;AUSGABE);
rprintf("value: %i", value);
delay_ms(500);
}
}
Lesezeichen