/************************************************************** Project : PWM Version : 1.0 Date : 21.2.2009 Author : Comentar: manualni PWM - melo by se dat ritit pomoci tlacitek Pouzita serva: HS-422 Chip type : ATmega128 Program type : Application Clock frequency : 16,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 1024 **************************************************************/ #include #include #include //##################################################################### #define NSTEP 10 #define NDELAY 100 //bylo tu 500 int isdelay = 0; //######################TLACITKA PRO SERVO 1################################ //###########################INT0 UP########################### ISR (SIG_INTERRUPT0) { if (isdelay) return; PORTB=~PORTB; //pro kontrolu funce (ostatni LED na portu B blikaji) int tmp=(int)OCR1A; if ((tmp+NSTEP)<255) OCR1A+=NSTEP; else OCR1A=255; isdelay=1; } //###########################INT1 DOWN########################### ISR (SIG_INTERRUPT1) { if (isdelay) return; PORTB=~PORTB; //pro kontrolu funce (ostatni LED na portu B blikaji) int tmp=(int)OCR1A; if ((tmp-NSTEP)<0) OCR1A-=NSTEP; else OCR1A=0; isdelay=1; } //######################TLACITKA PRO SERVO 2################################ //###########################INT2 UP########################### ISR (SIG_INTERRUPT2) { if (isdelay) return; PORTB=~PORTB; //pro kontrolu funce (ostatni LED na portu B blikaji) int tmp=(int)OCR1B; if ((tmp+NSTEP)<255) OCR1B+=NSTEP; else OCR1B=255; isdelay=1; } //###########################INT3 DOWN########################### ISR (SIG_INTERRUPT3) { if (isdelay) return; PORTB=~PORTB; //pro kontrolu funce (ostatni LED na portu B blikaji) int tmp=(int)OCR1B; if ((tmp-NSTEP)<0) OCR1B-=NSTEP; else OCR1B=0; isdelay=1; } //##################################################################### void preruseni_init(void) // uvodni nastaveni podminek pro povoleni preruseni { EICRA = 0; EIMSK = 0x0f; SREG |= (1<0;i--) { for (n=100;n>0;n--); } isdelay=0; }