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:
(Selbstverständlich ungetestet)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; }
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







Zitieren

Lesezeichen