Vizitator danielmx Postat Martie 6, 2011 Partajează Postat Martie 6, 2011 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 returnIMI POATE DA CINEVA O MANA DE AJUTOR ? MULTUMESC ! Link spre comentariu
Vizitator Moş Crăciun Postat Martie 6, 2011 Partajează Postat Martie 6, 2011 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum