Vizitator adrian19 Postat August 13, 2009 Partajează Postat August 13, 2009 Salutare!Incerc sa folosesc un comparator din pic pentru a detecta daca este intuneric sau nu. La unul din pini am pus un divizor de tensiune ce contine un fotorezistor, iar la celalalt pin un rezistor variabil. Aprind un led atunci cand este intuneric si as vrea sa-l sting odata ce revine lumina. Problema e ca ledul ramane aprins continuu. Folosesc o intrerupere pentru a determina modificarea iesirii de la comparator. Cand are loc intreruperea execut urmatorul cod:ON_OFF BTFSC CMCON, C2OUT BSF PORTB, 0 BTFSS CMCON, C2OUT BCF PORTB, 0 BCF INTR_COMP, 0 RETURN Ce mi s-a parut ciudat e ca odata ce ledul este aprins tensiunea de la divizor scade undeva la 0.6 - 0.8V si nu se mai modifica deloc, chiar daca luminez sau acopar fotorezistorul.Cu ce gresesc? Ce ma sfatuiti sa iau in calcul? Link spre comentariu
francezu Postat August 13, 2009 Partajează Postat August 13, 2009 Cum ai configurat registrul CMCON,dar TRISA ? Ce inseamna INTR_COMP (poate CMIF)? Nu ai nevoie de intreruperi, totul se poate face intr-o bucla in care se interogheaza iesirea comparatorului si se opereaza asupra iesirii in consecinta.Doar daca vrei ca ,,in acelasi timp'' sa mai faca si altceva pic-ul trebuie sa folosesti intreruperi.Chestia cu 0,6 V apare probabil pentru ca ai setat referinta interna. Ar fi bine sa postezi codul intreg precum si o schema cu legaturile pe care le-ai facut,deoarece exista mai multe moduri de configurare a comparatoarelor. Link spre comentariu
Vizitator adrian19 Postat August 13, 2009 Partajează Postat August 13, 2009 Am incercat sa realizez programul fara intrerupere si a functionat dupa cum ma asteptam. Concluzionez ca e din cauza setarilor legate de intreruperi. Multumesc pentru idee. Link spre comentariu
francezu Postat August 13, 2009 Partajează Postat August 13, 2009 Pai in intrerupere trebuia sa resetezi flag-ul CMIF chiar inainte de retfie.Uite cum as fi facut eu fara intreruperi : ;********************************************************************** list p=16F628A #include <p16F628A.inc> errorlevel -302 __Config 0x3D38 cblock 0x20 count1 counta countb endc led equ 0 org 0x0000 START ;Configurare movlw b'00000101' movwf CMCON ;config. un comparator independent bsf STATUS, RP0 ;selecteaza bank 1 movlw b'00100110' ;seteaza intrarile movwf TRISA movlw 0x00 ;seteaza iesirile movwf TRISB bcf STATUS, RP0 ;selecteaza bank 0 clrf PORTB clrf PORTA Loop btfss CMCON,C2OUT goto Loop call d100 btfss CMCON,C2OUT goto Loop bsf PORTB,led btfsc CMCON,C2OUT goto $-1 call d100 btfsc CMCON,C2OUT goto $-4 bcf PORTB,led goto Loop d100 ;intarziere de 100ms (pt. clock de 4MHz) movlw d'100' movwf count1d1 movlw 0xC7 movwf counta movlw 0x01 movwf countbDelay_0 decfsz counta, f goto $+2 decfsz countb, f goto Delay_0 decfsz count1 ,f goto d1 retlw 0x00 endSchema si fisierul hex in atasament.R1 si R5 se ajusteaza pentru a se acoperi plaja de reglaj dorita in functie de tipul fotorezistentei folosite. 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