//arlotto 2006 : Démonstration d'utilisation // du module convertisseur analogique numérique // sans interruption sur un 18F4520 // Attention la doc DS51297E est erronnée : // il faut spécifier les deux références dans le param2 // de OpenAdc : ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS !!! // On convertit la tension sur RA0 et on allume // 0,1,2 ou 3 led de la carte picdem2+ en fonction // de la valeur du résultat // Initialisation : // ADC_4_TAD : ici on ne change jamais de canal // le TAD importe donc peut. Sinon choisir TAD // pour laisser le temps de charge à CHOLD // voir doc DS39631A ch 19.1 // ADC_FOSC_8 : Tad > 1.6us à 4Mhz Tosc=0.25us // Tad= K.Tosc = K.0.25us => K >1.6/0.25=3.2 // d'où K=4 // La conversion dure 12.Tad = 12x4x0.25 = 12us // ADC_RIGHT_JUST : les 10 bits du resultat sont // les 10 bits de poids fort d'un int // 14 : seule valeur possible sur la carte picdem2 avec PBADEN = OFF // pour pouvoir utiliser le lcd avec un 18F4520 // vérifer votre cablage en fonction de la combinaison choisie // ADC_CH0 : le canal 0 est sélectionné à l'init // ensuite on pourrait changer de canal par la fonction // SetChanADC() mais attention à attendre le temps // nécessaire à la charge de la capa d'acquisiton // avant de démarrer une conversion après changement de canal // Avec PBADEN = ON RB4:RB0 peuvent être utilisées comme // entrées analogiques supplémentaires (AN8 à AN12) #include #include // pour fonctions adc #include // configuration PICDEM2+ quartz #pragma config OSC = HS #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF // Si PBADEN = ON RB4:RB0 sont analogiques au reset const rom char BARGRAF[5]={0x00,0x01,0x03,0x07,0x0F}; void main(void){ int result ; PORTB = 0 ; TRISB = 0 ; OpenADC(ADC_FOSC_8 & ADC_RIGHT_JUST & ADC_4_TAD , ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, // non définit dans la doc rev. E !! 14 ); Delay10TCYx(5); // temps d'attente // après le démarrage de l'adc for( ;; ) { ConvertADC(); while( BusyADC() ) ; // delais de 12us max result = ReadADC(); PORTB = BARGRAF[result/255]; } }