//************************************** // Clock Mega8 mit 8 MHz !!! //************************************** //************************************** // I N C L U D E //************************************** #include #include // Register Definitionen fuer Mega8 #include #include //************************************** // G L O B A L V A R I A B L E //************************************** unsigned char display_mem[361]={0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //10 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //20 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //30 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //40 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //60 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //70 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //80 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //90 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //100 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //110 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //120 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //130 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //140 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //150 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //160 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //170 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //180 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //190 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //200 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //210 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //220 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //230 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //240 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //250 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //260 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //270 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //280 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //300 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //320 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //330 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //350 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01, //360 0x00, //361 }; // 360 Positionen + 1 Leer unsigned int pos; //************************************** // M A I N //************************************** void main(void) { PORTD = 0x04; // Pull up on PD2 DDRD = 0xFB; // PD0-O PD1-O PD2-I PD3-I PD4-I PD5-I PD6-I PD7-I //INT 0 MCUCR = 0x02; // Int0 generate int on falling eadge GICR = 0x40; // Int0 enable //Timer1 TCCR1B = 0x09; // Timer1 / 1 & Input Capture on Rising eadge TIMSK = 0x10; // int enable on Timer1A Compare Match // int enable on Timer 1 Input Capture PORTB = 0x00; DDRB = 0xff; // PB0-7 as output PORTC = 0x00; DDRC = 0xff; // PC0-6 as output OCR1A=1000; // Startwert sei(); for( ;; ); } /********************************************************** Name: Interrupt 0 **********************************************************/ /* INTERRUPT(SIG_INTERRUPT0) { if(pos < 60 ) { // viel zu langsam OCR1A -= 100; // PORTB = 0x00; // PORTC = 0x00; } else if( pos > 60 ) { // viel zu schnell OCR1A += 100; // PORTB = 0x00; // PORTC = 0x00; } /* else { if( TCNT1 < (OCR1A/4) ) // Feinregelung OCR1A -= 10; // PORTB = 0x00; // PORTC = 0x00; else OCR1A += 10; } pos = 0; TCNT1=0; } */ SIGNAL(SIG_INTERRUPT0) { if(pos < 360 ) // zu langsam { if(pos < 350) // viel zu langsam { OCR1A -=100; } else { OCR1A -= 3; } } else if(pos > 360 ) // zu schnell { if(pos > 370) // viel zu schnell { OCR1A += 100; } else { OCR1A += 3; } } pos = 0; TCNT1=0; } /********************************************************** Name: Compare_Interrupt **********************************************************/ SIGNAL(SIG_OUTPUT_COMPARE1A) // daten ausgeben { if( pos < 361 ) { PORTB = display_mem[pos]; PORTC = display_mem[pos]; pos++; } else { pos++; } }