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
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?
Lesezeichen