Hallo Freunde, Ich habe mal eine Frage an euch... Bin gerade dabei mir eine LED Matrix zu bauen (Okay... Hardware steht schon)... Nun bin ich dabei die Software zu schreiben... Das Multiplexing funktioniert schon einwandfrei... Mir geht es jetzt darum, wie ich am besten mein "charSet" definiere & darstelle. Es soll in erster linie ein "Würfel" werden. zum einmaligen starten würde ich gerne einen Lauftext anzeigen lassen. Mir fehlen an dieser Stelle die Ideen, wie ich das am besten & intiligentesten umsetzen könnte... Habt ihr Vorschläge für mich?
Hier der aktuelle Quellcode...
___________________________________
Hier der aktuelle Quellcode...
___________________________________
Code:
/* Definiert die Frequenz */
#define F_CPU 8000000
/* Deklariert die Reihen ( LOW AKTIV ) " 1 - 7 " */
#define ROW_1_ENABLE PORTA &= ~(1<<PA0)
#define ROW_2_ENABLE PORTA &= ~(1<<PA1)
#define ROW_3_ENABLE PORTA &= ~(1<<PA2)
#define ROW_4_ENABLE PORTA &= ~(1<<PA3)
#define ROW_5_ENABLE PORTA &= ~(1<<PA4)
#define ROW_6_ENABLE PORTA &= ~(1<<PA6)
#define ROW_7_ENABLE PORTA &= ~(1<<PA5)
#define ROW_8_ENABLE PORTA &= ~(1<<PA7)
#define ROW_1_DISABLE PORTA |= (1<<PA0)
#define ROW_2_DISABLE PORTA |= (1<<PA1)
#define ROW_3_DISABLE PORTA |= (1<<PA2)
#define ROW_4_DISABLE PORTA |= (1<<PA3)
#define ROW_5_DISABLE PORTA |= (1<<PA4)
#define ROW_6_DISABLE PORTA |= (1<<PA6)
#define ROW_7_DISABLE PORTA |= (1<<PA5)
#define ROW_8_DISABLE PORTA |= (1<<PA7)
/* Deklariert die Spalten " 1 - 7 " */
#define COLUMN_1_ENABLE PORTC |= (1<<PC3)
#define COLUMN_2_ENABLE PORTC |= (1<<PC4)
#define COLUMN_3_ENABLE PORTC |= (1<<PC5)
#define COLUMN_4_ENABLE PORTC |= (1<<PC6)
#define COLUMN_5_ENABLE PORTC |= (1<<PC7)
#define COLUMN_6_ENABLE PORTB |= (1<<PB2)
#define COLUMN_7_ENABLE PORTB |= (1<<PB1)
#define COLUMN_8_ENABLE PORTB |= (1<<PB0)
#define COLUMN_1_DISABLE PORTC &= ~(1<<PC3)
#define COLUMN_2_DISABLE PORTC &= ~(1<<PC4)
#define COLUMN_3_DISABLE PORTC &= ~(1<<PC5)
#define COLUMN_4_DISABLE PORTC &= ~(1<<PC6)
#define COLUMN_5_DISABLE PORTC &= ~(1<<PC7)
#define COLUMN_6_DISABLE PORTB &= ~(1<<PB2)
#define COLUMN_7_DISABLE PORTB &= ~(1<<PB1)
#define COLUMN_8_DISABLE PORTB &= ~(1<<PB0)
/* Umbennung der Eingabe ( Taster ) */
#define TASTER_1 (!(PIND & (1<<PD5))
#define TASTER_2 (!(PIND & (1<<PD6))
#define TASTER_3 (!(PIND & (1<<PD3))
#define TASTER_4 (!(PIND & (1<<PD4))
/* Summer */
#define SUMMER_AUS PORTC |= (1<<PC2)
#define SUMMER_AN PORTC &= ~(1<<PC2)
/* Multiplex Zeit */
#define MULTIPLEX 1
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
/* VRAM */
const int charSlash [8] =
{0B01111111,
0B10111111,
0B11011111,
0B11101111,
0B11110111,
0B11111011,
0B11111101,
0B11111110,};
uint8_t VRAM [8] =
{
};
uint8_t Test;
int main(void)
{
DDRA |= ((1<<PA0) | (1<<PA1) | (1<<PA2) | (1<<PA3) | (1<<PA4) | (1<<PA5) | (1<<PA6) | (1<<PA7));
DDRB |= ((1<<PB0) | (1<<PB1) | (1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7));
DDRC |= ((1<<PC3) | (1<<PC4) | (1<<PC5) | (1<<PC6) | (1<<PC7));
sei();
TIMSK |= (1<<TOIE1);
TCCR1B |= (1<<CS11) | (1<<CS10);
TCNT1 = 0xFFFF;
while(1)
{
COLUMN_1_ENABLE;
PORTA = VRAM[0];
_delay_ms(MULTIPLEX);
COLUMN_1_DISABLE;
COLUMN_2_ENABLE;
PORTA = VRAM[1];
_delay_ms(MULTIPLEX);
COLUMN_2_DISABLE;
COLUMN_3_ENABLE;
PORTA = VRAM[2];
_delay_ms(MULTIPLEX);
COLUMN_3_DISABLE;
COLUMN_4_ENABLE;
PORTA = VRAM[3];
_delay_ms(MULTIPLEX);
COLUMN_4_DISABLE;
COLUMN_5_ENABLE;
PORTA = VRAM[4];
_delay_ms(MULTIPLEX);
COLUMN_5_DISABLE;
COLUMN_6_ENABLE;
PORTA = VRAM[5];
_delay_ms(MULTIPLEX);
COLUMN_6_DISABLE;
COLUMN_7_ENABLE;
PORTA = VRAM[6];
_delay_ms(MULTIPLEX);
COLUMN_7_DISABLE;
COLUMN_8_ENABLE;
PORTA = VRAM[7];
_delay_ms(MULTIPLEX);
COLUMN_8_DISABLE;
}
}
ISR(TIMER1_OVF_vect)
{
if (Test <= 7)
{
Test = Test + 1;
}
else
{
Test = 0;
}
switch (Test)
{
case 0:
{
VRAM[0] = charSlash[0];
VRAM[1] = charSlash[1];
VRAM[2] = charSlash[2];
VRAM[3] = charSlash[3];
VRAM[4] = charSlash[4];
VRAM[5] = charSlash[5];
VRAM[6] = charSlash[6];
VRAM[7] = charSlash[7];
}
break;
}
}