Dekodér morzeovky: Rozdiel medzi revíziami
Zo stránky SensorWiki
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]…“ |
Bez shrnutí editace |
||
| Riadok 1: | Riadok 1: | ||
Záverečný projekt predmetu MIPS / LS2026 - '''Oleh Chuiko''' | |||
== Zadanie == | == Zadanie == | ||
Cieľom projektu bolo vytvoriť jednoduchý dekodér Morseovej abecedy pomocou mikrokontroléra ATmega328P na vývojovej doske ACROB. | |||
Mikropočítač prijíma vstup z tlačidla, meria dĺžku jeho stlačenia a podľa času rozlišuje krátke a dlhé impulzy Morseovej abecedy. | |||
Krátke stlačenie predstavuje bodku (.) a dlhé stlačenie predstavuje čiarku (-). | |||
Postupne zadané symboly sa ukladajú do buffera a následne sa dekódujú na jednotlivé písmená. Výsledok sa vypisuje cez UART do sériového terminálu. | |||
[[Súbor:morse_device.jpg|450px|thumb|center|Celkový pohľad na zariadenie.]] | |||
'''Literatúra:''' | |||
[http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob] | |||
[https://en.wikipedia.org/wiki/Morse_code Morse code] | |||
[ | [https://www.microchip.com/en-us/product/atmega328p Dokumentácia ATmega328P] | ||
TOC | |||
== Analýza a opis riešenia == | |||
Projekt využíva tlačidlo ako vstupný prvok pre zadávanie Morseovej abecedy. Mikrokontrolér priebežne sleduje stav tlačidla a meria čas jeho stlačenia. | |||
Ak je tlačidlo stlačené krátko, program zaznamená bodku. Pri dlhšom stlačení sa zaznamená čiarka. Takto vytvorená sekvencia sa uloží do textového buffera. | |||
Po ukončení zadávania znaku program porovná prijatú sekvenciu s tabuľkou Morseových kódov a vyhľadá zodpovedajúce písmeno. | |||
Výsledný znak sa následne odošle cez UART do počítača. | |||
Pri projekte bola použitá: | |||
vývojová doska ACROB s ATmega328P | |||
tlačidlo pripojené na vstupný pin mikrokontroléra | |||
UART komunikácia | |||
jednoduché časovanie na rozlíšenie bodky a čiarky | |||
buffer pre ukladanie Morse sekvencie | |||
[[Súbor:morse_device.jpg|400px|thumb|center|Zapojenie tlačidla na vývojovej doske ACROB.]] | |||
Tlačidlo bolo pripojené medzi vstupný pin mikrokontroléra a GND. Program využíva interný pull-up rezistor mikrokontroléra. | |||
=== Algoritmus a program === | === Algoritmus a program === | ||
Program pracuje v nekonečnej slučke, v ktorej sleduje stav tlačidla. | |||
Počas stlačenia sa meria čas trvania impulzu. Podľa nameranej hodnoty program rozhodne, či ide o bodku alebo čiarku. | |||
Dekódovanie Morseovej abecedy je realizované pomocou porovnávania prijatej sekvencie s uloženými Morse znakmi. | |||
Po úspešnom rozpoznaní sa výsledné písmeno odošle cez UART. | |||
Hlavné časti programu: | |||
čítanie tlačidla | |||
meranie dĺžky stlačenia | |||
rozlíšenie bodky a čiarky | |||
ukladanie Morse sekvencie do buffera | |||
dekódovanie znakov | |||
výpis cez UART | |||
#include | #include "uart.h" | ||
#define BUTTON_PIN PB3 | |||
int main(void) | int main(void) | ||
{ | { | ||
uart_init(); | |||
while (1) | |||
{ | |||
/* | /* Morse decoder logic */ | ||
} | |||
} | } | ||
< | |||
< | |||
#define set_bit(ADDRESS, BIT)(ADDRESS |= (1 << BIT)) | |||
#define clear_bit(ADDRESS, BIT)(ADDRESS &= ~(1 << BIT)) | |||
#ifndef UART_H_ | |||
#define UART_H_ | |||
#include <stdio.h> | |||
void uart_init(void); | |||
int uart_putc(char c, FILE * stream); | |||
void uart_puts(const char * s); | |||
char uart_getc(void); | |||
#endif | |||
#include <avr/io.h> | #include <avr/io.h> | ||
#include <util/delay.h> | |||
#include "uart.h" | |||
void uart_init(void) | |||
{ | |||
#include <util/setbaud.h> | |||
UBRR0H = UBRRH_VALUE; | |||
UBRR0L = UBRRL_VALUE; | |||
#if USE_2X | |||
UCSR0A |= (1 << U2X0); | |||
#else | |||
UCSR0A &= ~(1 << U2X0); | |||
#endif | |||
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); | |||
UCSR0B = _BV(RXEN0) | _BV(TXEN0); | |||
} | |||
int uart_putc(char c, FILE * stream) | |||
{ | |||
if (c == '\n') | |||
{ | |||
loop_until_bit_is_set(UCSR0A, UDRE0); | |||
UDR0 = '\r'; | |||
} | |||
loop_until_bit_is_set(UCSR0A, UDRE0); | |||
UDR0 = c; | |||
return 0; | |||
} | |||
Zdrojový kód: [[Médiá: | |||
Zdrojový kód: [[Médiá:OlehChuiko_MorseDecoder.zip|OlehChuiko_MorseDecoder.zip]] | |||
=== Overenie === | === Overenie === | ||
Funkčnosť projektu bola overená pomocou zadávania rôznych Morseových sekvencií cez tlačidlo. | |||
Program správne rozlišoval krátke a dlhé impulzy a dekódované znaky vypisoval cez UART do terminálu. | |||
Počas testovania bolo sledované: | |||
správne rozpoznávanie bodiek a čiarok | |||
stabilita merania času stlačenia tlačidla | |||
správne dekódovanie znakov | |||
správny výpis cez UART | |||
Video demonštruje reálnu funkčnosť zariadenia a proces dekódovania Morseovej abecedy. | |||
'''Video:''' | '''Video:''' | ||
== Čo by som urobil inak == | == Čo by som urobil inak == | ||
Na ďalšíkrát by som doplnil podporu väčšieho počtu znakov a presnejšie časovanie pomocou hardvérových timerov. | |||
Taktiež by bolo zaujímavé doplniť LCD displej alebo zvukový výstup, aby bolo možné dekódovaný text zobrazovať priamo na zariadení. | |||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] | ||
Verzia z 18:37, 16. máj 2026
Záverečný projekt predmetu MIPS / LS2026 - Oleh Chuiko
Zadanie
Cieľom projektu bolo vytvoriť jednoduchý dekodér Morseovej abecedy pomocou mikrokontroléra ATmega328P na vývojovej doske ACROB.
Mikropočítač prijíma vstup z tlačidla, meria dĺžku jeho stlačenia a podľa času rozlišuje krátke a dlhé impulzy Morseovej abecedy. Krátke stlačenie predstavuje bodku (.) a dlhé stlačenie predstavuje čiarku (-).
Postupne zadané symboly sa ukladajú do buffera a následne sa dekódujú na jednotlivé písmená. Výsledok sa vypisuje cez UART do sériového terminálu.

Literatúra:
TOC
Analýza a opis riešenia
Projekt využíva tlačidlo ako vstupný prvok pre zadávanie Morseovej abecedy. Mikrokontrolér priebežne sleduje stav tlačidla a meria čas jeho stlačenia.
Ak je tlačidlo stlačené krátko, program zaznamená bodku. Pri dlhšom stlačení sa zaznamená čiarka. Takto vytvorená sekvencia sa uloží do textového buffera.
Po ukončení zadávania znaku program porovná prijatú sekvenciu s tabuľkou Morseových kódov a vyhľadá zodpovedajúce písmeno. Výsledný znak sa následne odošle cez UART do počítača.
Pri projekte bola použitá:
vývojová doska ACROB s ATmega328P
tlačidlo pripojené na vstupný pin mikrokontroléra
UART komunikácia
jednoduché časovanie na rozlíšenie bodky a čiarky
buffer pre ukladanie Morse sekvencie

Tlačidlo bolo pripojené medzi vstupný pin mikrokontroléra a GND. Program využíva interný pull-up rezistor mikrokontroléra.
Algoritmus a program
Program pracuje v nekonečnej slučke, v ktorej sleduje stav tlačidla. Počas stlačenia sa meria čas trvania impulzu. Podľa nameranej hodnoty program rozhodne, či ide o bodku alebo čiarku.
Dekódovanie Morseovej abecedy je realizované pomocou porovnávania prijatej sekvencie s uloženými Morse znakmi. Po úspešnom rozpoznaní sa výsledné písmeno odošle cez UART.
Hlavné časti programu:
čítanie tlačidla
meranie dĺžky stlačenia
rozlíšenie bodky a čiarky
ukladanie Morse sekvencie do buffera
dekódovanie znakov
výpis cez UART
- include "uart.h"
- define BUTTON_PIN PB3
int main(void) { uart_init();
while (1) {
/* Morse decoder logic */
}
}
- define set_bit(ADDRESS, BIT)(ADDRESS |= (1 << BIT))
- define clear_bit(ADDRESS, BIT)(ADDRESS &= ~(1 << BIT))
- ifndef UART_H_
- define UART_H_
- include <stdio.h>
void uart_init(void); int uart_putc(char c, FILE * stream); void uart_puts(const char * s); char uart_getc(void);
- endif
- include <avr/io.h>
- include <util/delay.h>
- include "uart.h"
void uart_init(void) {
- include <util/setbaud.h>
UBRR0H = UBRRH_VALUE; UBRR0L = UBRRL_VALUE;
- if USE_2X
UCSR0A |= (1 << U2X0);
- else
UCSR0A &= ~(1 << U2X0);
- endif
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); UCSR0B = _BV(RXEN0) | _BV(TXEN0);
}
int uart_putc(char c, FILE * stream) { if (c == '\n') { loop_until_bit_is_set(UCSR0A, UDRE0); UDR0 = '\r'; }
loop_until_bit_is_set(UCSR0A, UDRE0); UDR0 = c;
return 0;
}
Zdrojový kód: OlehChuiko_MorseDecoder.zip
Overenie
Funkčnosť projektu bola overená pomocou zadávania rôznych Morseových sekvencií cez tlačidlo. Program správne rozlišoval krátke a dlhé impulzy a dekódované znaky vypisoval cez UART do terminálu.
Počas testovania bolo sledované:
správne rozpoznávanie bodiek a čiarok
stabilita merania času stlačenia tlačidla
správne dekódovanie znakov
správny výpis cez UART
Video demonštruje reálnu funkčnosť zariadenia a proces dekódovania Morseovej abecedy.
Video:
Čo by som urobil inak
Na ďalšíkrát by som doplnil podporu väčšieho počtu znakov a presnejšie časovanie pomocou hardvérových timerov.
Taktiež by bolo zaujímavé doplniť LCD displej alebo zvukový výstup, aby bolo možné dekódovaný text zobrazovať priamo na zariadení.