Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

conversione analogico/digitale

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] conversione analogico/digitale

Messaggioda Foto Utenteandrew93 » 6 mag 2012, 19:36

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:
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
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti