Operácie

Binárne hodiny: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2026 - '''Meno Priezvisko''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie 400px|thumb|center|Vývojová doska ACROB. '''Literatúra:''' * [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] * [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]…“
 
StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
 
(16 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2026 - '''Meno Priezvisko'''
Záverečný projekt predmetu MIPS / LS2026 - '''Áron Szabó Bartko'''




== Zadanie ==
== Zadanie ==


Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
Cieľom projektu bolo vytvoriť program pre mikrokontrolér Arduino s procesorom ATmega328P, ktorý pomocou 6 LED diód zobrazuje binárny zápis čísiel od 0 do 63. Počítadlo sa zvyšuje každú jednu sekundu. Po dosiahnutí hodnoty 63 sa automaticky vynuluje a začne počítať odznova.


[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]


'''Literatúra:'''
 
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]




Riadok 17: Riadok 15:
== 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...
=== Teoretický rozbor ===
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.
 
Binárna sústava je dvojková číselná sústava, ktorá používa iba číslice 0 a 1. Pre náš projekt hodnota 1 bude predstavovať zapnutý stav a hodnota 0 vypnutý stav.
 
Keďže projekt používa 6 LED diód, je možné zobraziť čísla od 0 do 63, pretože
'''2^6 = 64'''
 
Každá LED predstavuje jednu binárnu pozíciu. Hodnota každej pozície je určená mocninou čísla 2. Celková zobrazená hodnota vznikne sčítaním hodnôt LED, ktoré svietia.
 
Príklad prepisu binárneho čísla 10110 na desiatkové číslo:
 
'''20 * 0 + 21 * 1 + 22 * 1 + 23 * 0 + 24 * 1 + 25 * 0'''
 
'''0 + 2 + 4 + 0 + 16 + 0 = 22'''


[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
=== Zapojenie ===


Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.
Projekt obsahuje tieto súčiastky:
* Arduino s procesorom ATmega328P
* 6× LED dióda (červená)
* 6× rezistor (330 Ω)
* prepojovacie vodiče


[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]
Schéma zapojenia:


[[Súbor:SchemaZapojenia.jpeg|400px|thumb|center|Schema zapojenia binárneho počítadla]]


=== Algoritmus a program ===
=== Algoritmus a program ===


Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...  
Program po spustení nastaví piny PORTB ako výstupné. Následne vytvorí premennú pocitadlo, ktorá uchováva aktuálnu hodnotu od 0 do 63.
Výpis kódu je nižšie...
V nekonečnej slučke sa vykonávajú tieto kroky:
1. Zobrazí sa aktuálna hodnota počítadla na LED diódach
2. Program počká 1 sekundu
3. Hodnota počítadla sa zvýši o 1
4. Ak hodnota prekročí 63, počítadlo sa nastaví späť na 0


'''Vlastné funkcie:'''
zobrazBinarnu() - Táto funkcia zapisuje binárnu hodnotu priamo na port PORTB
Najprv sa vynulujú prvé 4 bity portu a následne sa zapíše nová hodnota počítadla
'''Špeciálne knižnice:'''
util/delay.h – táto knižnica je potrebná kvôli vytvoreniu časového oneskorenia


<tabs>
<tabs>
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/io.h>
#include <util/delay.h>
#define LED0 PB0
#define LED1 PB1
#define LED2 PB2
#define LED3 PB3
#define LED4 PB4
#define LED5 PB5
void zobrazBinarnu(uint8_t hodnota) {
    PORTB &= ~(0x3F);
    PORTB |= (hodnota & 0x3F);
}
// zobrazBinarnu - zapíše hodnotu počítadla na PORTB – každý bit = jedna LED
int main(void) {
    DDRB |= (1 << LED0) | (1 << LED1) | (1 << LED2) |
            (1 << LED3) | (1 << LED4) | (1 << LED5);
    uint8_t pocitadlo = 0;


int main(void)
    while (1) {
{
       
  unsigned int measuredValue;
        zobrazBinarnu(pocitadlo); // Zobrazí aktuálnu hodnotu (začína od 0)


  while (1)
        _delay_ms(1000); // Počkať 1 sekundu
  {
    /*  relax  */
  }


  return(0);
        pocitadlo++; // Zvýši počítadlo o 1
}


</syntaxhighlight ></tab>
        if (pocitadlo > 63) {
<tab name="filename.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
            pocitadlo = 0; // Reset po 63 – vráti sa na 0
#include <avr/io.h>
        }
    }


void adc_init(void);                                   // A/D converter initialization
    return 0;
}


unsigned int adc_read(char a_pin);
</syntaxhighlight ></tab>
</syntaxhighlight ></tab>
</tabs>
</tabs>


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: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:BinarneHodiny.zip|BinarneHodiny.zip]]


=== Overenie ===
=== Overenie ===


Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
Program sme otestovali zapojením podľa vyššie uvedenej schémy. Počas merania času sme použili aj stopky, ktoré počítali sekundy súčasne s naším binárnym počítadlom. Výsledok môžeme považovať za vhodný, pretože počítadlo rátalo súčasne so stopkami a pri 1 minúte a 4 sekundách sa binárne hodiny resetovali
Na konci uvádzame fotku hotového zariadenia.


[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
'''Video:'''
<center><youtube>https://www.youtube.com/watch?v=sOFs8FcuZRU</youtube></center>


'''Video:'''
== Čo by som urobil inak ==
<center><youtube>D0UnqGm_miA</youtube></center>


Aby naše počítadlo malo lepšie využitie mohli by sme pridať ešte ďalšie 2 LED, tým by sme dostali čísla od 0 do 255. Pri takomto zapojení ale musíme použiť iný port (napríklad PORTA) pretože PORTB nemá toľko voľných pinov.
Mohli by sme ešte pridať tlačidlo na zapínanie a vypínanie časovača, tým by mohli fungpvať ako stopky.
Mohlo by sa pridať aj vypísanie čísla na sériovú linku alebo na LCD display


== Čo by som urobil inak ==


Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.




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


[[Category:AVR]] [[Category:MIPS]]
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 14:42, 2. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Áron Szabó Bartko


Zadanie

Cieľom projektu bolo vytvoriť program pre mikrokontrolér Arduino s procesorom ATmega328P, ktorý pomocou 6 LED diód zobrazuje binárny zápis čísiel od 0 do 63. Počítadlo sa zvyšuje každú jednu sekundu. Po dosiahnutí hodnoty 63 sa automaticky vynuluje a začne počítať odznova.

Vývojová doska ACROB.



Analýza a opis riešenia

Teoretický rozbor

Binárna sústava je dvojková číselná sústava, ktorá používa iba číslice 0 a 1. Pre náš projekt hodnota 1 bude predstavovať zapnutý stav a hodnota 0 vypnutý stav.

Keďže projekt používa 6 LED diód, je možné zobraziť čísla od 0 do 63, pretože

2^6 = 64

Každá LED predstavuje jednu binárnu pozíciu. Hodnota každej pozície je určená mocninou čísla 2. Celková zobrazená hodnota vznikne sčítaním hodnôt LED, ktoré svietia.

Príklad prepisu binárneho čísla 10110 na desiatkové číslo:

20 * 0 + 21 * 1 + 22 * 1 + 23 * 0 + 24 * 1 + 25 * 0

0 + 2 + 4 + 0 + 16 + 0 = 22

Zapojenie

Projekt obsahuje tieto súčiastky:

  • Arduino s procesorom ATmega328P
  • 6× LED dióda (červená)
  • 6× rezistor (330 Ω)
  • prepojovacie vodiče

Schéma zapojenia:

Schema zapojenia binárneho počítadla

Algoritmus a program

Program po spustení nastaví piny PORTB ako výstupné. Následne vytvorí premennú pocitadlo, ktorá uchováva aktuálnu hodnotu od 0 do 63. V nekonečnej slučke sa vykonávajú tieto kroky: 1. Zobrazí sa aktuálna hodnota počítadla na LED diódach 2. Program počká 1 sekundu 3. Hodnota počítadla sa zvýši o 1 4. Ak hodnota prekročí 63, počítadlo sa nastaví späť na 0

Vlastné funkcie: zobrazBinarnu() - Táto funkcia zapisuje binárnu hodnotu priamo na port PORTB Najprv sa vynulujú prvé 4 bity portu a následne sa zapíše nová hodnota počítadla

Špeciálne knižnice: util/delay.h – táto knižnica je potrebná kvôli vytvoreniu časového oneskorenia

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>

#define LED0 PB0
#define LED1 PB1
#define LED2 PB2
#define LED3 PB3
#define LED4 PB4
#define LED5 PB5

void zobrazBinarnu(uint8_t hodnota) {
    PORTB &= ~(0x3F);
    PORTB |= (hodnota & 0x3F);	
}
	// zobrazBinarnu - zapíše hodnotu počítadla na PORTB – každý bit = jedna LED

int main(void) {

    DDRB |= (1 << LED0) | (1 << LED1) | (1 << LED2) |
            (1 << LED3) | (1 << LED4) | (1 << LED5);

    uint8_t pocitadlo = 0;

    while (1) {
        
        zobrazBinarnu(pocitadlo);		// Zobrazí aktuálnu hodnotu (začína od 0)

        _delay_ms(1000);			// Počkať 1 sekundu 

        pocitadlo++;				// Zvýši počítadlo o 1

        if (pocitadlo > 63) {
            pocitadlo = 0;			// Reset po 63 – vráti sa na 0
        }
    }

    return 0;
}


Zdrojový kód: BinarneHodiny.zip

Overenie

Program sme otestovali zapojením podľa vyššie uvedenej schémy. Počas merania času sme použili aj stopky, ktoré počítali sekundy súčasne s naším binárnym počítadlom. Výsledok môžeme považovať za vhodný, pretože počítadlo rátalo súčasne so stopkami a pri 1 minúte a 4 sekundách sa binárne hodiny resetovali

Video:

Čo by som urobil inak

Aby naše počítadlo malo lepšie využitie mohli by sme pridať ešte ďalšie 2 LED, tým by sme dostali čísla od 0 do 255. Pri takomto zapojení ale musíme použiť iný port (napríklad PORTA) pretože PORTB nemá toľko voľných pinov. Mohli by sme ešte pridať tlačidlo na zapínanie a vypínanie časovača, tým by mohli fungpvať ako stopky. Mohlo by sa pridať aj vypísanie čísla na sériovú linku alebo na LCD display