ÿÿC_VARV_AdrHiMSB€V_FILLNbr de cellules allumées€V_CLEARNbr de cellules éteintes€V_FlagFlag€V_tmp€V_NbrCar!Nbre de caractères de l'afficheur€V_dBm#Pour 0 dBm sur le dernier caractèreÿÿCListeÿÿCModule~Xtal 20 MHz Afficheur : B4...B7 Data C0 RS C1 E C6,C7 Led's Clip ÿÿCSautÿÿCStRout InitÿÿCLcd1þûTexteÿÿCCptÿADCON0 Register b7,b6 ADCS1:ADCS0 Fosc/32 b5...b3 CHS2:CHS0 AN0... AN7 b2 GO/DONE Démarrage de la conversion si = 1 b1 Non implémenté b0 ADON A/D converter module activé si = 11þú1 B'10001001'þý1ADCON0ß=€ÿ„ADCON1 REGISTER b7 ADFM Justifié à droite si = 1 Justifié à gauche si = 0 b6 ADCS2 A/D Conversion Clock select bit (Utilisé conjointement avec ADCON1) b5:b4 Non implémenté b3:b0 PCFG3:PCFG0 A/D Port Configuration bits 1þ1 B'00000010'þ÷1ADCON1=ÿÿ CRegistre_ Sélection canal AN0 CHS0ADCON0ûCSTATUSü€ #Positionne le Flag canal 0V_FlagCSTATUS€  Aqu_AN€ 1þ½TexteÿÿCCptTest 1V_FILLa1D'0'þ =€  Pass1€ 1V_CLEAR1D'0'þ=€   Pass2 €  € € Sélection canal AN1CHS0ADCON0ÒCSTATUS¼€ #Positionne le Flag canal 0V_FlagCSTATUS€ Aqu_AN€1þþTexte€1V_FILLþ1D'0'þþ=€ Pass1€1V_CLEAR1D'0'þ=€ Pass2 € € Start 16F870ÿ€? € €)Initialisation du pic et des variables  €  ÿÿCCodeBANK1€Port B en sortie 1þ1 B'00000000'þ1TRISB=€Port C en sortie 1þý1 B'00000000'þþ1TRISCý=/€BANK0€7Mise à 0 du Flag b0 Bit canal gauche ou droite 1þý1 B'00000000'þþ1V_Flagþð=€1þ1D'0'þ1V_FILLþ=€ A/D Result variable High Byte 1þ1D'0'þ1V_AdrHiþ=€ 1þ1 B'00000000'þ÷1PORTC=€ Pour afficheur 2x 20 caractères1þ1D'20'þ÷1V_NbrCarþ=€  5dBm =6 pour 20 caractères (3 pour 2x40 caractères) 1þ1D'6'þ÷1V_dBmþ=Initÿ€?Ÿ  € €ÿ…TACQ = Amplifier Settling Time + Hold Capacitor Charging Time + Temperature Coefficient = TAMP + TC + TCOFF = 2 µS + TC + [(Temperature - 25°C)(0.05 µS/°C)] TC = Chold (RIC + RSS + RS) In(1/2047) = - 120 pF (1 K + 7 K + 10 K) In(0.0004885) = 16.47 µS TACQ = 2 µS + 16.47 µS + [(50°C - 25°C)(0.05 µS/°C) = 19.72 µS soit ~20µS  €  ÿÿCTempoT_20µS20€ Démarrage de l'acquisition AN GOADCON0vCSTATUSwÿÿCRegTestgTeste si acquisition terminée ADCON0 - DONE (C'est en fait le bit ADCON0 - GO/DONE) Sinon on attend GOADCON0CSTATUSþ €€aADRESH A/D Result Register High Byte On sauve le contenu de ADRESH dans la variable V_AdrHi 1þþ1ADRESHþ1V_AdrHiþ=€ÿñDétermine la tension d'entrée sur convertisseur A/N 256/Nbre de caractères de l'afficheur 256/20=12,8 pour 5V : valeur arrondie à 12 --> soit 5,31Vmax (5V/12)x12.75 Pour 2V --> V_Fill = 6 soit 2,34V (6/12,75)x5V On utilise des valeurs arrondies car on ne travaille que sur les 8 bits MSB justifiés à gauche, on perd donc les 2 bits du LSB Cela se traduit par une inactivité de l'afficheur pour les tensions < 0,2V (Sur 10 bits on ferait le calcul sur 1024 au lieu de 256) 1V_AdrHiþ1V_dBmþð1V_FILLþ/€ Y a-t-il dépassement? 1V_FILL1V_NbrCar>@€ 0Il n'y a pas de dépassement... Teste le canal 0V_FlagCSTATUS €  Led canal gauche OFF7PORTCCSTATUS€  1V_NbrCarþð1V_FILLþ1V_CLEARþ-€  Led canal droite OFF 6PORTCCSTATUS €  @€CIl y a dépassement... Teste sur quel canal a lieu le dépassement 0V_FlagCSTATUSÿ€  Led canal gauche ON 7PORTCCSTATUS€ ?On limite l'affichage au nbr max de caractères de l'afficheur 1þ1V_NbrCarþð1V_FILLþ= €  €  Led canal droite ON 6PORTCCSTATUSª € Aqu_ANÿ€?ÅO € €GOn commence le remplissage de l'afficheur avec des caractères pleins  €  €€Caractère spécial Alt 152 1þÿÿÿCBoucle1V_FILLPass1ÿ€? € €.On termine en affichant des caractères vides  €  €€1þ V€1V_CLEARPass2ÿ€?ÿÿC_TEMPO15000WAIT_4msDélais Gest. LCD^€4500 WAIT_1500µsDélais Gest. LCD^€100 WAIT_100µsDélais Gest. LCD^€20T_20µS16F870j_CP_OFF & _BODEN_OFF & _WRT_ENABLE_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC & _DEBUG_OFF & _CPD_OFF APORTC,0PORTC,1PORTB,4PORTB,5PORTB,6PORTB,70x200