conversione analogico/digitale
Salve a tutti, dopo svariati tentativi di capire perché un cavolo di programma non gira sul PIC (16F887), ho deciso di scrivere su questo forum nella speranza che l'esperienza e le conoscenze altrui possano aiutarmi. Ora, il problema è che il PIC non mi fa la conversione in digitale di ciò che gli metto all'ingresso e quindi anche se l'ingresso cambia non succede nulla (dovrebbe invertirsi il senso di rotazione delle uscite)
C'è qualche anima pia che possa dedicarmi un po' del suo tempo e darmi una mano per risolvere il problema?????
Andrew
Ecco il listato:
C'è qualche anima pia che possa dedicarmi un po' del suo tempo e darmi una mano per risolvere il problema?????
Andrew
Ecco il listato:
- Codice: Seleziona tutto
main:
BANKSEL PORTE
CLRF PORTE ; inizializzazione porte
BANKSEL TRISE
CLRF TRISE ; portE uscita
BSF TRISE,RE2 ; RE2 impostato come ingresso
BANKSEL ANSELH
CLRF ANSELH ; canali analogici da 8 a 14 come digitali
BANKSEL ANSEL
CLRF ANSEL ; canali analogici da 0 a 7 come digitali
BSF ANSEL,ANS7 ; canale ANS7 impostato come analogico
BANKSEL ADCON0
MOVLW B'00011100' ; selezione canale ANS7
MOVWF ADCON0
BANKSEL ADCON0
BSF ADCON0,ADCS0 ;selezione divisore di frequenza Fosc/8
BANKSEL ADCON0
BSF ADCON0,ADON ; abilitazione ADC
BANKSEL ADCON1
BSF ADCON1,ADFM ; risultato giustificato a destra
BANKSEL 20H
MOVLW 15H
MOVWF 20H
DECFSZ 20H,F
GOTO $-1 ; loop di ritardo per acquisizione
BANKSEL ADCON0
BSF ADCON0,GO ; avvia la conversione
BANKSEL ADCON0
BTFSC ADCON0,GO ; attendi la fine della conversione
GOTO $-1
BANKSEL ADRESH
MOVF ADRESH,W
MOVWF 110H ; sposta la parte alta della conversione in 110h
BANKSEL ADRESL
MOVF ADRESL,W
MOVWF 190H ; sposta la parte bessa della conversione in 190h
comp
BANKSEL 110H
MOVF 110H,W
SUBLW 00H ; confronto tra il risultato dell'ADC e la parte alta della soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sopra, se 1 vai a sotto
GOTO sopra
sotto
BANKSEL 190H
MOVF 190H,W
SUBLW 1FH ; confronto tra risultato ADC e parte bassa soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sopra1, se 1 vai a sotto1
GOTO sopra1
sotto1
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISD
CLRF TRISD ; portd impostato come uscita
BANKSEL PORTD
BCF PORTD,RD4 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD2 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD6 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD0 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo
BANKSEL 40H
INCF 40H,F ; incrementa registro 40h
MOVLW 64H
XORWF 40H,W ; confronto tra registro 40h e accumulatore
BTFSS STATUS,Z ; test Z: se 0 vai a sotto1, se 1 vai a main
GOTO sotto1
GOTO main
sopra
BANKSEL 190H
MOVF 190H,W
SUBLW 1FH ; confronto tra parte bassa risultato ADC e soglia
BANKSEL STATUS
BTFSS STATUS,C ; test C: se 0 vai a sotto, se 1 vai a sotto1
GOTO sotto
sopra1:
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISD
CLRF TRISD ; portd impostato come uscita
BANKSEL PORTD
BCF PORTD,RD6 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD2 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD4 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD4 ; uscita bassa
BSF PORTD,RD0 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo1
BANKSEL PORTD
CLRF PORTD
BANKSEL PORTD
BCF PORTD,RD0 ; uscita bassa
BSF PORTD,RD2 ; uscita alta
BSF PORTD,RD6 ; uscita alta
CALL ritardo1
BANKSEL 50H
INCF 50H,F ; incemente registro 50h
MOVLW 64H
XORWF 50H,W ; confronto tra registro 50h e accumulatore
BTFSS STATUS,Z ; test Z: se 0 vai a a sopra1, se 1 vai a main
GOTO sopra1
GOTO main
ritardo ; subroutine di ritardo per visualizzare la combinazione d'uscita
BANKSEL 30H
MOVLW 0FFH
MOVWF 31H
rit1 MOVWF 30H
DECFSZ 30H,F
GOTO $-1
DECFSZ 31H,F
GOTO rit1
RETURN
ritardo1 ; subroutine di ritardo per visualizzare la combinazione d'uscita
BANKSEL 60H
MOVLW 0FFH
MOVWF 61H
rit2 MOVWF 60H
DECFSZ 60H,F
GOTO $-1
DECFSZ 61H,F
GOTO rit2
RETURN
END