//15 11 2003 začetek - utripanje LED //18 11 2003 izklopljen LVP, dela displej //20 11 2003 dela AD //15 8 2004 predelano za poskus za TBP- stroj za mejenje natega zajle #include <16f877.H> #device ADC=10 #use delay(clock=600000) #fuses XT,NOWDT,PUT,BROWNOUT,NOPROTECT,NOLVP,NOWRT #zero_ram #include int i; int stopinje_cilj; //*********************************** // RUTINE ZA EEPROM //----------------------------------- //-------------- //lokacije v EE #define SEVER_AD_KONSTANTA 0 #define JUG0_AD_KONSTANTA 2 #define JUG360_AD_KONSTANTA 4 #define SPOMIN1 6 #define SPOMIN2 8 #define SPOMIN3 10 #define SPOMIN4 12 #define SPOMIN5 14 #define SPOMIN6 16 void Write_2bajta_eeprom(int ee_lokacija,long stevilo_tmp) { write_eeprom(ee_lokacija,(BYTE) (stevilo_tmp)); write_eeprom(++ee_lokacija,(BYTE) (stevilo_tmp >> 8)); } long Read_2bajta_eeprom(int ee_lokacija) { long stevilo_tmp; stevilo_tmp = read_eeprom(ee_lokacija+1); stevilo_tmp<<=8; //šifta levo za osem mest stevilo_tmp += read_eeprom(ee_lokacija); return (stevilo_tmp); } //*********************************** // KONEC RUTIN ZA EEPROM //----------------------------------- //*********************************** // 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); } long iz_ad_v_stopinje(long ad_vrednost) { long stopinje,ee_jug0,ee_jug360,ee_sever; float konst; ee_jug0=read_2bajta_eeprom(JUG0_AD_KONSTANTA); ee_jug360=read_2bajta_eeprom(JUG360_AD_KONSTANTA); ee_sever=read_2bajta_eeprom(SEVER_AD_KONSTANTA); if (ad_vrednost>ee_sever) { konst=(float)(ee_jug360-ee_sever)/180; stopinje= (float)(ad_vrednost-ee_sever)/konst+180; } else { konst=(float)(ee_sever-ee_jug0)/180; stopinje= (float)(ad_vrednost-ee_jug0)/konst; } return(stopinje); } long meri_stopinje() { return(iz_ad_v_stopinje(read_adc_30x())); } long stopinje_izpis(long stopinje) { if((float)stopinje > (float)180) stopinje=stopinje-180; else stopinje=stopinje+180; return(stopinje); } //*********************************** // KONEC RUTIN ZA AD //----------------------------------- //*********************************** // RUTINA ZA KOMUNIKACIJO RS 232 S PC //----------------------------------- #use rs232(baud=1200,xmit=pin_c6,rcv=pin_c7) void komunikacija(void) { int znak; float stopinje_za_izpis; if(kbhit()) { znak=getc(); putc(znak); if (znak=='P') { //če dobi ukaz "P ....." znak=getc(); //0=sever0st; 128=180st; 255=sever360st if(znak == 0) stopinje_cilj = meri_stopinje(); //ustavi rotor P+chr(0) else { stopinje_za_izpis = ((float)znak*360.0/254.0)+0.7; if (stopinje_za_izpis < 180) stopinje_cilj=stopinje_za_izpis+180; else stopinje_cilj=stopinje_za_izpis-180; } } } } //*********************************** // KONEC RUTINA ZA KOMUNIKACIJO RS 232 S PC //----------------------------------- #define ZVOK PIN_C5 void pisk(long dolzina) { long stevec; for(stevec=0;stevec