C: \ User s\ l cf on\ on\ Downl oads\ oads\ PI C_VOLT_C\ LT_C\ VOLTI METR ETRO COM 3 DI GI TOS_628_c. S_628_c. c / ******************** *********************** *********************** *************
PI V_ VOLT_C PROJ PROJ ETO
VOL TI METRO COM 3 DI GI TOS TOS DE 0 A 25 VOL TS
I NI CI O : 26/ 03/ 03/ 13 TER TERM. : 27/ 27/ 03/ 03/ 13 ( VERSÃ ERSÃO O ASM) I NI CI O : 30/ 30/ 12/ 14 TER TERM. : 31/ 12/ 14 ( ESTA VERS ERSÃO EM ' C' ) AUTO AUTOR: R: CLÁUD CLÁUDI O LÁRI OS PROCESSA PROCESSAD DOR: PI C 16F628A 16F628 A OBJ ETI VO: MED EDII R TENSÕ TENSÕES ES DE 0 A 25 VO VOL TS, PARA PARA USO EM FON FONTES DE DE ALI MENTAÇ ENTAÇÃO ÃO DE BANCADA UTI LI ZA O METOD ETODO DELTA_ EL TA_SI SI GMA PARA CONVERTER VERTER A TENSÃO TENSÃO ANALÓ ANALÓG GI CA EM DI GI TAL. TAL. ( MULTI ULTI PLEXAÇAO E BASE BASE DE DE TEMPO TEMPO PARA O CONV CONVERSOR ERSOR USAND USANDO I NTERRU TERRUPÇÃO PÇÃO DO TI MER0)
PI NOS DO MI CROCO CROCONTRO NTROLLADOR: 1- NC 2- SEGU SEGUI MENTO ENTO ' C' 3- SEGU SEGUI MENTO ENTO ' D' 4- RESET ESET 5- GND 6- SEGU SEGUI MENTO ENTO ' A' 7- SEGU SEGUI MENTO ENTO ' B' 8- CATO CATODO COMUM DI SPLAY ' 0' 9- NC 10- CATODO COMUM DI SPLAY ' 2' 11- SEGU SEGUI MENTO ENTO ' E' 12- CATODO COMUM DI SPLAY ' 1' E PON PONTO 1313- NC 1414- VCC 15- SEGUI MENTO ENTO ' F' 16- SEGU SEGUI MENTO ENTO ' G' 17- RESI STOR STOR DE 47K ( DESCARG ESCARGA) 18- RESI STOR STOR DE 150 ( ENTRA ENTRAD DA)
Use os 2 r esi st ores de pr pr eci são de de 47k 47k 1% 1% na en ent r ada ada do do con conver ver sor . Capaci t or de 220nF pol i est er . Est e ar qui qui vo é par par t e i nt egr egr ant ant e do BLOG LOG LAR LARI OS. TEC TECNOLOG LOGI A. WS. Uso par a f i ns di dát i cos. cos. ********************************************************************************/ #i ncl ude <16F628 16F628A A. h> #use del ay( cl ock= ock =4000000 4000000)) / / OSCI SCI LADO LADOR RC I NTERN TERNO DO PI C #f uses us es NOWDT, I NTRC_ TRC_ I O, NOPUT, PUT, NOPROTECT, PROTECT, BRO BROWNOUT, MCLR, NOLVP, NOCPD #use f ast _ i o( a) / / MODO RÁPI DO #use f ast _ i o( b) / / MODO RÁPI DO #zer o_r am / / ZERA ERA RAM I NI CI ALMENTE ENTE / / ============================================================================== // Byt es / / ============================================================================== #byt byt e #byt byt e #byt e #byt e #byt byt e #byt e
t r i sa t r i sb port por t a port por t b cm c mc on vr con
= 0x85 0x85 = 0x86 0x86 = 0x05 = 0x06 = 0x1f 0x1 f = 0x9f 1
C: \ User s\ l cf on\ Downl oads\ PI C_VOLT_C\ VOLTI METRO COM 3 DI GI TOS_628_c. c #byt e t i mer 0= 0x01 / / ============================================================================== // Bi t s / / ============================================================================== #bi t #bi t #bi t #bi t #bi t #bi t #bi t #bi t #bi t #bi t #bi t #bi t
k0 = 0x06. 2 / / k0 k1 = 0x06. 6 / / k1 k2 = 0x06. 4 / / k2 desc = 0x05. 0 / / descar ga r a0 c2_out = 0x1f . 7/ / cmcon sai da c2 seg_a = 0x06. 0 / / seg a seg_b = 0x06. 1 / / seg b seg_c = 0x05. 3 / / seg c seg_d = 0x05. 4 / / seg d seg_e = 0x06. 5 / / seg e seg_f = 0x05. 6 / / seg f seg_g = 0x05. 7 / / seg g
/ / ============================================================================== // Vari ávei s gl obai s / / ============================================================================== i nt 8 r esc0, r esc1; i nt 1 f l ag_ds; / / ============================================================================== // Ar r ay com val or em 7 segui ment os // ( obs. modo cat odo comum, pr eci sando i nver t e ao usar par a anodo comum) / / ============================================================================== const i nt 8 c7seg [ 10] ={ // ( ABCDEFGP) 0b11111100, / * RETORNA 0 FC */ 0b01100000, / * RETORNA 1 60 */ 0b11011010, / * RETORNA 2 DA */ 0b11110010, / * RETORNA 3 F2 */ 0b01100110, / * RETORNA 4 66 */ 0b10110110, / * RETORNA 5 B6 */ 0b10111110, / * RETORNA 6 BE */ 0b11100000, / * RETORNA 7 E0 */ 0b11111110, / * RETORNA 8 FE */ 0b11110110 / * RETORNA 9 F6 */ }; / / ============================================================================== // / / Est r ut ur a par a f i ns de desl ocament o de dados / / ============================================================================== s t r uc t t o_ shi f t { i nt 8 c0; i nt 8 c1; i nt 8 r es0; i nt 8 r es1; i nt 8 r es2; } res; / / ============================================================================== // Rot i na de envi o para saí da dos segui ment os / / ============================================================================== voi d env_out ( i nt 8 a) { i f ( bi t _t est ( a, 7) ) seg_a=1; el se seg_a=0; i f ( bi t _t est ( a, 6) ) seg_b=1; el se seg_b=0; i f ( bi t _t est ( a, 5) ) seg_c=1; el se seg_c=0; 2
C: \ User s\ l cf on\ Downl oads\ PI C_VOLT_C\ VOLTI METRO COM 3 DI GI TOS_628_c. c i f ( bi t _t est ( a, 4) ) seg_d=1; el se seg_d=0; i f ( bi t _t est ( a, 3) ) seg_e=1; el se seg_e=0; i f ( bi t _t est ( a, 2) ) seg_f =1; el se seg_f =0; i f ( bi t _t est ( a, 1) ) seg_g=1; el se seg_g=0; } / / ============================================================================== // Rot i na de i nt er r upção do t i mer 0 / / ============================================================================== #I NT_TI MER0 voi d i nt _t mr0_i sr( ) { st at i c i nt 8 vez, vez1; i nt 8 aux; t i mer 0=200; / / car ga do t i mer par a 55 useg f l ag_ds=! f l ag_ds; / / si nal i za par a o conver sor del t a_si gma i f ( ++vez1>64) { / / ver i f i ca se deve mudar di gi t o do di spl ay ( mul t i pl exação) vez1=0; / / zer a cont ador auxi l i ar de mul t i pl exação k0=0; / / desl i ga anodos ( apagar di spl ays) k1=0; k2=0; i f ( ++vez>2) vez=0; / / i ncr ement a e l i mi t a a 3 di gi t os swi t ch ( vez) { case 0: {/ / sel eci ona di gi t o ' 1' ( l sb) par a apr esent ar aux=r esc0; / / pega val or aux=swap( aux)&0x0f ; / / i nver t e e l i mi t a a um ni bbl e aux=c7seg[ aux] ; / / conver t e par a 7 segui ment os env_out ( ~aux) ; / / envi a para saí das dos seg. i nver t endo p/ anodo comum k0=1; / / l i ga anodo do 1° di gi t o break; }
}
}
case 1: {/ / sel eci ona di gi t o ' 2' par a apr esent ar aux=r esc1&0x0f ; aux=c7seg[ aux] ; env_out ( ~aux) ; / / envi a par a saí das dos seg. i nver t endo p/ anodo comum k1=1; / / l i ga anodo do 2° di gi t o br eak; case 2: {/ / sel eci ona di gi t o ' 3' ( msb) par a apr esent ar aux=r esc 1; aux=swap( aux) &0x0f ; i f ( ! aux) br eak; aux=c7seg[ aux] ; env_out ( ~aux) ; / / envi a par a saí das dos seg. i nver t endo p/ anodo comum k2=1; / / l i ga anodo do 3° di gi t o br eak;
} } } / / ============================================================================== // Rot i na do conver sor Del t a Si gma // obs. usa o t i mer 0 par a pr oduzi r t empos i guai s ent r e ci cl os / / ============================================================================== i nt 16 get _adc_ds( ) { i nt 16 ci cl o=0x1000; / / 12 bi t s de r esol ução i nt 16 val =0; / / zer a r esul t ado 3
C: \ User s\ l cf on\ Downl oads\ PI C_VOLT_C\ VOLTI METRO COM 3 DI GI TOS_628_c. c for(;;){ whi l e( f l ag_ds) ; / / aguar da moment o cor r et o whi l e( ! f l ag_ds) ; / / aguarda moment o cor r et o i f ( c2_out ) {desc=1; } el se {desc=0; val ++; }/ / t est a saí da do compar ador i f ( ! - - ci cl o) {desc=0; r et ur n( val ) ; }/ / t est a f i m da conver são adc del t a- si gma } } / / ============================================================================== / / Conver t e hex 2 byt es par a deci mal 3 byt es / / ============================================================================== voi d bi n2_dec( i nt 16 a) { i nt 8 cont , aux; r es. c0=make8( a, 0) ; / / car r ega val or a conver t er r es. c1=make8( a, 1) ; r es. r es0=0; / / zer a r esul t ados r es. r es1=0; r es. r es2=0; cont =16; / / numer o de vezes da conver são f or ( ; ; ) {/ / l oop c ont i nuo shi f t _l ef t ( &r es, 5, 0) ; / / desl oca 5 byt es p/ esquer da i f ( ! - - cont ) {/ / t est a se chegou ao f i m da conver são r esc0=r es. r es0; / / copi a par a o buf f er de apr esent ação r esc1=r es. r es1; r et ur n; / / f i m da conver são } aux=r es. r es2; i f ( ( aux+0x03) &0x08) r es. r es2+=0x03; / / t est a bi t 3 aux=r es. r es2; i f ( ( aux+0x30) &0x80) r es. r es2+=0x30; / / t est a bi t 7 aux=r es. r es1; i f ( ( aux+0x03) &0x08) r es. r es1+=0x03; / / t est a bi t 3 aux=r es. r es1; i f ( ( aux+0x30) &0x80) r es. r es1+=0x30; / / t est a bi t 7 aux=r es. r es0; i f ( ( aux+0x03) &0x08) r es. r es0+=0x03; / / t est a bi t 3 aux=r es. r es0; i f ( ( aux+0x30) &0x80) r es. r es0+=0x30; / / t est a bi t 7 } } / / ============================================================================== // Rot i na Pr i nci pal / / ============================================================================== voi d mai n( ) { set up_count er s( RTCC_I NTERNAL, RTCC_DI V_1) ; set up_t i mer _1( T1_DI SABLED) ; vrcon=0b11101100; / / aj ust a vref para 2, 5 vol t s cmcon=5; / / usando um compar ador apenas t r i sa=0b00100110; t r i sb=0b00000000; / / TUDO SAÍ DA enabl e_i nt err upt s( I NT_TI MER0) ; enabl e_i nt err upt s( GLOBAL) ; / / ============================================================================== 4
C: \ User s\ l cf on\ Downl oads\ PI C_VOLT_C\ VOLTI METRO COM 3 DI GI TOS_628_c. c // Loop Pr i nci pal / / ==============================================================================
whi l e( 1) { bi n2_dec( get _adc_ds( ) ) ; / / obt em conver são del t a- si gma/ conver t e par a hex e / / apr esent a nos di spl ays de 7 seg. mul t i pl exados }
} / / ============================================================================== // Fi m do Pr ogr ama / / ==============================================================================
5