Operácie

Ovládanie RGB LED cez Processing: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
Riadok 2: Riadok 2:




== Ovládanie RGB LED cez Processing ==
== 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:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
[[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 ==


Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Ú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 z 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

Súbor:700px-UNO schema na zaciatok stranky.jpg
Vývojová doska Arduino UNO.

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:

Súbor:700px-UNO schema na zaciatok stranky.jpg
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.

#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

RGB LED.

Nezabudnite doplniť schému zapojenia!

Schéma zapojenia LCD displeja.


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.

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.