From 2992b00471b122ecd3b08f266ba493e00a268894 Mon Sep 17 00:00:00 2001 From: hugo LAMY Date: Mon, 10 Mar 2025 13:26:01 +0100 Subject: [PATCH] mod03 ex02 ok --- module03/ex02/main.c | 81 +++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/module03/ex02/main.c b/module03/ex02/main.c index eb3783d..c5f256e 100644 --- a/module03/ex02/main.c +++ b/module03/ex02/main.c @@ -5,40 +5,65 @@ #include "utils.h" #include "bitmanip.h" +void init_rgb(); -void rgb_d5_roll_colors() { +void set_rgb(uint8_t r, uint8_t g, uint8_t b); + +void wheel(uint8_t pos) { + pos = 255 - pos; + if (pos < 85) { + set_rgb(255 - pos * 3, 0, pos * 3); + } else if (pos < 170) { + pos = pos - 85; + set_rgb(0, pos * 3, 255 - pos * 3); + } else { + pos = pos - 170; + set_rgb(pos * 3, 255 - pos * 3, 0); + } +} + +// Table 14-9 : Port D Pins Alternate Functions +// OC2B (PD3) : Red +// OC0B (PD5) : Green +// OC0A (PD6) : Blue +void init_rgb() { MODE_OUTPUT(RGB5_RED); MODE_OUTPUT(RGB5_GEEN); MODE_OUTPUT(RGB5_BLUE); - while(1) { - // RED - PORTD = (1< PD6) + TCCR0A |= (1 << COM0B1); // Table 15-6 : GREEN - Timer0 Non-inverting mode for Green (OC0B -> PD5) + TCCR2A |= (1 << COM2B1); // Table 18-6 : RED - Timer2 Non-inverting mode for Red (OC2B -> PD3) + + TCCR0B |= (1 << CS01); // Table 15-9 : Prescaler 8 → ~8kHz PWM frequency + TCCR2B |= (1 << CS21); // Table 18-9 : Prescaler 8 → ~8kHz PWM frequency + + OCR0A = 0; // Blue OFF + OCR0B = 0; // Green OFF + OCR2B = 0; // Red OFF } -// led RGB D5 must turns on in a loop of colors: red, green, blue, yellow, cyan, magenta, white +void set_rgb(uint8_t r, uint8_t g, uint8_t b) { + OCR2B = r; // Red (PD3, Timer2 OCR2B) + OCR0B = g; // Green (PD5, Timer0 OCR0B) + OCR0A = b; // Blue (PD6, Timer0 OCR0A) +} + +// led RGB D5 must turns on in a loop of colors using PWM int main() { + init_rgb(); - while(1) { - rgb_d5_roll_colors(); - } + uint8_t pos = 0; + while (1) { + wheel(pos); // Set color based on wheel position + _delay_ms(10); // Small delay for smooth transition + pos++; // Increment color position + } }