Binárne hodiny: Rozdiel medzi revíziami
Zo stránky SensorWiki
| Riadok 36: | Riadok 36: | ||
Schéma zapojenia: | Schéma zapojenia: | ||
[[Súbor: SchemaZapojenia|400px|thumb|center|Schema zapojenia.]] | [[Súbor:SchemaZapojenia.jpeg|400px|thumb|center|Schema zapojenia.]] | ||
=== Algoritmus a program === | === Algoritmus a program === | ||
Verzia z 11:55, 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.

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:

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;
}
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
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.
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 fumgpvať ako stopky.
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.