#include <16f876.H> #device ADC=10 #use delay(clock=4000000) #fuses XT,NOWDT,PUT,BROWNOUT,NOPROTECT,NOLVP #zero_ram #USE STANDARD_IO (A) #USE FAST_IO(B) //*********************************** // RUTINE ZA AD //----------------------------------- long read_adc_30x() { long vsota,povprecje; int i; vsota=0; for(i=0;i<30;++i) { delay_ms(6); vsota += read_adc(); } povprecje =vsota/30; return(povprecje); } float iz_ad_v_stopinje_celzija(long ad_vrednost) { float stopinje_c; float stop_nad_25; stop_nad_25=((float)ad_vrednost-536.0)/20; //536 je AD pri 2000 ohmov=25 stopinj (stmina 20 ad/stopinjo) if (stop_nad_25>0) stop_nad_25=stop_nad_25*1.03; //nad 25 stopinj se strmina krvulje poveča za 3% stopinje_c=stop_nad_25+25.0; // printf(lcd_putc,"\r%3.3f;\n%ld; ",stopinje_c,ad_vrednost); return(stopinje_c); } float meri_stopinje_c() { return(iz_ad_v_stopinje_celzija(read_adc_30x())); } //*********************************** // KONEC RUTIN ZA AD //----------------------------------- /***********/ /* M A I N */ /***********/ main(void) { /* začetek programa */ long napetost; //INICIALIZACIJA //ANALOGNO DIGITALNI PRETVORNIK set_tris_a(0b11111111); setup_adc_ports( ALL_ANALOG ); setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 0 ); // SET_TRIS_A( 0 ); SET_TRIS_B(0Xff ); //11111111 vsi vhodi SET_TRIS_C( 0 ); //vsi izhodi output_high(PIN_C3); Delay_ms(100); output_low(PIN_C3); Delay_ms(100); output_high(PIN_C3); Delay_ms(500); output_low(PIN_C3); Delay_ms(500); while (1) { /* v naskončni zanki utripa*/ napetost = read_adc_30x(); if (napetost > 500) output_high(PIN_C3); else output_low(PIN_C3); } /* konec while zanke */ } /* konec funkcije main */