Hallo
Ein "Bild" setzt sich aus drei Ebenen a 9 LEDs zusammen. PD4 bis PD6 sind die Ebenen, PB0 bis PB7 und PD0 die 9 Leds der jeweiligen Ebene. In den Datas sind pro Bild je drei Ebenen a 2 Bytes gespeichert. Im jeweils ersten Byte steckt in den Bits 6 bis 4 die Ebene, im Bit 0 und dem zweiten Byte die Leds der jeweiligen Ebene.
Um die Datas in eine für C verwendbare Form zu bringen, würde ich sie in ein zweidimensionales Array schreiben:
Code:
#include <stdlib.h>
#include <avr/io.h>
// #include "def.h"
// #include "muster.txt"
unsigned char muster[4][6]= // muster[Bildnummer][Bildmuster]
{
{
0b01000000, 0b00000000, // Bild 1
0b00100000, 0b00000000,
0b00010001, 0b11111111
},
{
0b01000000, 0b00000000, // Bild 2
0b00100001, 0b11111111,
0b00010000, 0b00000000
},
{
0b01000001, 0b11111111, // Bild 3
0b00100000, 0b00000000,
0b00010000, 0b00000000
},
//...
{
0b01000000, 0b00000000, // Bild 10
0b00100000, 0b01010100,
0b00010000, 0b00000000
}
};
int main(void)
{
int bildnr;
int ebene;
int dauer_bild;
int dauer_ebene;
//Pins bzw. Ports als Ausgänge konfigurieren
DDRB = 0xFF; // 0b11111111 --> Alle Pins an Port B als Ausgänge
DDRD = 0b01110001; // 0b01110001 --> Benutzte Pins an Port D als Ausgänge
while(1)
{
for ( bildnr = 0; bildnr < 4; bildnr++ )
{
for ( dauer_bild = 0; dauer_bild < 10000; dauer_bild++ ) // geschätzt
{
for (ebene = 0; ebene < 3; ebene++)
{
for(dauer_ebene = 0; dauer_ebene < 50; dauer_ebene++) // geschätzt
{
PORTD = muster[bildnr][ebene*2]; // Ebene und LED Säule 1 ausgeben
PORTB = muster[bildnr][ebene*2+1]; // LEDs Säule 2 bis 9 ausgeben
}
PORTD=0; // Ebene und LEDs aus
PORTB=0;
}
}
}
}
return 0;
}
(Selbstverständlich ungetestet)
Wenn du weiterhin das Muster includen willst, kannst du die Definition von muster[][] rauskopieren und als muster.txt speichern. Ich hoffe, das funzt so.
Sind 390 Ohm nicht etwas viel? Oder verwendest du LowCurrent-LEDs?
Gruß
mic
[Edit]
unsigned int muster[4][6] sollte natürlich ein unsigned char sein. Sorry
Lesezeichen