Operácie

Automatické nastavenie prenosovej rýchlosti: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
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)
{
{
  unsigned int measuredValue;
int velkost = sizeof(baud_rychlost)/sizeof(baud_rychlost[0]);
 
int baud_index = 0;
  while (1)
int najdeny = 0;
  {
    /*  relax  */
char znak;
  }
 
    while (1)  
  return(0);
    {
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.


Vývojová doska Arduino UNO.

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.


Schéma zapojenia.


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.

Aplikácia.

Video:



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