Operácie

Binárne hodiny: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
Riadok 38: Riadok 38:
[[Súbor:Schema_zapojenia_pocitadlo]]
[[Súbor:Schema_zapojenia_pocitadlo]]


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.


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


=== Algoritmus a program ===


=== 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


Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...
'''Vlastné funkcie:'''
Výpis kódu je nižšie...
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;
    while (1) {
       
        zobrazBinarnu(pocitadlo); // Zobrazí aktuálnu hodnotu (začína od 0)


int main(void)
        _delay_ms(1000); // Počkať 1 sekundu
{
  unsigned int measuredValue;


  while (1)
        pocitadlo++; // Zvýši počítadlo o 1
  {
    /*  relax  */
  }


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


Riadok 81: Riadok 115:
=== 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.
Na konci uvádzame fotku hotového zariadenia.  


[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]


'''Video:'''
'''Video:'''
<center><youtube>D0UnqGm_miA</youtube></center>
<center><youtube>https://www.youtube.com/watch?v=sOFs8FcuZRU</youtube></center>




== Čo by som urobil inak ==
== Č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.  
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.
 





Verzia z 08:31, 29. máj 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:

Súbor:Schema zapojenia pocitadlo


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;
}
#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

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.

Aplikácia.

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.