Ovládanie RGB LED cez Processing: Rozdiel medzi revíziami
Z SensorWiki
Riadok 2: | Riadok 2: | ||
− | == | + | == Zadanie == |
Naprogramujte RGB LED v prostredí AVR Studio na vývojovej doske a ovladanú pomocou softvéru Processing.org | Naprogramujte RGB LED v prostredí AVR Studio na vývojovej doske a ovladanú pomocou softvéru Processing.org | ||
− | [[Obrázok: | + | [[Obrázok:700px-UNO_schema_na_zaciatok_stranky.jpg|400px|thumb|center|Vývojová doska Arduino UNO.]] |
'''Literatúra:''' | '''Literatúra:''' | ||
Riadok 17: | Riadok 17: | ||
== Analýza a opis riešenia == | == Analýza a opis riešenia == | ||
− | + | Úloha bola inšpirovaná z cvičenia 7, v ktorom sme pomocou plnenia používali Led diódu. V tomto prípade sme používali RGB diódu OSTAMA51A5A. | |
+ | Postupovali sme nasledovne: | ||
+ | 1. ZAPOJENIE | ||
+ | Podľa datacheetu Ledky [https://senzor.robotika.sk/dtv/OSTAMA51A5A.pdf] sme si naštudovali schému a princíp zapojenia nožičiek diódy a následne zapojili do obvodu. | ||
+ | Schéma zapojenia: | ||
+ | [[Obrázok:700px-UNO_schema_na_zaciatok_stranky.jpg|400px|thumb|center|Vývojová doska Arduino UNO.]] | ||
+ | 2. AVR Studio | ||
+ | Kód, ktorý umožňuje riadiť RGB LED pomocou hodnôt posielaných z Processing aplikácie cez sériovú komunikáciu (UART). | ||
+ | * Zadefinovanie pinov | ||
+ | Červená (Red): PB3 (OCR2A) | ||
+ | Zelená (Green): PB1 (OCR1A) | ||
+ | Modrá (Blue): PB2 (OCR1B) | ||
+ | * Definícia frekvencie CPU: | ||
+ | Definujeme frekvenciu mikrokontroléra na 16 MHz. Táto hodnota sa používa pri výpočtoch času a predeľov v časovačoch. | ||
+ | <tabs> | ||
+ | <tab name="AVR C-code"><source lang="c++" style="background: LightYellow;"> | ||
+ | #define F_CPU 16000000UL | ||
+ | </source></tab> | ||
+ | </tabs> | ||
+ | |||
+ | * Časovače: | ||
+ | Pomocou funkcie setup_timers() inicializujeme časovače Timer1 a Timer2 pre PWM (Pulse Width Modulation). | ||
+ | Timer1 je nastavený pre PWM na pinoch PB1 (OC1A) a PB2 (OC1B). Jeho top hodnota (ICR1) je nastavená na 255, čo umožňuje 8-bitový PWM. | ||
+ | Timer2 je nastavený pre PWM na pine PB3 (OC2A). | ||
+ | |||
+ | * Komunikácia cez UART: | ||
+ | Pomocou funkcie setup_uart() inicializujeme sériovú komunikáciu (UART) na rýchlosť 9600 baud. | ||
+ | Následne sa vypočíta hodnota UBRR (UART Baud Rate Register) na základe frekvencie CPU a požadovanej baudovej rýchlosti. | ||
+ | |||
+ | * Vysielanie a prijímanie pomocou UART: | ||
+ | Pomocou funkcie uart_transmit() budeme odosielať jeden bajt cez UART. Pracuje na princípe, že čaká, kým nie je UART Data Register prázdny, a potom pošle údaje. | ||
+ | Taktiež pomocou funkcie uart_receive() budeme prijímať jeden bajt cez UART. Táto funkcia čaká, kým nie je pripravený nový bajt v UART Data Register, a potom ho vráti. | ||
+ | |||
+ | * Nastavenie výstupných pinov: | ||
+ | Nastavujeme piny PB1, PB2 a PB3 ako výstupné. Tieto piny budú použité na ovládanie RGB LED. | ||
+ | |||
+ | * Povolenie globálnych prerušení: | ||
+ | Na toto použijeme funkciu sei(), tá povolí globálne prerušenia, čo nám umožní obsluhu prerušení. | ||
+ | |||
+ | * Slučka WHILE: | ||
+ | Kód v tejto slučke sa neustále opakuje. | ||
+ | V každom oparkovaní sa prijme hodnota pre červenú, zelenú a modrú z Processing aplikácie cez UART. | ||
+ | Hodnoty sa inverzne upravia (255 - hodnota), pretože farba 255 znamená maximálnu intenzitu a 0 znamená žiadnu intenzitu. | ||
+ | Tieto hodnoty sa potom priradia k PWM registrom pre každú farbu: | ||
+ | OCR2A = red; nastavuje PWM pre červenú LED na PB3. | ||
+ | OCR1B = blue; nastavuje PWM pre modrú LED na PB2. | ||
+ | OCR1A = green; nastavuje PWM pre zelenú LED na PB1. | ||
+ | |||
+ | 3. Processing | ||
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]] | [[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]] |
Verzia zo dňa a času 10:55, 15. máj 2024
Záverečný projekt predmetu MIPS / LS2024 - Šimon Vretenička
Zadanie
Naprogramujte RGB LED v prostredí AVR Studio na vývojovej doske a ovladanú pomocou softvéru Processing.org
Literatúra:
Analýza a opis riešenia
Úloha bola inšpirovaná z cvičenia 7, v ktorom sme pomocou plnenia používali Led diódu. V tomto prípade sme používali RGB diódu OSTAMA51A5A. Postupovali sme nasledovne: 1. ZAPOJENIE Podľa datacheetu Ledky [1] sme si naštudovali schému a princíp zapojenia nožičiek diódy a následne zapojili do obvodu. Schéma zapojenia:
2. AVR Studio Kód, ktorý umožňuje riadiť RGB LED pomocou hodnôt posielaných z Processing aplikácie cez sériovú komunikáciu (UART).
- Zadefinovanie pinov
Červená (Red): PB3 (OCR2A) Zelená (Green): PB1 (OCR1A) Modrá (Blue): PB2 (OCR1B)
- Definícia frekvencie CPU:
Definujeme frekvenciu mikrokontroléra na 16 MHz. Táto hodnota sa používa pri výpočtoch času a predeľov v časovačoch.
#define F_CPU 16000000UL
- Časovače:
Pomocou funkcie setup_timers() inicializujeme časovače Timer1 a Timer2 pre PWM (Pulse Width Modulation).
Timer1 je nastavený pre PWM na pinoch PB1 (OC1A) a PB2 (OC1B). Jeho top hodnota (ICR1) je nastavená na 255, čo umožňuje 8-bitový PWM. Timer2 je nastavený pre PWM na pine PB3 (OC2A).
- Komunikácia cez UART:
Pomocou funkcie setup_uart() inicializujeme sériovú komunikáciu (UART) na rýchlosť 9600 baud. Následne sa vypočíta hodnota UBRR (UART Baud Rate Register) na základe frekvencie CPU a požadovanej baudovej rýchlosti.
- Vysielanie a prijímanie pomocou UART:
Pomocou funkcie uart_transmit() budeme odosielať jeden bajt cez UART. Pracuje na princípe, že čaká, kým nie je UART Data Register prázdny, a potom pošle údaje. Taktiež pomocou funkcie uart_receive() budeme prijímať jeden bajt cez UART. Táto funkcia čaká, kým nie je pripravený nový bajt v UART Data Register, a potom ho vráti.
- Nastavenie výstupných pinov:
Nastavujeme piny PB1, PB2 a PB3 ako výstupné. Tieto piny budú použité na ovládanie RGB LED.
- Povolenie globálnych prerušení:
Na toto použijeme funkciu sei(), tá povolí globálne prerušenia, čo nám umožní obsluhu prerušení.
- Slučka WHILE:
Kód v tejto slučke sa neustále opakuje. V každom oparkovaní sa prijme hodnota pre červenú, zelenú a modrú z Processing aplikácie cez UART. Hodnoty sa inverzne upravia (255 - hodnota), pretože farba 255 znamená maximálnu intenzitu a 0 znamená žiadnu intenzitu.
Tieto hodnoty sa potom priradia k PWM registrom pre každú farbu: OCR2A = red; nastavuje PWM pre červenú LED na PB3. OCR1B = blue; nastavuje PWM pre modrú LED na PB2. OCR1A = green; nastavuje PWM pre zelenú LED na PB1.
3. Processing
Nezabudnite doplniť schému zapojenia!
Algoritmus a program
Algoritmus programu je....
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.zip
Overenie
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.