Automatické nastavenie prenosovej rýchlosti: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 37: | Riadok 37: | ||
<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 <stdio.h> | |||
#include <avr/io.h> | #include <avr/io.h> | ||
#include <util/delay.h> | |||
#include "uart.h" | |||
FILE uart_output = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE); | |||
FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getc, _FDEV_SETUP_READ); | |||
const unsigned long baud_rychlost[] = { | |||
600, | |||
1200, | |||
2400, | |||
4800, | |||
9600, | |||
14400, | |||
19200, | |||
28800, | |||
38400, | |||
56000, | |||
57600, | |||
115200 | |||
}; | |||
int main(void) | int main(void) | ||
{ | { | ||
int velkost = sizeof(baud_rychlost)/sizeof(baud_rychlost[0]); | |||
int baud_index = 0; | |||
int najdeny = 0; | |||
char znak; | |||
while (1) | |||
{ | |||
if(najdeny == 0){ | |||
for(int i=0; i<velkost; i++){ | |||
baud_index = i; | |||
uart_init(baud_rychlost[i]); | |||
stdout = &uart_output; | |||
stdin = &uart_input; | |||
_delay_ms(200); | |||
uart_puts("\nOcakavany znak: a\n"); | |||
znak = uart_getc_timeout(2000); // Caka na vstup znaku 2 sekundy | |||
printf("Ziskany znak: %c\n",znak); | |||
if(znak=='a'){ // Ocakavany znak je 'a' | |||
najdeny = 1; | |||
printf("Prenosova rychlost najdena: Baud = %lu \n",baud_rychlost[baud_index]); | |||
break; | |||
} | |||
} | |||
} | |||
else{ | |||
znak = uart_getc(); | |||
uart_putc(znak); | |||
} | |||
} | |||
} | } | ||
</syntaxhighlight ></tab> | </syntaxhighlight ></tab> | ||
<tab name="filename.h"><syntaxhighlight lang="c++" style="background: LightYellow;"> | <tab name="filename.h"><syntaxhighlight lang="c++" style="background: LightYellow;"> |
Verzia z 12:19, 22. apríl 2025
Záverečný projekt predmetu MIPS / LS2025 - Matúš Kráľ
Zadanie
Pri sériovej komunikácii musíme nastaviť niekoľko parametrov.: Prenosovú rýchlosť, počet dátových bitov, paritu a počet stop bitov. Vytvorte program, na automatické testovanie nastavenej prenosovej rýchlosti „druhej strany“ komunikačného kanála.

Literatúra:
Analýza a opis riešenia
Použité komponenty:
- Vývojová doska Arduino UNO (ATmega328P-PU, 16 MHz).
- UART prevodník integrovaný cez USB.
Link pre Datasheet ATmega328P: Datasheet ATmega328P
Zapojenie:
- UART prevodník bude zapojený do Arduina UNO a pomocou zapojeného prevodníka budeme vedieť komunikovať s Arduinom.

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 <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include "uart.h"
FILE uart_output = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getc, _FDEV_SETUP_READ);
const unsigned long baud_rychlost[] = {
600,
1200,
2400,
4800,
9600,
14400,
19200,
28800,
38400,
56000,
57600,
115200
};
int main(void)
{
int velkost = sizeof(baud_rychlost)/sizeof(baud_rychlost[0]);
int baud_index = 0;
int najdeny = 0;
char znak;
while (1)
{
if(najdeny == 0){
for(int i=0; i<velkost; i++){
baud_index = i;
uart_init(baud_rychlost[i]);
stdout = &uart_output;
stdin = &uart_input;
_delay_ms(200);
uart_puts("\nOcakavany znak: a\n");
znak = uart_getc_timeout(2000); // Caka na vstup znaku 2 sekundy
printf("Ziskany znak: %c\n",znak);
if(znak=='a'){ // Ocakavany znak je 'a'
najdeny = 1;
printf("Prenosova rychlost najdena: Baud = %lu \n",baud_rychlost[baud_index]);
break;
}
}
}
else{
znak = uart_getc();
uart_putc(znak);
}
}
}
#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.

Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.