Rev 410 | Blame | Compare with Previous | Last modification | View Log | Download
#include "C:\MIHO_DAT\KROKAC\krokac.h"unsigned int StepState; // Vnitrni promenna krokusigned int StepDirection; // Smer +1/0/-1byte const StepTab[8]={ // Tabulka pro krokovy motor0b0001, // 00b0101, // 10b0100, // 20b0110, // 30b0010, // 40b1010, // 50b1000 // 60b1001, // 7};#INT_TIMER2void StepNext(){unsigned int i;StepState+=StepDirection; // posun se na dalsi kroki=StepState&0b111; // vezmi spodni 3 bity stavui=StepTab[i]; // prekoduj pomoci tabulkyoutput_bit(MOTORA,i&0b0001); // aktivuj jednotlive vystupyoutput_bit(MOTORB,i&0b0010);output_bit(MOTORC,i&0b0100);output_bit(MOTORD,i&0b1000);}void StepSetDirection(signed int Direction){if(Direction> 1) Direction= 1;if(Direction<-1) Direction=-1;StepDirection=Direction;}void StepSetTime(unsigned int16 Time){}void Delay(unsigned int16 Time){while(Time>255) {Time-=256;delay_us(256);};if(Time!=0) delay_us(Time);}void main(){unsigned int16 T;unsigned long int i;// Nastav pracovni frekvenci procesorusetup_oscillator(OSC_4MHZ);// Vypni motorovy vystupoutput_low(MOTORA);output_low(MOTORB);output_low(MOTORC);output_low(MOTORD);// Vstupy s pull-up odporemport_b_pullups(TRUE);// Inicializace A/D prevodnikusetup_adc_ports(sAN0|VSS_VDD);setup_adc(ADC_CLOCK_INTERNAL);set_adc_channel(0);// Dalsi inicializacesetup_spi(FALSE);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);setup_timer_1(T1_DISABLED);setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);// Inicializace stavovych promennychStepState=0;// Nastaveni casovacesetup_timer_2(T2_DIV_BY_16,0xFF,1);// Nastveni preruseni od casovaceenable_interrupts(global);enable_interrupts(int_timer2);for(;;){T=read_adc(ADC_READ_ONLY); // Prectu hodnoturead_adc(ADC_START_ONLY); // Ostartuji dalsi prevod (na pozadi)//setup_timer_2(T2_DIV_BY_16,T,1);if(T>0) *0x92=T; // Preload register casovace// Podle prepinacu se hybuif(input(PIN_B5)){if(input(PIN_B4)) StepSetDirection(1); else StepSetDirection(-1);}else{ int1 x; // pomocna promenna aby se volalo spozdeni jen 1xif (StepState>230) {if (!input(PIN_B4) && (x)){StepSetDirection(0);delay_ms(500);x=0;};StepSetDirection(-1);}if (StepState<30) {StepSetDirection( 1);x=1;}}//StepDirection=2;//for(i=0;i<800;i++)//{// StepNext();// Delay(T);//}//delay_ms(10);//StepDirection=-1;//for(i=0;i<800;i++)//{// StepNext();// Delay(T);//}//delay_ms(10);} // Cyklus for}