Documente Academic
Documente Profesional
Documente Cultură
RAPORT
La lucrarea de laborator Nr:1
La disciplina Proiectarea Microsistemelor
Tema: Interfața serială USART.
Activarea librăriei STDIO pentru MCU AVR
Chișinău 2020
Scopul lucrării: Să se studieze interfața serială USART. Să se conecteze librăria STDIO la
modulul periferic USART. Să se realizeze aplicații, utilizînd librăria STDIO.
Sarcina lucrării: Să se dezvolte o aplicație cu MCU care ar permite dirijarea unui
LED prin terminalula atașat la interfața USART.
Noțiuni teoretice:
Un program C+ este alcatuit din una sau mai multe funcții, din care una este rădăcina
sau funcție principală și execuția începe automat cu ea. Aceasta se numește main. Funcțiile
apelate pot fi funcții predefinite descrise în fișiere header predefinite sau pot fi funcții definite
de către programator. Acestea din urmă pot fi definite în fișierul sursă care conține programul
principal sau în alt fișier numit header utilizator și cu care se creează legatura în perioada de
linkeditare prin directiva preprocesor # include.
În cazul în care programatorul își creează propriile fișiere header numele fișierului va
fi inclus între ghilimele ( " " ). Fișierul va fi conținut de directorul setat ca fiind director de
lucru.
Interfața serială USART (Universal synchronous/asynchronous receiver/transmitter)
reprezintă un standard de comunicare serială între diverse dispozitive cum ar fi comunicarea
între calculator (prin portul serial COM) şi alte dispozitive. Comunicarea serială presupune
folosirea unei singure legături dacă ea este unidirecţională, adică există un trasmiţător şi un
receptor sau invers. Dacă este bidirecţională este nevoie de două legături, pe o legătură
realizându-se transmisia iar pe alta recepţia. Dacă se foloseşte modul sincron pe lîngă
legăturile de transmisie a datelor se mai foloseşte o legătură prin care se stabileşte acelaşi
semnal de tact între dispozitive. Schema de principiu este reprezentată în figura1:
Dispozitivul care transmite date se numeşte master iar cel care primeşte se numeşte
slave. De obicei masterul stabileşte formatul cuvântului şi frecvenţa ceasului iar datele
furnizate se vor obţine la pinul TX. Slave-ul va trebui configurat astfel încât să primească
cuvinte care au acelaş format cu cele generate de master şi să funcţioneze la aceeaşi frecvenţă.
Pinul prin care un dispozitiv primeşte date este pinul RX.
Viteza de transmisie a datelor se măsoară în BAUD , unitate care reprezintă numărul de biţi
transmişi într-o secundă. Această viteză trebuie să fie egală între dispozitivele care comunică
serial. La transmisia asincronă pot apărea diverse erori deoarece frecvenţele de tact pot fi
puţin diferite chiar dacă ele sunt setate aparent egal. Acest neajuns este înlăturat la transmisia
sincronă deoarece semnalul de tact generat de master este transmis slave-ului prin legătura
XCK.
Transmisia asincronă
Pentru ca transmisia să fie bidirecţională trebuie să se utilizeze două conexiuni, una
prin care se vor trimite datele şi una prin care aceste date vor fi primite. Cuvântul care este
trimis este format din două părţi, o parte care reprezintă datele iar altă parte care reprezintă
codul de verificare.
Tabelul 1.Biții de lucru a USART
Start Data Data Data Data Data Data Data Data Stop
0 1 2 3 4 5 6 7
Orice cuvânt începe cu un bit de start care trebuie să fie 0. Următorii biţi sunt biţii de
date care pot avea o lungime între 5 şi 8 biţi iar la sfârşit este un bit de stop care întodeauna
trebuie să fie 1.
(1)
Unde BAUD reprezintă viteza de transmisie măsurată în Baud,f_int reprezită frecvenţa
internă a procesorului iar UBBR este valoarea setată în registru.
Eroarea la transmisie se calculează după formula 2:
(2)
Mersul lucrării:
1) Pentru început s-a realizat schema flux de date a circuitului din figura 7, 8 și
schema bloc a programului sursă din figura 9, 10.
main.c
_delay_ms(100);
_delay_ms(100);
}
}
Fișierul main.c
#include <avr/io.h>//Includem fisierul de adrese periferice pentru Atmega32
#include "led.h" //includem fișierul header pentru lucru cu led-ul
#include "usart.h"//includem fișierul header pentru lucru cu Usart-ul
#include <stdio.h>//includem libraria pentru functiile de intrare/iesire
{
//Configurarea porturilor A,B,C pe intrare
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0xFF;
{
printf("Tasta_gresita \r");//atunci la apasarea oricare alte taste va aparea
mesajul:”Tasta_gresita”
}
}
}
}
Fișierul usart.c
#include <avr/io.h>//Includem fisierul de adrese periferice pentru Atmega32
#include <stdio.h>//includem libraria pentru functiile de intrare/iesire
#include "usart.h"//includem fișierul header pentru lucru cu Usart-ul
static FILE mystdout = FDEV_SETUP_STREAM(USART_Transmit,USART_Receive,
_FDEV_SETUP_RW);//se defineste fluxul de lucru cu interfata seriala
UBRRH=(unsigned char)(baud>>8);
UBRRL=(unsigned char) baud;
UCSRA = (1<<U2X); //viteza de transmisie da datelor este 9600 biti/s
UCSRB=(1<<RXEN)| (1<<TXEN);//se activeaza receptia si transmisia
UCSRC=(1<<URSEL)| (1<<USBS)| (3<<UCSZ0);//lucrul cu
UBRRH,setarea a 2 biti de stop si lungimea cuvintului de date este de 8 biti
}
Figura 15. Simularea schemei electrice,afișarea primului mesaj nici o tastă apăsată,
LED stins
Figura 16.Simularea schemei electrice, tasta 1 apăsată, led aprins
Figura 19. Simularea schemei electrice, orice altă tastă apăsată, led este stins
Concluzie:
In urma efectuarii lucrarii de laborator nr #1 am reușit să înțeleg că interfața cu
utilizatorul este un subsistem specializat ce permite comunicarea între mai multe dispozitive.
Astfel am aflat că .la configurarea a două dispozitive care vor comunica serial asicron trebuie
să se ia în considerație ca viteza de transfer să fie egală la transmisie şi recepţie şi să fie
aceeaşi lungime a cuvântului de date.De asemenea trebuie totuşi să se stabilească dacă se vor
folosi unul sau doi biţi de stop.
Am înțeles că principala sursă de eroare poate apărea atunci când configurarea între
dispozitive nu este făcută corect, aceasta fiind o problemă de incompatibilitate în comunicare.
La transmiterea sau recepţia mai multor cuvinte consecutive trebuie verificat dacă
USART-ul a realizat operaţia completă de trimitere sau citire, altfel poate apărea o altă eroare
de transmisie generată de data asta de partea soft.
Am lucrat cu librăria pentru funcțiile de intrare/ieșire, putînd astfel să implimentez
această librărie pentru calculator, și anume, să transmit și să citesc datele la terminal cu
ajutorul funcțiilor oferite de această librărie: ”printf” și ”scanf”.