#include #include #include void Port_Initial(void); //Ports konfigurieren void Timer1_Initial(void); //Timer1 Initialisieren void Timer1_Start(void); //Timer1 starten bei 5 void Timer1_Stop(void); //Timer1 stopen void CompareA_Start(void); //CompareA von Timer1 aktivieren void CompareA_Stop(void); //CompareA von Timer1 stopen void CompareB_Start(void); //CompareB von Timer1 aktivieren void CompareB_Stop(void); //CompareB von Timer1 stopen unsigned int Read_ADC(unsigned char adc_input); //AD-Wandler auslesen //Globale Variablen volatile unsigned short intZ_SV; //Servowert/Position volatile unsigned short intZ_20; //Zähler für 20ms Wert; volatile unsigned short intZ_01; //Zähler für 1-2ms Wert; volatile unsigned char intPWM; //Wert für 4kHz PWM-Signal volatile unsigned char intSeV; //Wert für Servosignal 1-2ms volatile unsigned char intYN; //Boolean Yes/Now Y/N volatile unsigned int intBB; #define ADC_VREF_TYPE 0xC0 SIGNAL (SIG_OVERFLOW1); //Timerinterrupt von Timer1 SIGNAL (SIG_OUTPUT_COMPARE1A); //Interrupt Timer1 Compare Match A SIGNAL (SIG_OUTPUT_COMPARE1B); //Interrupt Timer1 Compare Match B int main(void) { typedef unsigned char BYTE; typedef unsigned short WORD; //Wert von Analogwandler Pin A0 unsigned int intADW; unsigned int intTmp; intYN = 'N'; intZ_01 = 1500; intZ_20 = 2100; ADCSR=0x87; Port_Initial(); Timer1_Initial(); sei(); //Wichtig Interrupts aktivieren PORTB = 0xFF; TCNT1 =5; Timer1_Start(); TCCR1A = (1<1000) intTmp = 1000; intTmp= intTmp/4; intSeV = intTmp; intPWM = intTmp; if (intADW>1000) intADW = 1000; intZ_SV = intADW + 1000; } } //Timerinterrupt von Timer1 SIGNAL (SIG_OVERFLOW1) { unsigned char intBB; Timer1_Stop(); intZ_20 = intZ_20 - 250; if (intZ_20 == 0) { PORTB = 0xFF; //Port ein intYN = 'N'; //Abfallende Flanke erreicht? intZ_20 = 21000; //Startwert für 20 ms intZ_01 = intZ_SV; //Startwert für 1-2ms } if ((intZ_01<250)&&(intYN =='N')) { if (intZ_01 == 0) { intYN ='Y'; PORTB &= ~(1<