Operácie

SOS maják

Zo stránky SensorWiki

Verzia z 21:57, 28. apríl 2026, ktorú vytvoril StudentMIPS (diskusia | príspevky)

Záverečný projekt predmetu MIPS / LS2026 - Rostyslav Fursov


Zadanie

Cieľom úlohy bolo vytvoriť program v jazyku C pre mikroprocesor ATmega328P, ktorý simuluje optický maják vysielajúci medzinárodný núdzový signál SOS (... --- ...). Program musí bežať v nekonečnej slučke a dodržiavať štandardizované časové intervaly pre Morseovu abecedu.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.

Celkový pohľad na zariadenie.

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.

Schéma zapojenia.

Teoretický rozbor (Pravidlá morzeovky)

Základom riešenia je dodržanie medzinárodného štandardu pre Morseovu abecedu. Aby bol signál SOS čitateľný pre kohokoľvek, musí program striktne dodržiavať pomery medzi svetelným impulzom a tichom.

Definoval som základnú časovú jednotku T = 200 ms. Všetky ostatné intervaly sú násobkom tejto jednotky:

• Bodka (dot): trvá presne 1T (200 ms).

• Čiarka (dash): trvá presne 3T (600 ms).

• Medzera medzi prvkami (v rámci jedného písmena): trvá 1T (200 ms).

• Medzera medzi písmenami (S a O): trvá 3T (600 ms).

• Medzera medzi slovami (koniec sekvencie SOS): trvá 7T (1400 ms).

Technický prístup

• Riadenie portov: Využívam register smeru dát DDRB a výstupný register PORTB. Nastavenie pinu PB5 na logickú jednotku aktivuje vstavanú LED diódu.

• Bitová manipulácia: Namiesto prepisovania celého registra používam bitové masky (|= a &= ~). To zaručuje, že ovplyvňujem iba pin LED diódy a ostatné piny procesora zostávajú nezmenené.

• Časovanie: Na generovanie presných páuz využívam funkciu _delay_ms() z knižnice <util/delay.h>. Frekvencia procesora je definovaná na 16 MHz (F_CPU), čo zabezpečuje, že reálny čas zodpovedá vypočítaným intervalom.

Algoritmus a program

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


#define F_CPU 16000000UL

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

// Definícia LED na porte B, pin 5 
#define LED_PIN PB5

int main(void)
{
    // Nastavenie pinu PB5 ako výstup 
    DDRB |= (1 << LED_PIN);

    while (1) 
    {
        // Písmeno S (3 krát krátky impulz)
        for (int i = 0; i < 3; i++) {
            PORTB |= (1 << LED_PIN);   // LED zapne
            _delay_ms(200);            // oneskorenie
            PORTB &= ~(1 << LED_PIN);  // LED vypne
            _delay_ms(200);
        }

        _delay_ms(400); // Pauza medzi písmenami (píšem 400 ms, pretože 200 ms už máme z predchádzajúceho cyklu)

        // Písmeno O (3 krát dlhý impulz) 
        for (int i = 0; i < 3; i++) {
            PORTB |= (1 << LED_PIN);   // LED zapne
            _delay_ms(600);            // 3 * T
            PORTB &= ~(1 << LED_PIN);  // LED vypne
            _delay_ms(200);
        }

        _delay_ms(400); // Pauza medzi písmenami

        // Písmeno S (3 krát krátky impulz) 
        for (int i = 0; i < 3; i++) {
            PORTB |= (1 << LED_PIN);   // LED zapne
            _delay_ms(200);            // oneskorenie
            PORTB &= ~(1 << LED_PIN);  // LED vypne
            _delay_ms(200);
        }

        _delay_ms(1200);    // Pauza medzi SOS sekvenciami (píšem 1200 ms, pretože 200 ms už máme z predchádzajúceho cyklu)

    }

    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

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. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:


Č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.