/// Erzeugung von Impulsen mit variabler Frequenz (von ADC abhängig) aber konstantem Tastverhältni (50%) ///// //ATmega8///// #ifndef F_CPU /* prevent compiler error by supplying a default */ #define F_CPU 1000000UL #endif #include #include #include char pulselength; char S1 = 0; char S2 = 0; char Direction = 1; uint16_t AdcValue = 0; ///////////////////////////////////////////////////////////////////////////////////////////// // Timer 0 interrupt ADC Conversion ///////////////////////////////////////////////////////////////////////////////////////////// ISR(TIMER0_OVF_vect ) { // ADC Messung ADCSRA |= (1<> 2 ) & 0xFF; // Mapping AdcValue auf pulslength 10bit -> 8bit, cut lowest bits TCNT0 = 240; } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// // Timer 2 interrupt Puls length -> calculate next signal ///////////////////////////////////////////////////////////////////////////////////////////// ISR(TIMER2_OVF_vect ) { if (Direction) { //Vorwärtsbetrieb if ((S1==1) & (S2==1)) { S1 = 0; S2 = 1; } else if ((S1==1) & (S2==0)) { S1 = 1; S2 = 1; } else if ((S1==0) & (S2==0)) { S1 = 1; S2 = 0; } else if ((S1==0) & (S2==1)) { S1 = 0; S2 = 0; } } else {}// Rückwärtsbetrieb if (S1) { PORTD |= (1<