Sunteți pe pagina 1din 19

Universitatea Politehnica Bucuresti

Facultatea de Transporturi
Catedra telecomenzi si electronica in transporturi

Proiect Microcontrolere
Simularea unui pupitru pentru o statie
Switch cu 2 macaze

Studenti: Mirodonie George


Vasilescu Monica Maftei Nicolae Grupa 8314

ndrumtor: As.ing Mihai Niculescu

Anul 2009
Cuprins 1.Tema 2.Proiectare Hardware 2.1 Schema Bloc 2.2 Descriere Blocuri si Calcul Componente 2.3 Schema electrica generala 2.4 Cablaj si consideratii de proiectare 2.5 Lista componente si Calcul economic 3.Proiectare Software 3.1 Descriere generala 3.2 Schema logica 3.3 Listing Software 4.Bibliografie

1.Tema Proiectul consta in simularea unei comenzi tip dispecer a macazului unei cai ferate , cu schema urmatoare:

Se presupune ca trenul va avea culoarea verde doar cand traseul sau va fi pe directia inainte, iar pe directia abatuta trenul nu va circula decat daca semaforul are culoarea rosie.

Cap 2 Proiectare Hardware


2.1 Schema Bloc

2.2 Descriere blocuri si calcul componente


Blocul selector este format din 3 butoane si el da informatia catre microcontroler pentru a simula pozitia macazurilor in schema.Fiecare buton este echivalentul unui macaz pe schema. Blocul optcuplor realizeaza izolarea microcontrolerului de perturbatiile unei surse de curent extern.Realizeaza izolarea galvanica
Microcontroler-ul ATMega 16 este livrat incapsulat in 3 variante: PDIP, TQFP si MLF, dintre care am folosit capsula PDIP cu 28 de terminale care au semnificatiile urmatoare:

VCC - pinul de alimentare in curent continuu; GND - pinul de masa al alimentarii; PA7..PA0 - portul bidirectional A pe 8 biti cu rezistente interne pull- in functie de ceasul intern ales PA6 poate fi folosit ca intrare pentru amplificatorul invertor al

oscilatorului intern, iar PA7 ca iesire de la acesta; in cazul in care se foloseste oscilatorul intern RC calibrat pentru ceasul intern PA6 si PA7 pot fi folositi ca intrare pentru numaratorul asincron; PB7..PB0 - portul bidirectional B pe 8 biti cu rezistente interne pull-up (selectate pentru fiecare bit in parte); in functie de ceasul intern ales PB6 poate fi folosit ca intrare pentru amplificatorul invertor al oscilatorului intern, iar PB7 ca iesire de la acesta; in cazul in care se foloseste oscilatorul intern RC calibrat pentru ceasul intern PB6 si PB7 pot fi folositi ca intrare pentru numaratorul asincron; PC5..PC0 - portul bidirectional C pe 7 biti cu aceleasi caracteristici ca si portul B; PC6 - apartine tot portului C dar in functie de programarea sigurantei RSTDISBL fiind pin de I/O sau pin de RESET; PD7..PD0 - portul bidirectional D pe 8 biti este similar cu portul B; AVCC - pinul de alimentare pentru convertorul A/D; AREF - pinul de referinta al convertorului A/D; Dimensiunile sunt prezentate in schema urmatoare si sunt exprimate in milimetrii:

Arhitectura interna combina un bogat set de instructiuni cu 32 de registrii de uz general care sunt conectati direct la Unitatea Aritmetico-Logica (ALU), permitand ca doua registre independente sa poata fi accesate intr-o singura instructiune executata intr-un singur tact de ceas. Spre deosebire de arhitectura CISC avem o putere de lucru de pana la 10 ori mai rapida. Microcontroler-ul dispune de 5 moduri de minimizare a consumului de energie fara a afecta buna desfasurare a activitatii acestuia: Idle, ADC Noise Reduction, Power-

Down, Power-Save si Standby. De asemenea RESET-ul poate avea 4 surse: Power-On Reset - la aplicarea tensiunii de alimentare; External Reset - aplicat pe pinul Reset cu ajutorul unui semnal extern; Watchdog Reset - cand nu se valideaza semnalul watchdog; Brown-Out Reset - daca tensiunea scade sub pragul minim. Schema interna arata pozitionarea Unitatii Aritmetico Logice si a memoriei integrate in procesorul microcontroler-ului precum si pozitionarea porturilor:

