Sari la conținut
ELFORUM - Forumul electronistilor

Citire sensor qtr-8rc(digital) cu PIC16f876a , o idee ?


Vizitator danielmx

Postări Recomandate

Vizitator danielmx

Vreau sa realizez o aplicatie linefollower si pt detectia liniei folosesc sensorul qtr-8rc http://www.pololu.com/catalog/product/961.platforma este o masinuta din comert. partea hardware e realizata ok,testata prin generarea de cod pwm cu ajutorul microcontrolerului(motoarele functioneaza corespunzator codului aplicat(doar ca buclele de temporizare mi se par mai mari in practica decat cele teoretice create de mine)).Folosesc uc pic16f876a cu oscilator extern de 4MHZ.

Motoarele primind semnal de la uc(lucru testat)...nu mai ramane decat sa citesc sensorul(digital)...adica sa citesc in paralel cele 8 iesiri ale sensorului si sa creez comenzile corespunzatoare(stanga , dreapta ..etc). aceasta citire o voi face pe PORTB.

PROBLEMA MEA ESTE CA NU REUSESC SA CITESC ACEST SENSOR DIGITAL CARE PE SUPRAFATA ALBA AR TREBUI SA TRIMITA "0" , PE NEGRU "1". AM URMAT INFORMATIILE PREZENTATE PE DATASHEET SI PT A TESTA DACA FUNCTIONEAZA SAU NU, AM SCRIS URMATORUL COD:

 /// DECLARATIILE DE RIGOARE              movlw b'11111111'	movwf negru	movlw b'00000000'	movwf alb               call delay1s               call delay1scitsenz:	                   call delay1s                call delay1s                                ;efectuarea pasilor mentionati in catalor		bank1                                           ;apel macro pt selectia bank1...creat in prealabil	movlw b'00000000' 	movwf TRISB			; setare portb iesire	bank0	movlw b'11111111'	                          ; drive it high 	movwf PORTB		call delay10us	                           ;asteapta ~10us sa se incarce condensatorul	bank1	movlw b'11111111' 	              ;portb intrare(high impedance ?)	movwf TRISB		            bank0	call delay1ms                                      ;asteapta 1 ms apoi efectueaza citirea sensorului		movf PORTB,0   	;citire senzor paralel	movwf citiresenzor ;in acest registru voi avea bitii corespunzatori fiecarei iesiri 0=alb 1=negru;*******************************************	bank1	movlw b'00000000' 	movwf TRISC	bank0	clrf PORTC	bsf PORTC,4	;pt a activa iesirile puntii h utilizate in structura hardware	bsf PORTC,5	;pt a activa iesirile puntii h utilizate in structura hardware			movf citiresenzor,0   	subwf alb,0	btfsc STATUS,Z     ;daca valoarea citita de la portb - b'00000000' mergi la ss	goto ss		movf citiresenzor,0	subwf negru,0	btfsc STATUS,Z  ;;daca valoarea citita de la portb - b'11111111' mergi la sss altfel la mixt 	goto sss	goto mixtmixt:	bsf PORTC,1   ;comanda motor mers inainte daca am biti si in 0 si in 1	call delay1s	call delay1s	call delay1s	call delay1s	call delay1s	call delay1s	call delay1s	call delay1s	bcf PORTC,1	call delay1s	call delay1s	call delay1s	goto citsenz	ss:	bsf	PORTC,7         ;daca toti bitii 1 vireaza dr pt 1 sec		call delay1s	call delay1s	call delay1s	call delay1s	bcf PORTC,7	call delay1s	call delay1s	call delay1s	goto citsenzsss:	bsf PORTC,6                         ;daca toti bitii 0 vireaza stg pt 1 sec			call delay1s	call delay1s	call delay1s	call delay1s	bcf PORTC,6	call delay1s	call delay1s	call delay1s	goto citsenz;**********************************************		delay1s:                  ;dureaza ~ 250ms	 	movlw d'250'		movwf curloop222:decf cur,1		movlw d'249'  			movwf aaloop22:	nop		decfsz aa,1		goto loop22		movf cur,0		btfss STATUS,Z		goto loop222		returndelay1ms:		movlw d'250'  	; bucla~1 ms 		movwf aaloopm:	nop		decfsz aa,1		goto loopm		returndelay10us:		movlw d'3'  	; bucla p ~10us		movwf aaloopd:	decfsz aa,1		goto loopd		return
IMI POATE DA CINEVA O MANA DE AJUTOR ? MULTUMESC !
Link spre comentariu
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

Zile populare

Vizitator Moş Crăciun

Nu am chef să urmăresc programul în asamblor dar am 2 propuneri:1 - Scrie programe in C. Nu ies mult mai mari decât în asamblor. Microchip are compilatoare gratis (pentru uz academic) pentru toate procesoarele lor pe 8 biţi.2 - Scrie un progrămel foarte scurt care citeşte senzorul şi atât. De exemplu progrămelul aprinde un LED când e pe alb şi îl stinge pe negru. Eu, când fac programe, încep cu câteva instrucţiuni. Adaug câte puţin şi verific după fiecare adăugare. Dacă scrii un program întreg şi îl verifici la sfârşit şi nu merge ... :cry: e nasol.Cristian

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări