#define F_CPU 14745600UL #include #include #include //******************************************************************************************* // MOJE UPRAVY //------------------------------------------------------------------------------------------- // #define setb(port,pin) port |= 1<2400) uSec=2400; OCR1A=(922*(uSec/100))/10; // hlidat aby nepretekl int (cca 65000) // za cenu zaokrouhleni 921,6 na 922 //OCR1A=0.9216*uSec; //pouziti float = presne, ale zabira hodne pameti } void servo_poloha(unsigned char poloha) { // 921,6 = cca 922 = 1ms // 0,9216 = 1us // stred = 1500 us // 0st= 600us // 180st= 2400us if (poloha<0) poloha=0; if (poloha>180) poloha=180; servo_us((poloha*10)+600); } int main(void) { // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0xB0; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 2000,000 kHz // Mode: Ph. & fr. cor. PWM top=ICR1 // OC1A output: Non-Inv. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x80; TCCR1B=0x12; TCNT1H=0x00; TCNT1L=0x00; //******************************************************************** // Vypocet frekvence PWM : // ------------------------ // 1 // poz. frekvence = ---------------- /2= 50Hz // 1 // -------- * ICR1 // 2000 000 // // po uprave: (Clock je fr. timeru tj. Fr. procesoru/N , // kde N je preddelicka 1, 8, 64, 256, nebo 1024) // // // Clock (Hz) // ICR1 = ---------------------- // 2 * poz. frekvence PWM // // // // Vypocet OCR1 (na urceni stridy): // ---------------------------------- // // // Clock (Hz) * Poz. cas // OCR1 = ---------------------------- // 2 //********************************************************************* // ICR1=20000; pro 16MHz ICR1=18432; // pro 14,745600 Hz OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; while (1) { // 921,6 = cca 922 = 1ms // servo_poloha(0); _delay_ms(1000); servo_poloha(90); _delay_ms(1000); servo_poloha(180); _delay_ms(1000); }; }