#define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include // AVR Register und Konstantendefinitionen #include #include #include #include int main(void) //R0: Umgebungstemp. //R1-R8: Temp. Pixel 1 - 8 //R9: Softwarerevision { uint8_t i,zw; uint8_t data[10]; sbi (DDRC,0); //TWI enable TWCR = (TWCR | (1 << TWEN)); //Einstellen des I²C-Taktes //~ 100 kHz TWBR = 0x0A; TWSR = TWSR & ~((1 << TWPS0) | (1 << TWPS1)); //TWPS = 1 for (;;) { //Senden der Start-Bedingung TWCR = ((1 << TWSTA) | (1 << TWINT) | (1 << TWEN)); //Warten, bis TWINT-Bit gesetzt ist while (!(TWCR & (1 << TWINT))); //Senden der Adresse TWDR = 0xD0; TWCR = ((1 << TWINT) | (1 << TWEN)); //Warten, bis TWINT-Bit gesetzt ist (=0) while (!(TWCR & (1 << TWINT))); //Senden der Daten TWDR = 0x00; TWCR = ((1 << TWINT) | (1 << TWEN)); //Warten, bis TWINT-Bit gesetzt ist (=0) while (!(TWCR & (1 << TWINT))); //Senden der Repeated-Start-Bedingung (identisch zur Start-Bedingung) TWCR = ((1 << TWSTA) | (1 << TWINT) | (1 << TWEN)); //Warten, bis TWINT-Bit gesetzt ist while (!(TWCR & (1 << TWINT))); //Senden der Adresse mit gesetzten WRITE-Bit TWDR = 0xD0 + 1; TWCR = ((1 << TWINT) | (1 << TWEN)); //Warten, bis TWINT-Bit gesetzt ist (=0) while (!(TWCR & (1 << TWINT))); TWCR = ((1 << TWINT) | (1 << TWEA) | (1 << TWEN)); while (!(TWCR & (1 << TWINT))); i=0; while (i < 9) { TWCR = ((1 << TWINT) | (1 << TWEA) | (1 << TWEN)); while (!(TWCR & (1 << TWINT))); data[i] = TWDR; i++; } if(zw>10) //Bedingung 10° { sbi (PORTC,0); //LED on, } zw=0; for(i=1;i<9;i++) { if(zw