Sari la conținut
ELFORUM - Forumul electronistilor

Comparator pic16F628a


Vizitator adrian19

Postări Recomandate

Vizitator adrian19

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
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • francezu

    2

Zile populare

Top autori în acest subiect

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

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

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	end
Schema 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

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