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); } }






Zitieren

Lesezeichen