#include // standard integer types #include #include #include #include #include #include //gaus #include "uart2.h" // ============================= DEFINE =========================== #define SETBIT(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT))) // nastaví bit #define CLRBIT(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))) // nuluje bit //#define NEGBIT(ADDRESS,BIT) ((ADDRESS) ^= (1<<(BIT))) // neguje bit //#define TSTBIT(ADDRESS,BIT) ((ADDRESS) & (1<<(BIT))) // testuje bit #define PWM1_PORT PORTA #define PWM1_DDR DDRA #define PWM1_BIT PA7 // PA7 = ADC7 #define AVG_BUF_EXP 6 #define AVG_BUF_LEN 64 // AVG_BUF_LEN = 2^AVG_BUF_EXP = 16 for AVG_BUF_EXP == 4 #define PI 3.1415926535897932 //gaus int buff[AVG_BUF_LEN]; int sum = 0; int *pLast = &(buff[0]); int servo; int yg[AVG_BUF_LEN]; //gaus int L=AVG_BUF_LEN; //gaus double gx[AVG_BUF_LEN]; //gaus double G[AVG_BUF_LEN]; //gaus int mi=0; //gaus int sig2=1; //gaus // =========================== INIT PORTY ========================= void init_port(void) { DDRA = 0B10000000; PORTA = 255; DDRD = 0B00100011; PORTD = 255; } // =========================== ADC READ =========================== int read_ADC1(void) { ADMUX = 0b00000000; //kanál 0 ADCSRA = 0b10000110; ADCSRA |= (1< &(buff[AVG_BUF_LEN-1])) {pLast = &(buff[0]);} // end of buffer return ((sum + ( AVG_BUF_LEN / 2)) >> (AVG_BUF_EXP)); // divide by AVG_BUF_LEN } void gaus_init(void) { int i; for(i=0;i &(buff[AVG_BUF_LEN-1])) {pLast = &(buff[0]);} // end of buffer //vypocet yg for(i=0;i 20ms / 3455 dílků TCCR1B = 0b00011011; // -90°/0°/90° -> 173 - 259 - 345 // 100 - 205 - 410 ICR1 = 3455; TCNT1 = 0; OCR1A = 0; } // =========================== PWM ================================ void PWM1(int pulse1) { OCR0 = pulse1; } void PWM2(int pulse2) { OCR1A = pulse2; } ISR(TIMER0_OVF_vect) { // Timer/Counter0 Overflow if(OCR0) SETBIT(PWM1_PORT, PWM1_BIT); // pokud je generovaná hodnota nenulová, nastaví se výstup na "1" } ISR (TIMER0_COMP_vect) { // Timer/Counter0 Output Compare Match CLRBIT(PWM1_PORT, PWM1_BIT); } // ========================== PROG================================ int main(void) //ggg { uart_init(); init_port(); init_PWM1(); init_PWM2(); gaus_init(); for(int i=0;i