Torrentula
08.12.2010, 16:59
Hallo alle zusammen!
Ich werde einen LED-Cube nach folgendem Schaltplan (http://www.ledstyles.de/index.php?page=Attachment&attachmentID=5162&h=14fd27d042c0853320f7f045e11838b113fe8373) mit einem ATTiny 2313 aufbauen.
Nun habe ich eine Frage zum Programm. Und zwar möchte ich dieses in C umschreiben (C ist für mich verständlicher).
Das ist der Programmcode für BASCOM:
$regfile = "2313def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
$crystal = 8000000 ' Achtung: Taktfrequenz per Fusebits auf 8 MHz einstellen!
'-------------------------------------------------------------------------------------------------
' Ports auf Ausgang setzen
'-------------------------------------------------------------------------------------------------
Ddrb = &B11111111
Ddrd = &B01111111
'-------------------------------------------------------------------------------------------------
' Variablen deklarieren
'-------------------------------------------------------------------------------------------------
Dim Bild As Word ' Aktuelle Bildnummer
Dim Maxbild As Word ' Nummer des letzten Bildes (=Zahl der Bilder in der Animation)
Dim Ebene As Byte ' Ebenen-ZŠhler
Dim Dauer As Byte ' Anzeigedauer des Bildes
Dim Temp As Word ' fŸr Berechnungen
Dim Offset As Word ' Position der zu holenden Daten
'-------------------------------------------------------------------------------------------------
' Hauptprogramm
'-------------------------------------------------------------------------------------------------
Do
Maxbild = Lookup(0 , Muster) ' Anzahl der gespeicherten Bilder holen
Maxbild = Maxbild - 1 ' 1 abziehen, da von 0 ab gezŠhlt wird
For Bild = 0 To Maxbild ' Bilder durchzŠhlen
For Dauer = 0 To 27 ' Dauer des Bildes, pro Durchlauf ca. 15 ms - also hier ca. 0,4 sek.
For Ebene = 0 To 2 ' 3 Ebenen durchmultiplexen
Offset = Bild * 6 ' Offset Berechnen, 6 Byte pro Bild
Temp = Ebene * 2 ' 2 Byte pro Ebene
Offset = Offset + Temp
Offset = Offset + 2 ' 1. Eintrag Ÿberspringen (Zahl der Bilder)
Portd = Lookup(offset , Muster) ' 1. Byte-Muster ausgeben
Offset = Offset + 1
Portb = Lookup(offset , Muster) ' 2. Byte-Muster ausgeben
Waitms 5 ' diese Ebene fŸr 5 ms anzeigen
Next Ebene
Next Dauer
Next Bild
Loop ' Programm von vorne beginnen
End
'-------------------------------------------------------------------------------------------------
Muster:
'-------------------------------------------------------------------------------------------------
$include "muster.txt" ' Datei mit Mustern einbinden
Und so sieht mein Programm im Moment aus:
#include <stdlib.h>
#include <avr/io.h>
// #include "def.h"
#include "muster.txt"
int main(void) {
int bilder;
int dauer;
int ebene;
/*###Initialisierungsphase###*/
//Pins bzw. Ports als Ausgänge konfigurieren
DDRB |= 0x00; //00000000 --> Alle als Ausgänge
DDRD |= 0x00; //00000000 --> Alle als Ausgänge
for ( bilder = 1; bilder <= 12; ++bilder ){
for ( dauer = 1; dauer = 27; ++dauer ){
for (ebene = 1; ebene = 3; ++ebene){
}
}
}
}
"def.h" ist estmal nicht weiter wichtig. "muster.txt" ist die Datei, die mit diesem Programm (http://www.ledstyles.de/index.php?page=Attachment&attachmentID=5171&h=eb9af6df748be87f0ec569f49ba2482bfb89953f) erstellt wurde. Sie liegt im gleichen Verzeichnis, wie die Quelldatei.
Meine muster.txt sieht im moment so aus:
Data 12% ' 12 Bilder in der Animation
Data &B01000000, &B00000000' Bild 1
Data &B00100000, &B00000000
Data &b00010001, &B11111111
Data &B01000000, &B00000000' Bild 2
Data &B00100001, &B11111111
Data &b00010000, &B00000000
Data &B01000001, &B11111111' Bild 3
Data &B00100000, &B00000000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 4
Data &B00100001, &B11111111
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 5
Data &B00100000, &B00000000
Data &b00010001, &B11111111
Data &B01000000, &B00000000' Bild 6
Data &B00100000, &B00000000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 7
Data &B00100000, &B00111000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 8
Data &B00100001, &B00010001
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 9
Data &B00100000, &B10010010
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 10
Data &B00100000, &B01010100
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 11
Data &B00100000, &B00111000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 12
Data &B00100000, &B00000000
Data &b00010000, &B00000000
1. Wie ist es möglich die muster.txt in die For-Schleife für die "ebene"-Variable zu implementieren?
2. Wie müssten eventuelle Änderungen am Programm / muster.txt aussehen?
So werden die Bits für den Cube definiert
Data &B01000001, &B11111111 ' oberste Ebene an
Data &B00100000, &B00000000 ' mittlere Ebene an
Data &B00010000, &B00000000 ' untere Ebene an
Die Reihen nach dem komma (z.B. &B11111111) setzen die bits für die Säulen.
Vielen Dank!
Torrent
Ich werde einen LED-Cube nach folgendem Schaltplan (http://www.ledstyles.de/index.php?page=Attachment&attachmentID=5162&h=14fd27d042c0853320f7f045e11838b113fe8373) mit einem ATTiny 2313 aufbauen.
Nun habe ich eine Frage zum Programm. Und zwar möchte ich dieses in C umschreiben (C ist für mich verständlicher).
Das ist der Programmcode für BASCOM:
$regfile = "2313def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
$crystal = 8000000 ' Achtung: Taktfrequenz per Fusebits auf 8 MHz einstellen!
'-------------------------------------------------------------------------------------------------
' Ports auf Ausgang setzen
'-------------------------------------------------------------------------------------------------
Ddrb = &B11111111
Ddrd = &B01111111
'-------------------------------------------------------------------------------------------------
' Variablen deklarieren
'-------------------------------------------------------------------------------------------------
Dim Bild As Word ' Aktuelle Bildnummer
Dim Maxbild As Word ' Nummer des letzten Bildes (=Zahl der Bilder in der Animation)
Dim Ebene As Byte ' Ebenen-ZŠhler
Dim Dauer As Byte ' Anzeigedauer des Bildes
Dim Temp As Word ' fŸr Berechnungen
Dim Offset As Word ' Position der zu holenden Daten
'-------------------------------------------------------------------------------------------------
' Hauptprogramm
'-------------------------------------------------------------------------------------------------
Do
Maxbild = Lookup(0 , Muster) ' Anzahl der gespeicherten Bilder holen
Maxbild = Maxbild - 1 ' 1 abziehen, da von 0 ab gezŠhlt wird
For Bild = 0 To Maxbild ' Bilder durchzŠhlen
For Dauer = 0 To 27 ' Dauer des Bildes, pro Durchlauf ca. 15 ms - also hier ca. 0,4 sek.
For Ebene = 0 To 2 ' 3 Ebenen durchmultiplexen
Offset = Bild * 6 ' Offset Berechnen, 6 Byte pro Bild
Temp = Ebene * 2 ' 2 Byte pro Ebene
Offset = Offset + Temp
Offset = Offset + 2 ' 1. Eintrag Ÿberspringen (Zahl der Bilder)
Portd = Lookup(offset , Muster) ' 1. Byte-Muster ausgeben
Offset = Offset + 1
Portb = Lookup(offset , Muster) ' 2. Byte-Muster ausgeben
Waitms 5 ' diese Ebene fŸr 5 ms anzeigen
Next Ebene
Next Dauer
Next Bild
Loop ' Programm von vorne beginnen
End
'-------------------------------------------------------------------------------------------------
Muster:
'-------------------------------------------------------------------------------------------------
$include "muster.txt" ' Datei mit Mustern einbinden
Und so sieht mein Programm im Moment aus:
#include <stdlib.h>
#include <avr/io.h>
// #include "def.h"
#include "muster.txt"
int main(void) {
int bilder;
int dauer;
int ebene;
/*###Initialisierungsphase###*/
//Pins bzw. Ports als Ausgänge konfigurieren
DDRB |= 0x00; //00000000 --> Alle als Ausgänge
DDRD |= 0x00; //00000000 --> Alle als Ausgänge
for ( bilder = 1; bilder <= 12; ++bilder ){
for ( dauer = 1; dauer = 27; ++dauer ){
for (ebene = 1; ebene = 3; ++ebene){
}
}
}
}
"def.h" ist estmal nicht weiter wichtig. "muster.txt" ist die Datei, die mit diesem Programm (http://www.ledstyles.de/index.php?page=Attachment&attachmentID=5171&h=eb9af6df748be87f0ec569f49ba2482bfb89953f) erstellt wurde. Sie liegt im gleichen Verzeichnis, wie die Quelldatei.
Meine muster.txt sieht im moment so aus:
Data 12% ' 12 Bilder in der Animation
Data &B01000000, &B00000000' Bild 1
Data &B00100000, &B00000000
Data &b00010001, &B11111111
Data &B01000000, &B00000000' Bild 2
Data &B00100001, &B11111111
Data &b00010000, &B00000000
Data &B01000001, &B11111111' Bild 3
Data &B00100000, &B00000000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 4
Data &B00100001, &B11111111
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 5
Data &B00100000, &B00000000
Data &b00010001, &B11111111
Data &B01000000, &B00000000' Bild 6
Data &B00100000, &B00000000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 7
Data &B00100000, &B00111000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 8
Data &B00100001, &B00010001
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 9
Data &B00100000, &B10010010
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 10
Data &B00100000, &B01010100
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 11
Data &B00100000, &B00111000
Data &b00010000, &B00000000
Data &B01000000, &B00000000' Bild 12
Data &B00100000, &B00000000
Data &b00010000, &B00000000
1. Wie ist es möglich die muster.txt in die For-Schleife für die "ebene"-Variable zu implementieren?
2. Wie müssten eventuelle Änderungen am Programm / muster.txt aussehen?
So werden die Bits für den Cube definiert
Data &B01000001, &B11111111 ' oberste Ebene an
Data &B00100000, &B00000000 ' mittlere Ebene an
Data &B00010000, &B00000000 ' untere Ebene an
Die Reihen nach dem komma (z.B. &B11111111) setzen die bits für die Säulen.
Vielen Dank!
Torrent