#include #include // Define the I/O port to be used for the LED. #define LED_PORT PA0 #define LED_DATA_PORT PA3 /* #define send0() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); #define reset() PORTA &= ~(1 << LED_DATA_PORT); _delay_us(50); /**/ /* // normal //Everything is lit up - WRONG //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop \n nop \n nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop \n nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop"); /**/ /* // I/O 1 cycle //Works NOT //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop \n nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop"); /**/ /* // I/O 2 cycles //Works //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop"); /**/ /**/ // I/O 3 cycles //Works //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop"); /**/ /* // I/O 4 cycles //Works //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop \n nop"); PORTA &= ~(1 << LED_DATA_PORT); /**/ /* // I/O 5 cycles //Nothing happens //Send 0 #define send0() PORTA |= (1 << LED_DATA_PORT); PORTA &= ~(1 << LED_DATA_PORT); asm volatile("nop \n nop"); //Send 1 #define send1() PORTA |= (1 << LED_DATA_PORT); asm volatile("nop"); PORTA &= ~(1 << LED_DATA_PORT); /**/ int main(void){ // Set the LED port number as output. DDRA |= (1 << LED_PORT); DDRA |= (1 << LED_DATA_PORT); //Init VCC and GND for the PIR //PORTA |= (1 << VCC_PORT); //PORTA &= ~(1 << GND_PORT); //Init LED data pin with 0 PORTA &= ~(1 << LED_DATA_PORT); int led_1 = 0; while(1){ // Set the LED bit to "1" - LED will be "on". /*PORTA |= (1 << LED_PORT); _delay_ms(500); PORTA &= ~(1 << LED_PORT); _delay_ms(500);*/ //_delay_ms(500); //Try to get the first LED light up red (G8:R8:B8) //for (int i = 0; i < 28; i++) { if ( led_1==0 ) { //LED1 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); } else{ //LED1 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); } //LED2 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); //LED3 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); //LED4 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); //LED5 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); //LED6 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); //LED7 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); //LED8 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); //LED9 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); //LED10 // GREEN send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // RED send0(); send0(); send0(); send0(); send0(); send0(); send0(); send0(); // BLUE send0(); send0(); send0(); send0(); send0(); send0(); send0(); send1(); /**/ // RESET to light up the LED //PORTA |= (1 << LED_DATA_PORT); _delay_us(1); PORTA &= ~(1 << LED_DATA_PORT); _delay_us(50); //PORTA |= (1 << LED_DATA_PORT);/**/ if ( led_1==0 ) { led_1 = 1; } else { led_1 = 0; } _delay_ms(1000); } }