Operácie

Dekodér morzeovky: 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
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2026 - '''Meno Priezvisko'''


Záverečný projekt predmetu MIPS / LS2026 - '''Oleh Chuiko'''


== Zadanie ==
== Zadanie ==


Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
Cieľom projektu bolo vytvoriť jednoduchý dekodér Morseovej abecedy pomocou mikrokontroléra ATmega328P na vývojovej doske ACROB.


[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska 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 (-).


'''Literatúra:'''
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.
* [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]


[[Súbor:morse_device.jpg|450px|thumb|center|Celkový pohľad na zariadenie.]]


__TOC__
'''Literatúra:'''


== Analýza  a opis riešenia ==
[http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]


Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
[https://en.wikipedia.org/wiki/Morse_code Morse code]
Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.


[[Súbor:GeminiAI-image3.jpg|400px|thumb|center|Celkový pohľad na zariadenie.]]
[https://www.microchip.com/en-us/product/atmega328p Dokumentácia ATmega328P]


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


[[Súbor:GeminiAI-image2.jpg|400px|thumb|center|Schéma zapojenia.]]
== 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 ===


Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...  
Program pracuje v nekonečnej slučke, v ktorej sleduje stav tlačidla.
Výpis kódu je nižšie...
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


<tabs>
výpis cez UART
<tab name="AVR C-code"><syntaxhighlight  lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
#include "uart.h"
 
#define BUTTON_PIN PB3


int main(void)
int main(void)
{
{
  unsigned int measuredValue;
uart_init();


  while (1)
while (1)
  {
{
     /* relax  */
     /* Morse decoder logic */
  }
}


  return(0);
}
}


</syntaxhighlight ></tab>
 
<tab name="filename.h"><syntaxhighlight  lang="c++" style="background: LightYellow;">
 
#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';
}


void adc_init(void);                                   // A/D converter initialization
loop_until_bit_is_set(UCSR0A, UDRE0);
UDR0 = c;


unsigned int adc_read(char a_pin);
return 0;
</syntaxhighlight ></tab>
</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á:OlehChuiko_MorseDecoder.zip|OlehChuiko_MorseDecoder.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.
Funkčnosť projektu bola overená pomocou zadávania rôznych Morseových sekvencií cez tlačidlo.
Na konci uvádzame fotku hotového zariadenia.  
Program správne rozlišoval krátke a dlhé impulzy a dekódované znaky vypisoval cez UART do terminálu.


[[Súbor:GeminiAI-image1.jpg|400px|thumb|center|Aplikácia.]]
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:'''
<center><youtube>D0UnqGm_miA</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.  
Na ďalšíkrát by som doplnil podporu väčšieho počtu znakov a presnejšie časovanie pomocou hardvérových timerov.
 


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

Celkový pohľad na zariadenie.

Literatúra:

Dokumentácia k doske Acrob

Morse code

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

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

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

  1. include "uart.h"
  1. define BUTTON_PIN PB3

int main(void) { uart_init();

while (1) {

   /* Morse decoder logic */

}

}


  1. define set_bit(ADDRESS, BIT)(ADDRESS |= (1 << BIT))
  2. define clear_bit(ADDRESS, BIT)(ADDRESS &= ~(1 << BIT))
  1. ifndef UART_H_
  2. define UART_H_
  1. include <stdio.h>

void uart_init(void); int uart_putc(char c, FILE * stream); void uart_puts(const char * s); char uart_getc(void);

  1. endif


  1. include <avr/io.h>
  2. include <util/delay.h>
  1. include "uart.h"

void uart_init(void) {

  1. include <util/setbaud.h>

UBRR0H = UBRRH_VALUE; UBRR0L = UBRRL_VALUE;

  1. if USE_2X

UCSR0A |= (1 << U2X0);

  1. else

UCSR0A &= ~(1 << U2X0);

  1. 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í.