Toate porturile pot in timp real sa fie citite, modificate si scrise, atunci cand sunt folosite ca porturi digitale I/O. Aceasta inseamna ca directia unui singur pin din port poate fi modificata fara a schimba directia celorlalti pini. Toti pinii au diode de protectie fata de masa cat si fata de alimentare:

Microcontroler-ul ATMEGA16 dispune de 3 numaratoare sincronizate pe ceasul intern sau pe unul extern. Dintre cele 3 il folosim pe primul numarator pe 8 biti a carui diagrama este prezentata in continuare:

Caracteristicile numaratorului pe 8 biti sunt urmatoarele:


un singur canal de numerotare; contine generator de frecventa; numarator de impulsuri externe; divizor de frecventa pe 10 biti;

Memoria FLASH este impartita in doua sectiuni: cea de BOOT si cea de aplicatii. Ambele sectiuni au biti de blocare rezervati pentru protectia la supra scriere. Memoria dispune de 8Kb On-Chip In-System Programmable Flash pentru stocarea programului. Deoarece toate instructiunile au minim 16 biti memoria se organizeaza in pagini de 4Kb x 16 biti. Aceasta memorie poate fi rescrisa de pana la 1000 de ori.

Registrii de stare contin informatii despre rezultatul aritmetic al instructiunilor executate in mod curent. Acesti registrii nu sunt stocati automat in subrutina de tratare a intreruperilor de aceea este necesara tratarea lor prin program. Registrii sunt in numar de 8:
bit 7 - I: Valideaza intreruperea globala. Este necesara valoarea 1 cand se doreste lucrul cu intreruperile. Automat acest bit este trecut pe 0 din hardware si nu se permite intreruperea executarii instructiunilor. Din program se folosesc instructiunile speciale SEI si CLI pentru a trece bitul pe 1 sau 0 dupa caz. bit 6 - T: Stocarea bitului de copiere. Se poate copia orice bit in si din acest bit folosind instructiunea BLD si BST. bit 5 - H: Fanionul de transport pe jumatate. Este folosit in instructiuni aritmetice cat si in BCD. bit 4 - S: Bitul de semn. Este un sau exclusiv intre fanionul N si V.

bit 3 - V: Fanionul de complement aritmetic fata de 2. bit 2 - N: Fanionul de negativ. Arata cand un rezultat este negativ. bit 1 - Z: Fanionul de zero. Indica un rezultat nul in urma unui calcul. bit 0 - C: Bitul de transport. Folosit in operatii aritmetice pentru transport.

Registrii de uz general sunt impartiti in doua parti: primii 16 si urmatorii 16. Cei 32 de registrii a cate 8 biti fiecare beneficiaza de acces rapid din partea ALU ceea ce face posibila executarea unei instructiuni care foloseste 2 operanzi diferiti din registrii si scrie rezultatul inapoi intr-o singura perioada de ceas, 6 dintre cei 32 pot fi folositi ca 3 registrii de 16 biti cu adresare indirecta prin pointeri in spatiul de adrese fiind mult mai facila accesarea lor. Se pot folositi in program pentru diferite operati pe 8 biti sau 16 biti, in plus registrii 26,..,31 au functii speciale pentru adresarea pointer-ului de lucru din memoria de date asa cum am aratat mai sus. Adresele registrilor sunt urmatoarele: R0,..,R15 cu adresa 0x00,..,0x0F si R16,..,R31 cu adresa 0x10,..,0x1F. Avantajul este accesul facil la memorie, fiind mapati direct in memoria SRAM. Memoria EEPROM de date a lui ATMEGA16 are 512 biti in care octetii pot fi rescrisi de pana la 100000 de ori. Registrii de acces EEPROM sunt accesibili direct din zona de I/O. Este necesara o precautie cand se lucreaza cu aceasta zona deoarece este sensibila la fluctuatiile de voltaj. Se foloseste o procedura speciala de scriere a registrilor pe 16 biti care altereaza timpii de executie a instructiunilor. In aplicatia aleasa lucram cu registrii generali R16, R17, R18, R19 si R20 pentru stocarea variabilelor globale: temp, secunde, clipit, control si contor. Sunt folositi la calcul, la numararea secundelor, la compararea starilor si pentru contorizarea acestora. Pentru a folosi porturile D si B ca iesire si intrare, configuram pinii respectivi folosind instructiunile DDRD si DDRB cu parametrii 1 si 0 (cu 0 setam portul D pentru iesire si cu 1 setam portul B pentru intrare, deoarece: portul D il folosim pentru semnal de iesire semnal de aprindere si stingere a becurilor, portul B il folosim pentru semnal de intrare semnal de verificare a starii becurilor). Blocul releelor face separatia galvanica intre leduri si microcontroler pentru potrectia lui

Calcul componente

R=5V /13=384

U=(Rint+Re)I

Rin

=6/0,010=60 rezulta Re=440

2.3 Schema electrica generala

2.4 Cablaj si Consideratii de proiectare

2.5 Lista Componente si Calcul Economic

Nr. Crt.

Simbol

1 SS 2 R 3 R D7,D8, 4 D9 5 IC(1,2) 6 D1-D6 7 IC3-IC8 8 CUPLA 9 CABLU

Date Descriere Tehnice intrerupato r ON-ON 6A 0.25W; rezistenta 390 0.25W; rezistenta 470 leduri verde+ros duble u 200W putere optocuplor disipata dioda 100V; 1A releu cupla cablu

Buca ti

Tip

Pret(RO N) 3 0.1 0.1 3 10 6 7.5 0.36 3

Total 9 0.9 0.6 9 20 36 45 1.08 3

3 ALM015 9 6 3 2 TLP521-4 6 1N4001 DIP05-1A726 12L 3 5x2 1 panglica circuit simplu placat cu 1 cupru

5x2 10 fire 130x90m m

10 PLACA

placa

10

10 134.58

CAP 3 Proiectare software


3.1 Descriere generala a softurilor
Rjmp k: Se face salt neconditionat cu "k" pozitii fata de adresa curenta; Ldi Rd,k: Copiaza valoare k in registrul Rd; Out P,Rd: Copiaza continutul registrului Rd in registrul de intrare/iesire P; Cli: Dezactivare globala intreruperi; In Rd,P: Copiaza continutul registrului de intrare/iesire P in Rd; Andi Rd,P: Face si logic intre registru Rd si o constanta si pune rezultatul final intr-un registru final Rd Ori Rd,P: Face SAU logic ntre continutul registrului Rd si o constant si plaseaz rezultatul n registrul destinatie Rd sei: Seteaz indicatorul Global Interrupt (I) n SREG;

sbrc Rd,p: Aceasta instructiune testeaz un singur bit din registru si sare la urmtoarea instruciune dac bitul este 0. Reti :Intoarcerea din intrerupere.Adresa returnata este incarcata din stiva indicatorul de intrerupere se pune in 1

si

3.2Schema logica

start

Setare intreruperi

Setare porturi initiale

Setare mod CTC

Setare timer 1 sec

Verificarea intreruperilor

3.3 Listing software


Deschidere librarie Setare intreruperi

.include"m16def.inc" jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset
Intrerupere de o secunda

jmp prag_1sec jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset reset:
Setare memoria stiva

ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl, r16


Setare porturi

ldi r16,0x00 out ddra,r16 ldi r16,0xff out porta,r16 ldi r16,0xff

out ddrb,r16 main: cli


Setare mod CTC

ldi r16,0b00000000 out tccr1a,r16 ldi r16,0b00001000 out tccr1b,r16 in r16,timsk andi r16,0b11000011 ori r16,0b00010000

Setare timer de 1 sec

out timsk,r16 ldi r16,0x1e out ocr1ah,r16 ldi r16,0x85 out ocr1al,r16 in r16,tccr1b andi r16,0b11111000 ori r16,0b00000101 out tccr1b,r16 sei bucla: rjmp bucla
Setare intrerupere

prag_1sec:

in r20,sreg in r16,pina sbrc r16,pa0 rjmp next1 in r17,pinb andi r17,0b11111100 ori r17,0b00000010 out portb,r17 next1: rjmp next2 in r17,pinb andi r17,0b11111100 ori r17,0b00000001 out portb,r17 next2: sbrc r16,pa2 rjmp next3 in r17,pinb andi r17,0b11110011 ori r17,0b00001000 out portb,r17 next3: sbrc r16,pa3 rjmp next4 in r17,pinb andi r17,0b11110011 ori r17,0b00000100 out portb,r17 next4: sbrc r16,pa4 rjmp next5 in r17,pinb andi r17,0b11001111 ori r17,0b00100000 out portb,r17 next5: sbrc r16,pa7 rjmp end in r17,pinb andi r17,0b11001111 ori r17,0b00010000 out portb,r17 end:

in r16,pinb out portc,r16 out sreg,r20 reti

4.Bibliografie
http://www.atmel.com Curs Circuite Integrate Digitale Curs Circuie Electronice Fundamentale Curs Dispozitive Electronice SGS THOMSON Microelectronics

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