Programovanie AVR v jazyku C: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
(46 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
Na tomto cvičení prakticky len zopakujeme to čo sme robili pred týždňom, ale spravíme to v jazyku C pomocou kompilátora '''avr-gcc'''<ref group="REF">[http://www.nongnu.org/avr-libc/ AVR Libc Home Page].</ref>. | |||
Vzhľadom na obmedzený čas sa dostaneme naozaj len k základom, pre väčšie porozumenie odporúčame hlbšie preštudovať Application Notes | |||
od firmy Atmel, v ktorých sa opisuje ako efektívne programovať v jazyku C<ref group="REF">AVR035: [http://ww1.microchip.com/downloads/en/Appnotes/doc1497.pdf Efficient C Coding for AVR]. Application note.</ref> | |||
a preskúmať aj odporúčané tipy a triky<ref group="REF" name="avr4027">AVR4027: [https://ww1.microchip.com/downloads/en/AppNotes/doc8453.pdf Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcontrollers ]. Application note.</ref> pre programovanie 8-bitových mikropočítačov. | |||
Navyše však pripojíme k mikropočítaču prvú externú súčiastku - tlačítko. | |||
'''HW:''' Budete potrebovať FEIkársku Acrob alebo bežnú inú Arduino dosku a dokumentáciu k nej | |||
<ref group="REF">[http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.pdf Arduino UNO V3 pinout]</ref> | |||
<ref group="REF">[http://marcusjenkins.com/wp-content/uploads/2014/06/nano.pdf Arduino Nano pinout diagram]</ref> | |||
i k samotnému procesoru<ref group="REF">Datasheet obvodu <S>Atmel</S> Microchip [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf ATmega328P]</ref>. | |||
Okrem toho budete potrebovať dve tlačítka, dve LED diódy a rezistory 220 Ohmov. | |||
'''SW:''' Arduino IDE, Atmel Studio (postup uvedený nižšie) | |||
Riadok 6: | Riadok 22: | ||
Na cvičení predvedieme pripojenie tlačítka, ktoré bude ovládať jednu LED diódu. Vašou úlohou bude pripojiť dve externé diódy a dve tlačítka a spraviť z nich preklápací R-S obvod. | Na cvičení predvedieme pripojenie tlačítka, ktoré bude ovládať jednu LED diódu. Vašou úlohou bude pripojiť dve externé diódy a dve tlačítka a spraviť z nich preklápací R-S obvod. | ||
== 1. Použitý hardvér == | |||
=== 1.1 Bezkontaktné prepojovacie pole === | |||
<tabs><tab> | |||
Bezkontaktné prepojovacie pole (breadboard) slúži na rýchle zapojenie jednoduchších obvodov bez potreby spájkovania. | |||
Vnútri v doštičke sa nachádzajú kontaktné pružinky, ktoré zabezpečia prepojenie medzi jednotlivými vývodmi. Prepojená je vždy jedna pätica kontaktov, okrem toho sú navzájom prepojené dlhé kontakty na okrajoch dosky určené na rozvod napájania (modré a červené). Napätie na tieto kontakty však musíte najprv priviesť! | |||
[[Súbor:BreadboardIntro.png|800px|center]] | |||
=== 1.2 Tlačítko === | |||
Tlačítka použité v MIPS kite sú to pravdepodobne bezmenný (noname) klon tlačítiek Omron B3F<ref group="REF">[https://cdn-shop.adafruit.com/datasheets/B3F-1000-Omron.pdf Miniature tactile switch B3-F]. Omron.</ref>. Sú bežne dostupné a určené na montáž do plošného spoja. Preto majú pomerne krátke vývody, takže je nutné venovať pozornosť ich dokonalému zastrčeniu do kontaktného poľa. Snažte sa zatlačiť kolmo a na všetky štyri súčasne, aby sa nepokrivili. Mali by vydržať aspoň milión stlačení (neoverovali sme). Dôležitý parameter je maximálny prúd, ktorý je v rozsahu 1 - 50 mA a maximálne spínané napätie ( 5 - 24 VDC). Nie sú vhodné na spínanie striedavých prúdov. | |||
Prečo má tlačítko až štyri nožičky? Pozrite si nasledujúci obrázok: | |||
[[Súbor:TlacitkoVnutornaSchema.png|300px|center]] | |||
Vnútorná konštrukcia je veľmi jednoduchá a možno si ju prezrieť na nasledovnom obrázku. | |||
[[Súbor:TlacitkoVnutornosti.png|500px|center]] | |||
== 2. Ovládanie LED tlačítkom == | |||
Musíte si na doštičku zapojiť jedno tlačítko a dvoma drôtikmi pripojiť k Arduino doske. Časť schémy s LED diódou už zapojená je (preto je schéma bledšia). Potrebujeme teda zapojiť len tlačítko. Odpor R1 je ochranný, v prípade, že omylom nastavíte PB4 ako výstup a stlačíte tlačidlo, nedôjde ku skratu. Ak ste už skúsení a nebojíte sa, môžete ho vynechať. | |||
<div style='text-align: center;'> | |||
[[Súbor:MIPS_schema01.png|300px]][[Súbor:MIPS_schema01a.png|300px]][[Súbor:MIPS_schema01w.png|300px]]<BR> | |||
''Schéma zapojenia (vľavo) a pripojenie tlačidla na doske Acrob (v strede) a k bežnému Arduino UNO.'' | |||
</div> | |||
Programy, s ktorými budeme ďalej pracovať. | |||
<tabs> | |||
<tab name="AVR C"><source lang="cpp"> | |||
#include <avr/io.h> | |||
/* Pripojenie periferii k vyvojovej doske Arduino: */ | |||
#define LED1 PB5 // zabudovana dioda | |||
#define SW1 PB4 | |||
int main(void) | |||
{ | |||
/* SETUP */ | |||
/* toto nie je nevyhnutne, pretoze po resete by mal byt 0, ale pre istotu: */ | |||
MCUCR &= ~(1<<PUD); // tymto sa vynuluje globalny bit PullUp Disable | |||
/* Konfiguracia I/O: portB.5 je vystupny (LED1) a portB.4 je vstup (SW1) * | |||
* naviac je PortB.4 so zapnutym pull-up rezistorom cez reg. PORTB */ | |||
DDRB = 0b00100000; // PORTB: LED1 na PB5 je output, SW1 (PB4) input | |||
PORTB = 0b00010000; // LED Active low, LED off, pull-up ON | |||
/* Ak nechceme menit cely register, ale len jeden bit, potom pouzijeme * | |||
* niektoru z nasledovnych konstrukcii, vsetky su ekvivalentne */ | |||
DDRB = DDRB | 0b00100000; | |||
DDRB = DDRB | 0x20; | |||
DDRB = DDRB | (1<<5); | |||
DDRB |= (1 << PB5); | |||
DDRB |= (1 << LED1); | |||
/* LOOP */ | |||
while(1) | |||
{ | |||
// 0b00010000 | |||
if ( !(PINB & (1<<SW1)) ) // Ak je stlacene tlacitko (t.j. na vstupe log.0)... | |||
{ | |||
PORTB |= (1<<LED1); // ... tak rozsviet LED, t.j. set PB5 na log. 1 | |||
} // predosly riadok prekladac vezme ako bitovu operaciu | |||
else // ... v opacnom pripade | |||
{ | |||
PORTB &= ~(1<<LED1); // zhasni LED, t.j. clear PB5 na log. 0 | |||
} | |||
} /* end of while */ | |||
} | |||
</source></tab> | |||
<tab name="Arduino"> | |||
<source lang="arduino"> | <source lang="arduino"> | ||
/* Pripojenie periferii k vyvojovej doske Arduino: | /* Pripojenie periferii k vyvojovej doske Arduino: | ||
* LED Diody LED1 - D13 - PB5 (zabudovana) | * LED Diody LED1 - D13 - PB5 (zabudovana) | ||
* Tlacitka TLAC1 - D12 - PB4 | * Tlacitka TLAC1 - D12 - PB4 | ||
*/ | */ | ||
#define LED1 13 | #define LED1 13 | ||
#define TLAC1 12 | #define TLAC1 12 | ||
void setup() { | void setup() | ||
{ | |||
pinMode(LED1, OUTPUT); | pinMode(LED1, OUTPUT); | ||
pinMode(TLAC1, INPUT_PULLUP); | pinMode(TLAC1, INPUT_PULLUP); | ||
} | } | ||
void loop() { | void loop() | ||
{ | |||
if (digitalRead(TLAC1)) | if (digitalRead(TLAC1)) | ||
digitalWrite(LED1, LOW); | digitalWrite(LED1, LOW); | ||
Riadok 52: | Riadok 134: | ||
digitalWrite(LED1,HIGH); | digitalWrite(LED1,HIGH); | ||
/ | } | ||
</source></tab> | |||
*/ | </tabs> | ||
Ak ste si nie celkom istí, čo to v tom C-čku robíme s jednotlivými bitmi, prečítajte si podrobnejší článoček [[AVR Bit Magic]]. | |||
Ako sa definujú konštanty, aby sme nemíňali vzácne miesto v RAM pamäti, sa dočítate tu [[AVR - Definície konštánt]]. | |||
Ak si chceme programovanie ešte viac zjednodušiť a sprehľadniť, môžeme využiť zadefinované makrá a pridať k nim ešte definíciu svojich dvoch | |||
vlastných | |||
<tabs> | |||
<tab name="AVR C"><source lang="cpp"> | |||
/* na testovanie su uz zadefinovane */ | |||
bit_is_set(PINB, SW1) | |||
bit_is_clear(PINB, SW1) | |||
/* na cakanie su preddefinovane slucky */ | |||
loop_until_bit_is_set(PINB, SW1); // cakanie na uvolnenie tlacitka | |||
loop_until_bit_is_clear(PINB, SW1); // cakanie na stlacenie tlacitka | |||
/* a oplati sa zadefinovat aj tieto dve makra */ | |||
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) | |||
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) | |||
</source></tab></tabs> | |||
Potom celý program môže vyzerať takto jednoducho | |||
<tabs> | |||
<tab name="AVR C"><source lang="cpp"> | |||
#include <avr/io.h> | |||
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) | |||
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) | |||
/* Pripojenie periferii k vyvojovej doske Arduino: */ | |||
#define LED1 PB5 // zabudovana dioda | |||
#define SW1 PB4 // pripojene tlacitko | |||
int main(void) | |||
{ | |||
/* SETUP */ | |||
/* Konfiguracia I/O: portB.5 je vystupny (LED1) a portB.4 je vstup (SW1) * | |||
* naviac je PortB.4 so zapnutym pull-up rezistorom cez reg. PORTB */ | |||
set_bit(DDRB,LED1); | |||
set_bit(PORTB,SW1); | |||
/* LOOP */ | |||
while(1) | |||
{ | |||
if ( bit_is_clear(PINB, SW1) ) // ak je stlacene tlacitko SW1 | |||
set_bit(PORTB,LED1); // LED1 = log.1 | |||
else // inak | |||
clear_bit(PORTB,LED1); // LED1 = log.0 | |||
*/ | } /* end of while */ | ||
} | } | ||
</source> | </source></tab></tabs> | ||
</tab></tabs> | |||
== 3. Ovládanie dvoch LED tlačítkami == | |||
Vašou úlohou teraz bude samostatne pripojiť k mikroprocesoru dve externé LED diódy a dve tlačítka. Schéma zapojenia aj prepojovací diagram je nižšie. Pozor, všimnite si, na ktoré porty sú privedené tlačítka a diódy. Túto informáciu budete potrebovať pri programovaní. | |||
<div style='text-align: center;'> | |||
[[Súbor:MIPS_schema02-2.png|500px]][[Súbor:MIPS_schema02-2a.png|300px]][[Súbor:MIPS_schema02-2w.png|300px]]<BR> | |||
''Schéma zapojenia (vľavo) a pripojenie tlačidla na doske Acrob (v strede) a k bežnému Arduino UNO.'' | |||
</div> | |||
Vašou úlohou je naprogramovať R-S preklápací obvod. Funkcia obvodu je nasledovná: Po stlačení tlačidla SW2 sa rozsvieti dióda LED2 a ostane svietiť aj keď tlačidlo pustíte. Dióda LED3 zhasne. | |||
Podobne pri stlačení tlačidla SW3 sa rozsvieti diída LED3 a dióda LED2 zhasne. | |||
== 4. Bonus: Multicolor RGB LED == | |||
'''RGB LED''' je súčiastka, ktorá má v jednom puzdre tri čipy LED diód, ktoré generujú červené, zelené a modré svetlo. Ak zapojíte RGB diódu na tri ôzne výstupy Arduina (výber necháme na vás), pridáte tri tlačítka, tak pomocou vhodného programu môžete vyskúšať generovať všetky kombinácie odtieňov. Odpory by ste mali použiť 1k, lebo dióda ktorú máte k dispozícii má vysokú intenzitu, takže jej na bežné svietenie stačí oveľa menší prúd (cca 2 mA). | |||
[[Súbor:MIPS_ExampleRGBLED.png|300px]] | |||
Pri zapojení by vám teoreticky mohol pomôcť aj datasheet k dióde YSL-R596AR3G4B5C<ref group="REF">Datasheet RGB diódy [http://cdn.sparkfun.com/datasheets/Components/LED/YSL-R596AR3G4B5C-C10.pdf YSL-R596AR3G4B5C] Young Sun Led Technology, China.</ref>, ale sami sa presvedčte, že zapojenie vývodov by ste v ňom hľadali márne. Pre porovnanie si pozrite datasheet k podobnej dióde WP154A4SEJ3VBDZGW<ref group="REF">Datasheet RGB diódy [https://www.mouser.sk/datasheet/2/216/WP154A4SEJ3VBDZGW-CA-1145236.pdf WP154A4SEJ3VBDZGW] Kingbright Technology, Taiwan, 2018.</ref> od seriózneho výrobcu, aby ste vvideli rozdiel v množstve poskytnutých informácií. | |||
Na nasledovnom obrázku je schéma zapojenia (bez označenia konkrétnych pinov Arduina) a zapojovací diagram na doštičke (bez tlačítok a bez Arduina). Všimnite si, prosím, že táto RGB dióda má spoločnú anódu, preto musíme spínať katódy voči zemi. Čo to znamená? Aby príslušná dióda svietila, musíte dať na výstup log. 0 a nie 1. Pracujeme v tzv. ''obrátenej logike''. | |||
<div style='text-align: center;'> | |||
[[Súbor:MIPS_RGBschema02.png|300px]][[Súbor:MIPS_RGBschema02w.png|300px]]<BR> | |||
''Schéma zapojenia a prepojenie na doštičke.'' | |||
</div> | |||
<html> | |||
<P Align="center"> | |||
<iframe width="725" height="453" src="https://www.tinkercad.com/embed/9NntCT8wk0u?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | |||
<BR> | |||
<I>Príklad zapojenia LED diódy v simulátore</I> | |||
</html> | |||
Ak sa vám vložený simulátor nezobrazuje korektne, použite [https://www.tinkercad.com/things/9NntCT8wk0u-copy-of-rgb-led/editel?sharecode=kvuN64Yo6PTQd0JT4AJlPTyDHkW_6JQuiSDk_3405DY tento link]. | |||
<!-- plati len 14 dni --> | |||
== Úlohy == | |||
Ak ste úspešne prišli až sem, pozrite si zadanie v Classroome a vyplňte formulár s otázkami. K zadaniu potom nahrajte aj zdrojový kód <code>filename.c</code> a fotografiu alebo video fungujúceho programu s preklápacím obvodom na vašom procesore. Nezabudnite si prečítať rozbor využívania premenných<ref group="REF" name="avr4027">AVR4027: [https://ww1.microchip.com/downloads/en/AppNotes/doc8453.pdf Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcontrollers ]. Application note.</ref> na str. 5 - budete to potrebovať do formuláru. | |||
== Literatúra == | == Literatúra == | ||
Riadok 85: | Riadok 249: | ||
<BR><BR>'''Navigácia:''' | |||
[https://senzor.robotika.sk/sensorwiki/index.php/Programovanie_AVR_v_jazyku_C 🡄 Predošlé cvičenie] | [[Mikropočítačové systémy (MIPS)#Cvičenia| 🡅 Zoznam cvičení]] | [[Vstupy a výstupy AVR|Nasledujúce cvičenie 🡆]] | |||
[[Category: AVR]][[Category: MIPS]] | [[Category: AVR]][[Category: MIPS]] |
Aktuálna revízia z 13:46, 21. február 2024
Na tomto cvičení prakticky len zopakujeme to čo sme robili pred týždňom, ale spravíme to v jazyku C pomocou kompilátora avr-gcc[REF 1].
Vzhľadom na obmedzený čas sa dostaneme naozaj len k základom, pre väčšie porozumenie odporúčame hlbšie preštudovať Application Notes od firmy Atmel, v ktorých sa opisuje ako efektívne programovať v jazyku C[REF 2] a preskúmať aj odporúčané tipy a triky[REF 3] pre programovanie 8-bitových mikropočítačov.
Navyše však pripojíme k mikropočítaču prvú externú súčiastku - tlačítko.
HW: Budete potrebovať FEIkársku Acrob alebo bežnú inú Arduino dosku a dokumentáciu k nej
[REF 4]
[REF 5]
i k samotnému procesoru[REF 6].
Okrem toho budete potrebovať dve tlačítka, dve LED diódy a rezistory 220 Ohmov.
SW: Arduino IDE, Atmel Studio (postup uvedený nižšie)
Úloha:
Na cvičení predvedieme pripojenie tlačítka, ktoré bude ovládať jednu LED diódu. Vašou úlohou bude pripojiť dve externé diódy a dve tlačítka a spraviť z nich preklápací R-S obvod.
1. Použitý hardvér
1.1 Bezkontaktné prepojovacie pole
Bezkontaktné prepojovacie pole (breadboard) slúži na rýchle zapojenie jednoduchších obvodov bez potreby spájkovania. Vnútri v doštičke sa nachádzajú kontaktné pružinky, ktoré zabezpečia prepojenie medzi jednotlivými vývodmi. Prepojená je vždy jedna pätica kontaktov, okrem toho sú navzájom prepojené dlhé kontakty na okrajoch dosky určené na rozvod napájania (modré a červené). Napätie na tieto kontakty však musíte najprv priviesť!
1.2 Tlačítko
Tlačítka použité v MIPS kite sú to pravdepodobne bezmenný (noname) klon tlačítiek Omron B3F[REF 7]. Sú bežne dostupné a určené na montáž do plošného spoja. Preto majú pomerne krátke vývody, takže je nutné venovať pozornosť ich dokonalému zastrčeniu do kontaktného poľa. Snažte sa zatlačiť kolmo a na všetky štyri súčasne, aby sa nepokrivili. Mali by vydržať aspoň milión stlačení (neoverovali sme). Dôležitý parameter je maximálny prúd, ktorý je v rozsahu 1 - 50 mA a maximálne spínané napätie ( 5 - 24 VDC). Nie sú vhodné na spínanie striedavých prúdov.
Prečo má tlačítko až štyri nožičky? Pozrite si nasledujúci obrázok:
Vnútorná konštrukcia je veľmi jednoduchá a možno si ju prezrieť na nasledovnom obrázku.
2. Ovládanie LED tlačítkom
Musíte si na doštičku zapojiť jedno tlačítko a dvoma drôtikmi pripojiť k Arduino doske. Časť schémy s LED diódou už zapojená je (preto je schéma bledšia). Potrebujeme teda zapojiť len tlačítko. Odpor R1 je ochranný, v prípade, že omylom nastavíte PB4 ako výstup a stlačíte tlačidlo, nedôjde ku skratu. Ak ste už skúsení a nebojíte sa, môžete ho vynechať.
Programy, s ktorými budeme ďalej pracovať.
#include <avr/io.h>
/* Pripojenie periferii k vyvojovej doske Arduino: */
#define LED1 PB5 // zabudovana dioda
#define SW1 PB4
int main(void)
{
/* SETUP */
/* toto nie je nevyhnutne, pretoze po resete by mal byt 0, ale pre istotu: */
MCUCR &= ~(1<<PUD); // tymto sa vynuluje globalny bit PullUp Disable
/* Konfiguracia I/O: portB.5 je vystupny (LED1) a portB.4 je vstup (SW1) *
* naviac je PortB.4 so zapnutym pull-up rezistorom cez reg. PORTB */
DDRB = 0b00100000; // PORTB: LED1 na PB5 je output, SW1 (PB4) input
PORTB = 0b00010000; // LED Active low, LED off, pull-up ON
/* Ak nechceme menit cely register, ale len jeden bit, potom pouzijeme *
* niektoru z nasledovnych konstrukcii, vsetky su ekvivalentne */
DDRB = DDRB | 0b00100000;
DDRB = DDRB | 0x20;
DDRB = DDRB | (1<<5);
DDRB |= (1 << PB5);
DDRB |= (1 << LED1);
/* LOOP */
while(1)
{
// 0b00010000
if ( !(PINB & (1<<SW1)) ) // Ak je stlacene tlacitko (t.j. na vstupe log.0)...
{
PORTB |= (1<<LED1); // ... tak rozsviet LED, t.j. set PB5 na log. 1
} // predosly riadok prekladac vezme ako bitovu operaciu
else // ... v opacnom pripade
{
PORTB &= ~(1<<LED1); // zhasni LED, t.j. clear PB5 na log. 0
}
} /* end of while */
}
/* Pripojenie periferii k vyvojovej doske Arduino:
* LED Diody LED1 - D13 - PB5 (zabudovana)
* Tlacitka TLAC1 - D12 - PB4
*/
#define LED1 13
#define TLAC1 12
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(TLAC1, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(TLAC1))
digitalWrite(LED1, LOW);
else
digitalWrite(LED1,HIGH);
}
Ak ste si nie celkom istí, čo to v tom C-čku robíme s jednotlivými bitmi, prečítajte si podrobnejší článoček AVR Bit Magic.
Ako sa definujú konštanty, aby sme nemíňali vzácne miesto v RAM pamäti, sa dočítate tu AVR - Definície konštánt.
Ak si chceme programovanie ešte viac zjednodušiť a sprehľadniť, môžeme využiť zadefinované makrá a pridať k nim ešte definíciu svojich dvoch
vlastných
/* na testovanie su uz zadefinovane */
bit_is_set(PINB, SW1)
bit_is_clear(PINB, SW1)
/* na cakanie su preddefinovane slucky */
loop_until_bit_is_set(PINB, SW1); // cakanie na uvolnenie tlacitka
loop_until_bit_is_clear(PINB, SW1); // cakanie na stlacenie tlacitka
/* a oplati sa zadefinovat aj tieto dve makra */
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
Potom celý program môže vyzerať takto jednoducho
#include <avr/io.h>
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
/* Pripojenie periferii k vyvojovej doske Arduino: */
#define LED1 PB5 // zabudovana dioda
#define SW1 PB4 // pripojene tlacitko
int main(void)
{
/* SETUP */
/* Konfiguracia I/O: portB.5 je vystupny (LED1) a portB.4 je vstup (SW1) *
* naviac je PortB.4 so zapnutym pull-up rezistorom cez reg. PORTB */
set_bit(DDRB,LED1);
set_bit(PORTB,SW1);
/* LOOP */
while(1)
{
if ( bit_is_clear(PINB, SW1) ) // ak je stlacene tlacitko SW1
set_bit(PORTB,LED1); // LED1 = log.1
else // inak
clear_bit(PORTB,LED1); // LED1 = log.0
} /* end of while */
}
3. Ovládanie dvoch LED tlačítkami
Vašou úlohou teraz bude samostatne pripojiť k mikroprocesoru dve externé LED diódy a dve tlačítka. Schéma zapojenia aj prepojovací diagram je nižšie. Pozor, všimnite si, na ktoré porty sú privedené tlačítka a diódy. Túto informáciu budete potrebovať pri programovaní.
Vašou úlohou je naprogramovať R-S preklápací obvod. Funkcia obvodu je nasledovná: Po stlačení tlačidla SW2 sa rozsvieti dióda LED2 a ostane svietiť aj keď tlačidlo pustíte. Dióda LED3 zhasne.
Podobne pri stlačení tlačidla SW3 sa rozsvieti diída LED3 a dióda LED2 zhasne.
4. Bonus: Multicolor RGB LED
RGB LED je súčiastka, ktorá má v jednom puzdre tri čipy LED diód, ktoré generujú červené, zelené a modré svetlo. Ak zapojíte RGB diódu na tri ôzne výstupy Arduina (výber necháme na vás), pridáte tri tlačítka, tak pomocou vhodného programu môžete vyskúšať generovať všetky kombinácie odtieňov. Odpory by ste mali použiť 1k, lebo dióda ktorú máte k dispozícii má vysokú intenzitu, takže jej na bežné svietenie stačí oveľa menší prúd (cca 2 mA).
Pri zapojení by vám teoreticky mohol pomôcť aj datasheet k dióde YSL-R596AR3G4B5C[REF 8], ale sami sa presvedčte, že zapojenie vývodov by ste v ňom hľadali márne. Pre porovnanie si pozrite datasheet k podobnej dióde WP154A4SEJ3VBDZGW[REF 9] od seriózneho výrobcu, aby ste vvideli rozdiel v množstve poskytnutých informácií.
Na nasledovnom obrázku je schéma zapojenia (bez označenia konkrétnych pinov Arduina) a zapojovací diagram na doštičke (bez tlačítok a bez Arduina). Všimnite si, prosím, že táto RGB dióda má spoločnú anódu, preto musíme spínať katódy voči zemi. Čo to znamená? Aby príslušná dióda svietila, musíte dať na výstup log. 0 a nie 1. Pracujeme v tzv. obrátenej logike.
Príklad zapojenia LED diódy v simulátore
Ak sa vám vložený simulátor nezobrazuje korektne, použite tento link.
Úlohy
Ak ste úspešne prišli až sem, pozrite si zadanie v Classroome a vyplňte formulár s otázkami. K zadaniu potom nahrajte aj zdrojový kód filename.c
a fotografiu alebo video fungujúceho programu s preklápacím obvodom na vašom procesore. Nezabudnite si prečítať rozbor využívania premenných[REF 3] na str. 5 - budete to potrebovať do formuláru.
Literatúra
- ↑ AVR Libc Home Page.
- ↑ AVR035: Efficient C Coding for AVR. Application note.
- ↑ 3,0 3,1 AVR4027: Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcontrollers . Application note.
- ↑ Arduino UNO V3 pinout
- ↑ Arduino Nano pinout diagram
- ↑ Datasheet obvodu
AtmelMicrochip ATmega328P - ↑ Miniature tactile switch B3-F. Omron.
- ↑ Datasheet RGB diódy YSL-R596AR3G4B5C Young Sun Led Technology, China.
- ↑ Datasheet RGB diódy WP154A4SEJ3VBDZGW Kingbright Technology, Taiwan, 2018.
Navigácia:
🡄 Predošlé cvičenie | 🡅 Zoznam cvičení | Nasledujúce cvičenie 🡆