2012_332AB_P3

Wiki error: Section name cannot be repeated ' '

Project Name: Cod Morse [edit]

  [edit]

I. Project Description

Scopul proiectului este implemenarea unui traducator de cod Morse pe o placuta cu 8 leduri. Pana la urma, am folosit tot PIC-ul propus la laborator. Microcontrollerul primeste pe seriala, de la EV/Z3 doua caractere care reprezinta codul ASCII al literei ce se vrea tradusa si in functie de acesta, aprinde ledurile (2 leduri aprinse inseamna o lunie, unul singur inseamna punct). De asemenea, microcontrollerul transmite inapoi pe seriala litera corespunzatoare codului ASCII, litera fiind afisata pe LCD-ul placii EV/Z3. De exemplu, cand se introduce de la tastatura lui EV/Z3 "65", pe display apare 65A, iar pe placa ledurile apar sub forma 10 11 00 00 (1 insemnand ca led-ul e aprins, 0 ca e stins).

 

 

II. Project Requirements

Pentru implementarea proiectului, am folosit placa, dupa montajul recomandat in laborator. In plus fata de placa basic, am adaugat 8 leduri, fiecare cu cate o rezistenta aferenta (am folosit microcontrollerul PIC16F628). Pentru programarea microcontrollerului, am plecat de la template-ul oferit pentru, afisajul cu 7 segmente. La initializarea placutei, toate ledurile sunt aprinse (am pus 1 pe fiecare pin). Ledurile sunt conectate, in ordine la urmatorii pini: RB3, RB0, RA3, RA2, RA1, RA0, RB5, RB4. Microcontrollerul asteapta 2 caractere, cod_1 si cod_2. In functie de valorile din cele 2 variabile (care sunt retinute ca char-uri), se retine intr-o variabila de tipul long int, led un numar de forma 10110000, iar pe TXREG se pune litera aferenta. Intr-un vector de 8 elemente (numit pin), se retine fiecare cifra a variabilei led (1 sau 0) si apoi pentru fiecare pin din cei 8 se da valoarea pin[i]. Pentru programarea placii EV/Z3, am folosit template-ul OpenWatcom de la laborator, iar cu kIo.SerialWrite scriem pe seriala, iar cu kIo.SerialRead citim. Probleme au aparut deoarece in momentul in care am incercat sa scriem de la tastatura placii, deoarece cand se apasa pe tasta "4" de ex, nu se trimite codul ASCII al lui "4". Am folosit 2 abordari: fie apasam direct tastele de pe coloana 1 a tastaturii (0,2,4,6,8) sau de pe coloana 3 (1,3,5,7,9), sau, pentru a fi mai natural, am identificat ce transmite placa cand se apasa o anumita cifra si am facut o structura de inlocuire (de ex, cand caracterul primit este '<', il inlocuim cu '4').

 

 

 

 

Theacher Proposal
- atmega 16, 50*100 placa de test, fudor.
8 leduri simulati codul Morse.
Soft: Z3 trimite codul ascii al literelor apasate prin seriala - placa va arata linie -punct in functie de codul morse.
- simulati cu buzzerul codul morse

 

III. User Flow

Placuta este o placuta de tip hobby, dar, aceasta functioneaza la fel de bine conectata la un PC prin intermediul unui HyperTerminal. Placuta poate avea un rol de amuzament, se pot face mici jocuri, prin care o persoana trimite litere placutei, iar alta persoana trebuie sa ghiceasca mesajul. De asemenea, se pot face jocuri de lumini, aducand mici modificari codului de pe placuta.

IV. Required components

Lista de componente este urmatoarea:

R1,R6

2x 100K/0.25W

R4

1x 100R/0.25W

C3-C7

5x 1MF/50V 4*7mm

C8-C9

2x 47NF/630V NEPOL.

B1

1x PUSH BUTTON KRS1273

PIC16F628A

1x PIC16F628AI/P

MAX232

1x MAX232 CPE

LM7805

1x 7805

soclu 18 pini pt PIC+MAX

2x LC18

placa test 50x100 pastile

1x placa test 50x100

1 mufa DB9 TATA

2x DB9PF

Baterie

1x 9v

D1,D2...D8

8x led 3v

R2,R3...R8

