//Steuerung für LED-Himmel //Slave-Anwendung //PWM Steuerung #include #include #include #include #include #include #include //#include int main(); void Timer1_init(); void bubblesort(); void Dimm(); void updatemask(); unsigned char SPI_SlaveReceive(void); void SPI_SlaveInit(void); void receive(void); unsigned int LEDParameter[30]; //unsigned int unsorted[30]; unsigned char dimm = 0; unsigned char ID = 10; unsigned char m = 0; unsigned char n = 0; unsigned char buffer1=0; unsigned char buffer2=0; unsigned char dimmhel=0; unsigned char s = 0; unsigned char maskPORTA[100]; unsigned char maskPORTB[100]; unsigned char maskPORTC[100]; unsigned char maskPORTD[100]; #define SPISCK PB7 #define SPIMOSI PB5 #define SPIMISO PB6 #define SPISS PB4 //unsigned char spirecive[40]; int main() { //Port als Ausgang deklarieren DDRA = 0xFF; DDRB = 0xFF; DDRC = 0xFF; DDRD = 0xFF; PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; SPI_SlaveInit(); //eeprom_write_byte(10, 0); //######################################### //PORTA LEDParameter[0] = (1 << 8); LEDParameter[0] = LEDParameter[0] + 0b00000001; LEDParameter[1] = (1<< 8); LEDParameter[1] = LEDParameter[1] + 0b00000010; LEDParameter[2] = (1 << 8); LEDParameter[2] = LEDParameter[2] + 0b00000100; LEDParameter[3] = (1 << 8); LEDParameter[3] = LEDParameter[3] + 0b00001000; LEDParameter[4] = (1 << 8); LEDParameter[4] = LEDParameter[4] + 0b00010000; LEDParameter[5] = (1 << 8); LEDParameter[5] = LEDParameter[5] + 0b00100000; LEDParameter[6] = (1 << 8); LEDParameter[6] = LEDParameter[6] + 0b01000000; LEDParameter[7] = (1<< 8); LEDParameter[7] = LEDParameter[7] + 0b10000000; //############################################ //######################################### //PORTC LEDParameter[8] = (1 << 8); LEDParameter[8] = LEDParameter[8] + 0b00000001; LEDParameter[9] = (1 << 8); LEDParameter[9] = LEDParameter[9] + 0b00000010; LEDParameter[10] = (1 << 8); LEDParameter[10] = LEDParameter[10] + 0b00000100; LEDParameter[11] = (1 << 8); LEDParameter[11] = LEDParameter[11] + 0b00001000; LEDParameter[12] = (1 << 8); LEDParameter[12] = LEDParameter[12] + 0b00010000; LEDParameter[13] = (1<< 8); LEDParameter[13] = LEDParameter[13] + 0b00100000; LEDParameter[14] = (1 << 8); LEDParameter[14] = LEDParameter[14] + 0b01000000; LEDParameter[15] = (1 << 8); LEDParameter[15] = LEDParameter[15] + 0b10000000; //######################################### //######################################### //PORTD LEDParameter[16] = (1 << 8); LEDParameter[16] = LEDParameter[16] + 0b00000001; LEDParameter[17] = (1 << 8); LEDParameter[17] = LEDParameter[17] + 0b00000010; LEDParameter[18] = (1<< 8); LEDParameter[18] = LEDParameter[18] + 0b00000100; LEDParameter[19] = (1 << 8); LEDParameter[19] = LEDParameter[19] + 0b00001000; LEDParameter[20] = (1 << 8); LEDParameter[20] = LEDParameter[20] + 0b00010000; LEDParameter[21] = (1 << 8); LEDParameter[21] = LEDParameter[21] + 0b00100000; LEDParameter[22] = (1 << 8); LEDParameter[22] = LEDParameter[22] + 0b01000000; LEDParameter[23] = (1<< 8); LEDParameter[23] = LEDParameter[23] + 0b10000000; //######################################### //PORTB LEDParameter[24] = (1 << 8); LEDParameter[24] = LEDParameter[24] + 0b00000001; LEDParameter[25] = (1 << 8); LEDParameter[25] = LEDParameter[25] + 0b00000010; LEDParameter[26] = (1 << 8); LEDParameter[26] = LEDParameter[26] + 0b00000100; LEDParameter[27] = (1 << 8); LEDParameter[27] = LEDParameter[27] + 0b00001000; //bubblesort(); //Alle auf null initialisieren for(m=0;m<=99;m++) { maskPORTA[m] = 0; maskPORTB[m] = 0; maskPORTC[m] = 0; maskPORTD[m] = 0; } for(m=0;m<=27;m++) { buffer1 = 2; buffer2 = LEDParameter[m]; LEDParameter[m] = (buffer1 << 8); LEDParameter[m] = LEDParameter[m] + buffer2; } updatemask(); Timer1_init(); TIMSK |= (1<> 8)) > m) { maskPORTA[m] |= LEDParameter[n]; }; } } for(m=0;m<=99;m++) { maskPORTC[m] = 0; for(n=7;n<=15;n++) { if(((LEDParameter[n] >> 8)) > m) { maskPORTC[m] |= LEDParameter[n]; }; } } for(m=0;m<=99;m++) { maskPORTD[m] = 0; for(n=16;n<=23;n++) { if(((LEDParameter[n] >> 8)) > m) { maskPORTD[m] |= LEDParameter[n]; }; } } for(m=0;m<=99;m++) { maskPORTB[m] = 0; for(n=24;n<=27;n++) { if(((LEDParameter[n] >> 8)) > m) { maskPORTB[m] |= LEDParameter[n]; }; } } } void receive() { SPCR = (1<