#include #include unsigned char Lauflicht1[] = {1,2,4,8,16,32}; unsigned char Lauflicht2[] = {1,2,4,8,16,32,16,8,4,2}; unsigned char Lauflicht3[] = {33,18,12}; unsigned char Lauflicht4[] = {3,6,12,24,48,33}; unsigned char Lauflicht5[] = {33,18,12,12,18,33}; unsigned char Lauflicht6[] = {9,18,36}; unsigned char Lauflicht7[] = {9,18,36,18,9}; signed char modus = 0; int i = 0; #define ADC_VREF_TYPE 0xC0 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } // Timer 1 output compare A interrupt service routine interrupt [TIM1_COMPA] void timer1_compa_isr(void) { TCNT1 = 0; OCR1A = read_adc(0) * 8 + 300; switch(modus) { case 0: PORTD = 63; break; case 1: { PORTD = ~Lauflicht1[i]; i++; if (i >= sizeof(Lauflicht1)) i = 0; } break; case 2: { PORTD = ~Lauflicht2[i]; i++; if (i >= sizeof(Lauflicht2)) i = 0; } break; case 3: { PORTD = ~Lauflicht3[i]; i++; if (i >= sizeof(Lauflicht3)) i = 0; } break; case 4: { PORTD = ~Lauflicht4[i]; i++; if (i >= sizeof(Lauflicht4)) i = 0; } break; case 5: { PORTD = ~Lauflicht5[i]; i++; if (i >= sizeof(Lauflicht5)) i = 0; } break; case 6: { PORTD = ~Lauflicht6[i]; i++; if (i >= sizeof(Lauflicht6)) i = 0; } break; case 7: { PORTD = ~Lauflicht7[i]; i++; if (i >= sizeof(Lauflicht7)) i = 0; } break; } } // Declare your global variables here void main(void) { char check = 0; // Input/Output Ports initialization // 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=P PORTB=0x01; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 PORTD=0x3F; DDRD=0x3F; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 7,813 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x05; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1A = 100; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x10; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 1000,000 kHz // ADC Voltage Reference: Int., cap. on AREF ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; // Global enable interrupts #asm("sei") while (1) { if (PINB.0 == 0 ) { delay_ms(50); if (PINB.0 == 0 && check == 0) { check = 1; i=0; modus++; if (modus > 7) modus = 0; } } else check = 0; }; }