Sunteți pe pagina 1din 7

Ministerul Educaţiei Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea de Calculatoare, Informatică şi Microelectronică
Departamentul Ingineria Software si Automatica

Raport
Lucrare de laborator nr.1
La disciplina: Sisteme incorporate
Tema: Interactiunea cu utilizatorul

A verificat: Ilco Valentin

Chişinău 2018
Scopul lucrării:
- Implementarea STDIO pentru controller;
- Comunicarea serială.

Sarcina:
- Se citește un șir de caractere (maxim 30 de caractere) din terminalul virtual. Să se vizualizeze cu
ajutorul unui LED prin codul morse acest șir.

Analiza
Standard IO. Acest fișier declară facilitățile standard IO implementate în avr-libc. Datorită naturii
hardware-ului de bază, este implementat doar un subset limitat de standard IO. Nu există o implementare
reală a fișierului disponibilă, deci poate fi efectuată numai dispozitivul IO al dispozitivului. Deoarece nu
există niciun sistem de operare, aplicația trebuie să furnizeze suficiente detalii despre dispozitivele lor,
pentru a le face utilizabile de către facilitățile standard IO.
Din cauza constrângerilor de spațiu, unele funcționalități nu au fost implementate deloc (cum ar fi
unele din transformările printf care au fost lăsate în afara).
Cu toate acestea, utilizatorii potențiali ai acestei implementări ar trebui avertizați: familia de funcții
printf și scanf, deși de regulă este asociată cu lucruri probabil simple, cum ar fi celebrul "Hello World!" ,
sunt de fapt destul de complexe, ceea ce face ca includerea lor să mănânce o cantitate echitabilă de spațiu
de cod. De asemenea, ele nu sunt rapide datorită naturii interpretării șirului de formate la momentul
executării.
Ori de câte ori este posibil, recurgerea la facilitățile de conversie predefinite (uneori nestandardizate)
oferite de avr-libc va costa de obicei mult mai puțin în ceea ce privește viteza și dimensiunea codului.Ca o
metodă alternativă la fdevopen () , macrofdev_setup_stream () ar putea fi folosit pentru a configura o
structură FILE furnizată de utilizator
Trebuie remarcat faptul că conversia automată a unui caracter de linie nouă într-un retur de călătorie -
secvența de linie nouă rupe transferurile binare. Dacă se dorește transferul binar, nu trebuie efectuată
nicio conversie automată, ci orice șir care are ca scop emiterea unei secvențe CR-LF trebuie să utilizeze
în "\r\n"mod explicit.
Pentru comoditate, prima convorbire la fdevopen()care se deschide un flux pentru citire va face ca
fluxul rezultat să fie aliasat stdin. De asemenea, primul apel la fdevopen() care se deschide un flux pentru
scriere va face ca fluxul rezultat să fie aliasat atât la stdout,, și stderr. Astfel, dacă deschiderea a fost
făcută atât cu intenția de citire cât și cu scrierea, toate cele trei fluxuri standard vor fi identice. Rețineți că
aceste pseudonime nu se disting unul de celălalt, apelând astfel fclose()la un astfel de flux va închide
efectiv toate pseudonimele sale.
Este posibil să legați date suplimentare de utilizator la un flux folosind fdev_set_udata () . Funcțiile
backend put și get funcții pot extrage aceste date de utilizator folosind fdev_get_udata () , și pot acționa în
mod corespunzător. De exemplu, o singură funcție pusă ar putea fi folosită pentru a vorbi cu două UART-
uri diferite în acest fel, sau funcțiile de punere și de a obține pot păstra starea internă între apelurile de
acolo.

Schema

Fig.1 - Schema de simulare in Proteus


Fig.2 - Schema bloc
Implementare
const char* MorseTable[] = {
// 0 1 2 3 4 5 6 7 8 9
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..",
"----.",
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--",
"--..",
};
int dotLength = 300;
int dashLength = dotLength*3;
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
char ch;
if(Serial.available()){
ch = Serial.read();
flashDashDot(MorseTable[ch]);
// delay(dotLength*2)
}
}
void flashDashDot(const char * morseCode)
{
int i = 0;
while(morseCode[i] != 0)
{
if(morseCode[i] == '.'){
dot();
} else if (morseCode[i] == '-'){
dash();
}
i++;
}
}
void dot()
{
digitalWrite(13, HIGH);
delay(dotLength);
digitalWrite(13, LOW);
delay(dotLength);
}
void dash()
{
digitalWrite(13, HIGH);
delay(dashLength);
digitalWrite(13, LOW);
delay(dotLength);
}
Concluzii
În cadrul acestei lucrări de laborator sa acumulat experienta de a lucra cu apliactia Proteus si IDE
Arduino. Cu ajutorul IDE Arduino si Proteus sa facut simularea unui semnal cu ajutorul codului MORSE.
Sa implementat un program care citeste de la terminal un string si cu ajutorul codului morse este citit si
rezultatul este afisat cu ajutorul unui LED.

S-ar putea să vă placă și