Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AeronauticaComunicatiiElectronica electricitateMerceologieTehnica mecanica


RULETA ELECTRONICA

Tehnica mecanica



+ Font mai mare | - Font mai mic



RULETA ELECTRONICA

  1. Introducere

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.



  1. Descriere generala

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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1306
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved