T-T-T-T-T-T-Tripplepost!!!!

Code:
//***Included Files**//

#include 	"i2cmaster/i2cmaster.h"
#include 	<util/delay.h>
#include	<stdio.h>
#include	<avr/io.h>
#include 	<stdlib.h>

//***Defines***//

#define DS1307 	0xD0
#define R1		PD0
#define R2		PD1
#define R3		PD3
#define R4		PD4
#define R5		PD2

#define C1		PB0
#define C2		PB1
#define C3		PB2
#define C4		PB3
#define C5		PB4

#define COLUMN	PORTB
#define	ROW		PORTD

unsigned char time_s;
unsigned char time_m;
unsigned char time_h;
unsigned char zehner;
unsigned char einer;

//***Mainfunction***//
int main (void)
{

//***Initilize I/O***//

		DDRB = (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4);		// PB0 to PB4 as Output	(Columns)
		DDRD = (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4);		// PD0 to PD4 as Output	(Rows)

	//set_clock(0x00, 0x00);
	//set_clock(0x01, 0x24);
	//set_clock(0x02, 0x20);

	ROW = 0xff;
	COLUMN = 0x00;
	int i;
	int reihe[5] =	{	~((1<<R1)|(0<<R2)|(0<<R3)|(0<<R4)|(1<<R5)),
						~((0<<R1)|(1<<R2)|(0<<R3)|(1<<R4)|(0<<R5)),
						~((0<<R1)|(0<<R2)|(1<<R3)|(0<<R4)|(0<<R5)),
						~((0<<R1)|(1<<R2)|(0<<R3)|(1<<R4)|(0<<R5)),
						~((1<<R1)|(0<<R2)|(0<<R3)|(0<<R4)|(1<<R5))};

	int spalte[5] = {(1<<C1),(1<<C2),(1<<C3),(1<<C4),(1<<C5)};

	while (1)
	{
			for(i=0; i<5; i++)
			{
				COLUMN = 0x00;
				COLUMN = spalte[i];
				ROW = reihe[i];
			}
	}

	return 0;
}

Mit diesem Coder teste ich grad das Multiplexen. Die Idee ist ganz einfach:

Da ich eine 5x5 Matrix habe kann ich Spalten und Reihen gleichzeitig hochzählen (for-Schleife).

Mein Problem ist jetzt, dass nicht nur das diagonale Kreuz, welches angezeigt werden soll, leuchtet sondern noch die "umliegenden" LEDs. Also in etwas so:

Code:
11011
11111
01110
11111
11011
Das lag zuerst daran, dass die Spalten aktualisiert aktualisiert wurde während die Reihen noch "die alten" sind. Darum habe ich mit der Zeile
Code:
COLUMN = 0x00;
abgeschaltet. Der Vorgang war also:

1. Spalte abschalten (damit ist die Matrix komplett aus)
2. Reihe aktualisieren
3. Spalte aktualisieren (Damit wird die Matrix wieder eingeschaltet)

Aber das funktioniert auch nicht. Erst mit einem 1ms-Delay leuchtet nur das gewünschte diagonale Kreuz. Aber das Delay kostet wieder Helligkeit.

Jemand ne Idee woher das Problem kommt und wie man es lösen kann?