Bonsoir,
Je ne vais pas faire de long discourt vu l'heure tardive, voila j'ai fini, testé, sa fonctionne, après on pourras le réécrire en MPLAB (en C)
De plus pas besoin de quartz, car ce pic possède un oscillateur interne de 4 Mhz, il suffit juste de l'activer, chose que j'ai faite.
Le code pour les intéressés
list p=16f676 ; list directive to define processor
#include <p16F676.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
;*************************************** assignations *****************************************
#DEFINE led1 PORTC,0 ; led rouge
#DEFINE led2 PORTC,1 ; led bleu
#DEFINE led3 PORTC,2 ; led vert
;**********************************************************************************************
CBLOCK H'20'
loop1 :1
loop2 :1
loop3 :1
res8 :1
res16 :1
res24 :1
ENDC
;***********************************************************************************************
ORG H'0' ; reset au démarrage
goto debut ;
ORG H'4' ; lieux des interruptions
retfie
;***********************************************************************************************
debut
call 0x3FF ;
;***********************************************************************************************
BANKSEL OSCCAL ; passer en bank 1
;***********************************************************************************************
movwf OSCCAL ;
;************************** configuration du registre ANSEL en bank 1 **************************
movlw B'00000001' ; mode numérique : 13(RA0),
movwf ANSEL ; mode analogique : 12(RA1), 11(RA2), 10(RC0),9(RC1),8(RC2), 7(RC3)
;************************ configuration du registre ADCON1 en bank 1 **************************
movlw B'00100000' ; b6 = ADCS2 choisir la fréquence de fonctionnement du convertisseur
movwf ADCON1 ; b5 = ADCS1 en fonction de la fréquence d'horloge du PIC
; b4 = ADCS0
;
;************************ configuration du registre OPTION_REG en bank 1 ***********************
movlw B'10000000' ; résistances hors service sur PORTA
movwf OPTION_REG ;
;******************** configuration des registres TRISA & TRISC en bank 1 **********************
movlw B'00000001' ; configure les pattes de TRISA
movwf TRISA ; 13(RA0),12(RA1),11(RA2),4(RA3),3(RA4),2(RA5)
movlw B'00000000' ; configure les pattes de TRISC
movwf TRISC ; 10(RC0), 9(RC1), 8(RC2), 7(RC3), 6(RC4), 5(RC5)
; alimentation sous 5 volts patte 14 mettre au moins
;***********************************************************************************************
BANKSEL ADCON0 ; passer en bank 0
;***********************************************************************************************
; b7 = ADFM détermine si le résultat de la conversion
; sera justifié à droite = 1 ou à gauche = 0
; b6 = VCFG 1 = VREF pin, 0 = VDD
movlw B'00000000' ;
movwf ADCON0 ;
;************************* configuration du registre CMCON en bank 0 **************************
movlw B'00000111'
movwf CMCON ; éteindre le comparateur
;*********************** configuration du registre INTCON en bank 0,1 **************************
clrf INTCON ; désactivé les interruptions
;***********************************************************************************************
reset
clrf PORTA
clrf PORTC
;***********************************************************************************************
; Pour avoir un état bas, milieu, haut, on divise par 3 (255 /3) = 85
; état bas de 0 à 85, état milieu de 86 à 170, état haut 171 à 255
;********************************* "sélection du canal(RA0)" ***********************************
call canal_an0 ;
;***********************************************************************************************
control_1
call numériser ; lancer la conversion
movf res8,W
sublw D'85'
btfss STATUS,C
goto control_2
bsf led1
bcf led2
bcf led3
goto control_fin
control_2
movf res8,W
sublw D'170'
btfss STATUS,C
goto control_3
bcf led1
bsf led2
bcf led3
goto control_fin
control_3
bcf led1
bcf led2
bsf led3
control_fin
call _300ms ; petite pause
goto control_1
;***********************************************************************************************
;**************************** "canaux des convertiseurs numériques" *****************************
;***********************************************************************************************
canal_an0
bcf ADCON0,CHS0 ; 000 (RA0)
bcf ADCON0,CHS1
bcf ADCON0,CHS2
return
;***********************************************************************************************
canal_an1
bsf ADCON0,CHS0 ; 001 (RA1)
bcf ADCON0,CHS1
bcf ADCON0,CHS2
return
;***********************************************************************************************
canal_an2
bcf ADCON0,CHS0 ; 010 (RA2)
bsf ADCON0,CHS1
bcf ADCON0,CHS2
return
;***********************************************************************************************
canal_an3
bsf ADCON0,CHS0 ; 011 (RA3)
bsf ADCON0,CHS1
bcf ADCON0,CHS2
return
;***********************************************************************************************
canal_an4
bcf ADCON0,CHS0 ; 100 (RC0)
bcf ADCON0,CHS1
bsf ADCON0,CHS2
return
;***********************************************************************************************
canal_an5
bsf ADCON0,CHS0 ; 101 (RC1)
bcf ADCON0,CHS1
bsf ADCON0,CHS2
return
;***********************************************************************************************
canal_an6
bcf ADCON0,CHS0 ; 110 (RC2)
bsf ADCON0,CHS1
bsf ADCON0,CHS2
return
;***********************************************************************************************
canal_an7
bsf ADCON0,CHS0 ; 111 (RC3)
bsf ADCON0,CHS1
bsf ADCON0,CHS2
return
;***********************************************************************************************
numériser
bsf ADCON0,ADON ; on lance l’acquisition (charge du condensateur)
nop
nop ; tempo pour charge du condensateur
nop
bsf ADCON0,GO ; lancer la conversion A/D
btfsc ADCON0,GO ; si le bit GO est à 1 on va à la ligne 1
goto $-D'1' ; conversion n'est pas terminer
bcf ADCON0,ADON ; fin de conversion, éteindre convertisseur
movf ADRESH,W ; sauver la valeur qui vient d'être numérisé
movwf res8 ; dans la variable "res8"
return
;***********************************************************************************************
_300ms
movlw D'51'
movwf loop1
movlw D'12'
movwf loop2
movlw D'4'
movwf loop3
decfsz loop1,F
goto $-D'1'
decfsz loop2,F
goto $-D'3'
decfsz loop3,F
goto $-D'5'
return
;***********************************************************************************************
End
Fichiers joints : fichier schéma, fichier code, fichier code compilé
A+