CATEGORII DOCUMENTE |
Aeronautica | Comunicatii | Electronica electricitate | Merceologie | Tehnica mecanica |
RULETA ELECTRONICA
Proiectul isi propune sa realizeze o ruleta electronica pornind de la o ruleta obisnuita si de la un senzor cu infrarosu. Ruleta nu va masura distante cu o precizie mai mare de un centimetru. Sistemul prin care este realizata ruleta este asemanator cu cel de la mouse-ul cu bila. Beneficiul optinut fata de o ruleta normala este acela ca distanta masurata va putea fi stocata intr-un fisier deoarece valorile vor fi transmise prin seriala pe PC.
Ruleta obisnuita va fi gaurita cu ajutorul unui burghiu din centimetru in centimetru. Senzorul va fi fixat deasupra ruletei si va detacta prezenta sau absenta unei gauri in banda ruletei. Programul va incrementa numarul gaurilor la fiecare semnal al senzorului si va optine distanta masurata.
Detectarea gaurilor se va realiza cu ajutorul a doua fante de transmisie. Se folosesc doua fante pentru detectarea sensului in care se misca ruleta. Daca ruleta se desfasoara gaura va fi sesizata mai intai de fanta A si mai apoi de fanta B iar programul va incrementa lungimea altfel procesul va fi complet invers.
Cele doua fante de transmisie sunt inglobate in doua componente fiecare aflata de o parte si de alta a ruletei. In imaginea de mai sus se vere doar una din ele.
Am realizat un montaj care conecteaza cele doua fante la placuta. Transmiterea semnalului cat si alimentarea se realizeaza printr-un cablu de PS2. Alimentarea este luata de pe placa.
In imagine se vedemufa se PS2 si cele doua fire care transmit semnalul conectate la pinii INT0 si INT1.
3.Software design
Programul pe care l-am scris porneste de la soft-ul de test care ne-a fost dat si activeaza intreruperile externe. In momentul in care o intrerupere apare sunt transmisi pe seariala niste indicatori care ne ajuta sa opservam comportarea senzorului.
.include 'C:Program FilesLabcenter ElectronicsProteus 6 ProfessionalToolsAVRASMAPPNOTESm16def.inc'
.def LEDSTATE =r18 ; registru ce descrie starea led-ului
.equ USARTDIV = divizorul ceasului de seriala
;tabela de intreruperi
.org 0
jmp main ; intrerupere reset
.org 0x002
jmp transmite0_uart
.org 0x004
jmp transmite1_uart
.org 0x00C
jmp blink ; intrerupere timer compare
.org 0x016
jmp receive_uart ; intrerupere receive seriala
.org $2A
main:
ldi r16, HIGH(RAMEND) ; initializeaza stiva
out SPH, r16
ldi r16, LOW(RAMEND)
out SPL, r16
ldi LEDSTATE, 0
ldi r21, 0x41
ldi r22, 0x42
call init_timer1
call init_ports ; initializeaza porturile
call init_uart ; initializeaza UART
call init_external
sei ; activeaza sistem intreruperi
loop:
sbis PIND, 6 ; skip daca nu s-a apasat butonul
jmp halt ; s-a apasat butonul -> salt la halt
sei ; reactiveaza intreruperi
jmp loop
halt:
cli ; dezactiveaza intreruperi
cbi PORTD, PD7 ; stinge led
jmp loop
init_ports:
push r16
ldi r16, 0x80 ; configureaza port D ca input cu exceptia PD7
out DDRD, r16
ldi r16, 0xFF ; activeaza pull-up intern pentru porturi de input
out PORTD, r16
pop r16
ret
; 9600 bps, 8 biti date, fara paritate
; intrerupere pe receive
init_uart:
push r16
ldi r16, LOW (USARTDIV) ; frecventa 9600bps
out UBRRL, r16
ldi r16, HIGH (USARTDIV)
out UBRRH, r16
ldi r16, 0x98
out UCSRB, r16
ldi r16, 0x86
out UCSRC, r16
pop r16
ret
; Intrerupere la 0.5 sec
; f prescale = 1024, CTC
init_timer1:
push r16
push r17
ldi r16, 0x00
out TCCR1A, r16
ldi r16, 0x0D
out TCCR1B, r16
ldi r26,0x01
ldi r27,0x00
out OCR1AH, r27
out OCR1AL, r26 ;Time limit in OCR1
ldi r16, 16 ;Activeaza intreruperea pe compare match
out TIMSK, r16
pop r17
pop r16
ret
;Schimba starea led-ului
blink:
com LEDSTATE ;Complementeaza starea led-ului
breq cl_led ;Led-ul e aprins
sbi PORTD, PD7 ;Aprinde led
reti
cl_led:
cbi PORTD, PD7 ;Stinge led
reti
;Primire caracter pe seriala
receive_uart:
;push r16
;in r16, UDR ;Preia caracterul
;out UDR, r16 ;Trimite caracterul inapoi
;pop r16
reti
;transmite pe seriala
transmite0_uart:
out UDR, r21
reti
;transmite pe seriala
transmite1_uart:
out UDR, r22
reti
; initializeaza conexiunile externe
init_external:
push r16
ldi r16, (1<<INT1)|(1<<INT0)
out GICR, r16
ldi r16, (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(1<<ISC00)
out MCUCR, r16
pop r16
ret
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1296
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved