Also wenn du die LEDs wirklich multiplexen möchtest, wirst du auf die 74xx245 nicht verzichten können. Die sind nötig um die inaktiven Spalten vom Controller zu trennen. Wenn du die LEDs aber nicht multiplexen möchtest, sondern die Kathoden direkt an den µC anschliessen, dann kannst du nicht nur auf die 74245 verzichten, sondern auch auf die 74244 und 7404.


Naja, hier mal mein Programm das allerdings etwas komplizierter ist, da ich Interrupts verwendet habe (T0 Overflow, T1 Overflow und T1 Input Capture).

Code:
#include <avr/io.h>
#include <avr/interrupt.h>

volatile int timestamp = 0;

void init(void)
{
	//2ms: TCCR0 =	0x04; TCNT0 = 0x83;
	TCNT0 =	0x06;

	//1ms: TCCR1B = 0x01; TCNT1 = 0xC180;
	TCCR1A =	0x00;
	TCNT1 =	0xC180;

	TIMSK =	0x25;
	TIFR =	0x00;

	GICR =	0x00;
	GIFR =	0x00;
	MCUCR =	0x00;

	sei();
}

SIGNAL (SIG_INPUT_CAPTURE1)
{
	timestamp = ICR1;
}

SIGNAL (SIG_OVERFLOW1)
{	
	//T1 stop
	TCCR1B =	0x00;
	TCNT1 =	0xC180;
	
	//reverse bias
	DDRD =	0x60;
	PORTD =	0x40;
	
	//T0 start
	TCCR0 =	0x04;
}

SIGNAL (SIG_OVERFLOW0)
{
	//T0 stop
	TCCR0 =	0x00;
	TCNT0 =	0x83;
	
	//discharge
	DDRD =	0x20;
	PORTD =	0x00;
	
	//T1 start
	TCCR1B =	0x01;
}

int main(void)
{
	init();
	
	DDRC =	0xFF;
	PORTC =	0x00;
	
	//reverse bias
	DDRD =	0x60;
	PORTD =	0x40;
	
	//T0 start
	TCCR0 =	0x04;
	
	for(;;)
	{
		PORTC = timestamp >> 8;
	}
}
Als Controller habe ich einen ATmega32 verwendet, die Kathode der LED kommt an PD6(ICP1), die Anode an PD5 (hätte sie aber bei meinem ersten Test auch genausogut direkt an GND hängen können). Damit klar ist wie die LED angesteuert wird, habe ich in den Kommentaren die Bezeichnungen aus der pdf-Datei benutzt. (also "reverse bias" für den Ladevorgang und "discharge" für die Messung)