Mit einem Overflow schreibst du zwar zur gleichen Zeit das gleiche raus, aber warum sollten die Segmente doppelt so schnell angesteuert werden? Geschrieben wird ja ach nach der Reihe. Dann ist es ja wieder das selbe....

Die Idee mit dem Steckernetzteil ist klasse... Ok dann lege ich mir P-FET's zu, das ist das einfachste, aber ich weiß nicht ob ich die Segmente aufteilen werde...

Mein code:
Code:
#include <avr/io.h>
#define F_CPU 16000000
#include <util/delay.h>
#include <avr/interrupt.h>

#define ZERO     0x3f
#define ONE      0x06
#define TWO      0x5b
#define THREE 0x4f
#define FOUR    0x66
#define FIFE    0x6d
#define SIX     0x7d
#define SEVEN 0x07
#define EIGHT 0x7f
#define NINE    0x6f


#define    t            0
#define hu        1
#define z            2
#define s            3
#define ds        4
#define m            5
#define dm        6
#define h            7
#define dh        8

#define defSek    16000
#define waits   61

volatile uint8_t stop = 0;
volatile uint8_t pause = 0;
volatile uint8_t Freigabe = 0;
volatile uint8_t block = 0;

ISR(INT0_vect) {
if(Freigabe && (stop > waits)){
  Freigabe = 0;
    block = 0;
    }
else if(!Freigabe && (stop >waits)){
    block = 0;
    Freigabe = 1;
}
}

ISR(TIMER1_COMPA_vect){
pause=0;
}

ISR(TIMER2_OVF_vect){
stop++;
if(stop == 254)
    stop = 254;
}



void func(uint8_t *A)    {
  A[t]++;
    if(A[t] == 10) { 
        A[t]= 0;
      A[hu]++;
        if(A[hu] == 10){
            A[hu]=0;
            A[z]++;
            if(A[z] == 10){
                A[z] = 0;
                A[s]++;
                if(A[s] ==10){
                    A[s] = 0;
                    A[ds]++;
                    if(A[ds] == 6){
                        A[ds] = 0;
                        A[m]++;
                        if(A[m] == 10){
                          A[m] = 0;
                          A[dm]++;
                          if(A[dm]==6){
                          A[dm]=0;
                          A[h]++;
                          if(A[h]==10){
                                  A[h]=0;
                                  A[dh]++;
                                  if(A[dh]==10)
                                A[dh]=0;
                                }
                          }                            
                      }    
                    }
                }
            }
        }
    }
}

 
int main(void)
{
 
  // set Ports
    DDRD |= ((1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7));
    PORTD &= ~((1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7));
    DDRA = 0xff;
    PORTA = 0xff;
    // set Interrupt 0
    GICR  |= (1<<INT0);
    MCUCR |= (1<<ISC01);
    
    // set TImMER 1 to CTC Mode
    TCCR1B |= (1<<CS10)|(1<<WGM12);
    TIMSK |= (1<<OCIE1A);
    
    // Set Timer 2 OVF INterrupt
    TCCR2 |= (1<<CS22)|(1<<CS21)|(1<<CS20);
    TIMSK |= (1<<TOIE2);
    
    uint8_t LINE [9][10];
    uint8_t A[9] = {0,0,0,0,0,0,0,0,0};
    uint8_t COUNT[12] = {ZERO ,ONE, TWO , THREE, FOUR, FIFE, SIX, SEVEN, EIGHT, NINE};    
    uint8_t i = 0;
    uint8_t j = 0;
    OCR1A = defSek;
    
    for (i = 0; i<10; i++)
     for(j = 0; j<11; j++){
       if(i == 1)
                LINE[i][j] = COUNT[j]|0x80;
            else
              LINE[i][j] = COUNT[j];

    }
    
    sei();
    
    while(1){
    
    
        while(pause){

            for(i = 0; i< 5; i++){
                PORTD = 0x08<<i;
                _delay_us(1);

                PORTA = LINE[i][A[4-i]];
                _delay_us(194);
                PORTD = 0x08<<i;
                _delay_us(1);
            }
        
        }
        if(Freigabe)
            func(A);    
        if(!block){
            TCNT2 = 0;
            stop = 0;
            block = 1;
        }
        pause = 1;
  }


    cli();
    return 0;
}