/* * Project name: Demo4_5 : PWM with timer 1 Fast PWM mode at PORTB.5, PB.6 en PB.7 parallel, 3x, for RGB LED * Author: Avans-TI, JW * Revision History: 20101230: - initial release; * Description: This program gives an interrupt on each ms * Test configuration: MCU: ATmega128 Dev.Board: BIGAVR6 Oscillator: External Clock 08.0000 MHz Ext. Modules: - SW: AVR-GCC * NOTES: - Turn ON the PORT LEDs at SW12.1 - SW12.8 */ #define F_CPU 8000000 #include #include #include #include "lcd.h" #define BIT(x) (1 << (x)) unsigned int sCount=0, minutes=0, hours=0; // wait(): busy waiting for 'ms' millisecond // Used library: util/delay.h void wait( int ms ) { for (int tms=0; tms=0; red-=delta) { setRed( red ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps down wait(100); // delay of 100 ms (busy waiting) } for (int green = 255; green>=0; green-=delta1) { setGreen( green ); // 8-bits PWM on pin OCR1a delta1 -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int red = 0; red<=255; red+=delta) { setRed( red ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int blue = 255; blue>=0; blue-=delta2) { setBlue( blue ); // 8-bits PWM on pin OCR1a delta2 -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } } } // Main program: Counting on T1 int OpgaveB22( void ) { DDRB = 0xFF; // set PORTB for compare output timer1Init(); wait(100); while (1) { int delta = 1; setRed (0); setBlue(0); setGreen(0); // change some colors // RED for (int red = 0; red<=255; red+=delta) { setRed( red ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int red = 255; red>=0; red-=delta) { setRed( red ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps down wait(100); // delay of 100 ms (busy waiting) } setRed( 0 ); delta = 1; wait(100); // GREEN for (int green = 0; green<=255; green+=delta) { setGreen( green ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int green = 255; green>=0; green-=delta) { setGreen( green ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } setGreen( 0 ); delta = 1; wait(100); // BLUE for (int blue = 0; blue<=255; blue+=delta) { setBlue( blue ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int blue = 255; blue>=0; blue-=delta) { setBlue( blue ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } setBlue( 0 ); delta = 1; wait(100); // YELLOW for (int yellow = 0; yellow<=255; yellow+=delta) { setBlue( yellow ); setGreen( yellow ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int yellow = 255; yellow>=0; yellow-=delta) { setBlue( yellow ); setGreen( yellow ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } setBlue( 0 ); setGreen( 0 ); delta = 1; wait(100); // WHITE for (int white = 0; white<=255; white+=delta) { setBlue( white ); setRed( white ); setGreen( white ); // 8-bits PWM on pin OCR1a delta += 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } for (int white = 255; white>=0; white-=delta) { setBlue( white ); setRed( white ); setGreen( white ); // 8-bits PWM on pin OCR1a delta -= 2; // progressive steps up wait(100); // delay of 100 ms (busy waiting) } setBlue( 0 ); setGreen( 0 ); setRed( 0 ); delta = 1; wait(100); } }