8x 330/0.25w

1
2

 

 

V. Hardware Design

Simularea in Proteus - schema circuitului Circuitul implementat in Proteus


 Rezulatatele simularii in Proteus pentru caracterele '6' si '5'

 

  VI. Software Design

Programul din microcontroller este facut astfel incat sa primeasca 2 caractere si apoi, prin intermediul unor if-uri, asociaza aprinderea aferenta a led-urilor. Functia care se ocupa de traducere este DisplayChar(rcv,c). rcv este ceea ce s-a primit pe seriala, iar c este un contor. In momentul in care c este par se retine primul caracter din codul ASCII, iar cand c este impar se retine cel de-al doilea. Sectiunea din main este:    

DisplayChar(rcv,c);				
c++;
Partea de cod in care se face retinerea codului (format din cod_1 si cod_2):
	if (cont % 2 == 0){
cod_1 = toPrint;//atoi(&toPrint);
TXREG = toPrint;
return;
}

else {
cod_2 = toPrint;//atoi(&toPrint);
TXREG = toPrint;
//cod = cod_1*10 + cod_2;
}
Un exemplu de testare a codului, pentru a retine corespondenta:

if ( cod_1 == '6' && cod_2 == '5') {led = 10110000; TXREG = 'A';}

if ( cod_1 == '6' && cod_2 == '6') {led = 11101010; TXREG = 'B';}

if ( cod_1 == '6' && cod_2 == '7') {led = 11101110; TXREG = 'C';}
 
Am procedat in mod analog pentru toate literele A-Z.
Modul in care se pun efectiv valorile logice pe pinii la care sunt conectate ledurile:
	for (i=0; i<=7; i++){
pin[i] = led % 10;
led = led/10;
}


PORTBbits.RB3 = pin[7];
PORTBbits.RB0 = pin[6];
PORTAbits.RA3 = pin[5];
PORTAbits.RA2 = pin[4];
PORTAbits.RA1 = pin[3];
PORTAbits.RA0 = pin[2];
PORTBbits.RB5 = pin[1];
PORTBbits.RB4 = pin[0];
Pentru programarea placii EV/Z3, a trebuit facuta conversia, deoarece tastatura nu furnizeaza cifra care este scrisa pe ea:
if(buffer[0]== ':') buffer[0]='1';
if(buffer[0]== '1') buffer[0]='2';
if(buffer[0]== ';') buffer[0]='3';
if(buffer[0]== '2') buffer[0]='4';
if(buffer[0]== '<') buffer[0]='5';
if(buffer[0]== '3') buffer[0]='6';
if(buffer[0]== '=') buffer[0]='7';
if(buffer[0]== '4') buffer[0]='8';
if(buffer[0]== '>') buffer[0]='9';
if(buffer[0]== '0') buffer[0]='0';
In buffer[0], respectiv buffer[1] se retine codul ASCII. Acesta se transmite pe seriala cu: kIo.SerialWrite(COM1, buffer, 2);

Caracterul transmis inapoi de microcontroller (corespondentul codului ASCII) este citit de pe seriala cu: kIo.SerialRead(COM1, buffer+2,1);

 

Afisarea pe LCD-ul lui EV/Z3 a codului trimis si a literi primite s-a facut cu: kIo.DisplayString(buffer); 

 

 VII. Results

Data about the final project implementation. Includes screenshots, movies, comments about your project in action.

VIII. Download

After you have presented your project at the laboratory (week 13-14) you will add all your sources here. Any hardware simulation used, code archive and so on.

IX. Status

 

Componente:00

Lipire componente:11

 

 

22

33

44

55

66

 

Update-uri saptamanale:

 

-saptamana 23 aprilie - cumpararea pieselor si lipirea lor

-saptamana 28 aprilie - elaborarea programelor pentru microcontroller si placa EV/Z3

-saptamana 4 mai - debugging si retusarile finale ale programelor

 

X. Personal Contribution

Grigore Mihai:

Am cumparat componente;

Am lipit componentele pe placa de test;     

 

Stoica Ovidiu:

Am programat microcontrollerul;

Am facut simularea in Proteus;

 

Activitate comuna: 

 Am facut debug la placa de test;

Am conceput programul incarcat pe placa EVZ3;