8381-mal angesehen • Hochgeladen: 05.12.2008
Einleitung
Für dieses Projekt benötigt man nicht viele Teile nur einen AVR (ATMega32, 16 oder 644), 6 Transistoren, die Leds und ein paar Widerstände und Kondensatoren. Also Sachen, die vom Wert her um die 25€ liegen (mit China LEDs die nicht umbedingt schlecht sein müssen), mit denen man schöne Effekte realiesieren kann.
Elektronik
Ich hab die Matrix also eigentliche 2x12 Matrix aufgebaut. Sie ist aber so gebaut das sie letztendlich eine 4x6 Matrix ergibt. Am AVR sind an Port C und D die 12 Schaltleitungen angeschlossen und an Port A sind die 6 Farbausgänge(2xR 2xG 2xB). Jeder Punkt kann 256 Farben darstellen (1Byte/Pixel -> RRRGGGBB). Der AVR dimmt dabei die 6 Ports der SoftwarePWM.
Software auf dem AVR
Die Software kann über den UART Daten vom Computer erhalten und speichert diese als Animation, die dann auf der Matrix dargestellt werden. Das Programm Dimmt die A Ports per Software (ist RRR -> 111 ist die Rote LED 7 Ticks an ist RRR -> 001 ist sie nur 1 Tick an), somit gibt es für Rot und Grün 7 Farben und für Blau 3, also insgesamt (2^8) 256 Farben
PC Software
Auf dem PC lassen sich ganz einfach über eine Software einzelne Biler einer Animation erstellen, diese werden dann über die serielle Schnittstelle an den AVR übertragen.
Projekt-Status
Die Matrix ist gerade im Testaufbau als 2x3 Matrix, die einwandfrei funktioniert. Die PC Software ist noch nicht vorhanden und das AVR Programm kann auch noch keine Daten empfangen, aber dies werd ich demnächst in Angriff nehmen.
Schaltplan
Quellcode
Zeigen
$regfile "m32def.dat"
$crystal = 1000000
$baud = 9600
Config Porta = Output
Config Portc = Output
Porta = 0
Portc = 0
Dim Mo As Byte
Dim W As Byte
Dim A As Integer
Dim T As Byte
Dim Temp As Byte
Dim T2 As Byte
Dim T3 As Byte
Dim I As Byte
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim Thispixel As Byte
T = 10
A = 0
T3 = 5
T2 = 10
Dim Pixel(6) As Byte 'rrrgggbb
Pixel(1) = B00001000 ' Farben einstellen
Pixel(2) = &B00011000
Pixel(3) = &B00111000
Pixel(4) = &B00000111
Pixel(5) = &B00000011
Pixel(6) = &B00000001
'bbgggrrr
Do
A = 0
For I = 1 To 3
For A = 0 To T
Select Case I
Case 1
Porta = &B00000110
Case 2
Porta = &B00000101
Case 3
Porta = &B00000011
End Select
Thispixel = I
R.0 = Pixel(thispixel).0 'temporar speichern
R.1 = Pixel(thispixel).1
R.2 = Pixel(thispixel).2
G.0 = Pixel(thispixel).3
G.1 = Pixel(thispixel).4
G.2 = Pixel(thispixel).5
B.0 = Pixel(thispixel).6
B.1 = Pixel(thispixel).7
For W = 0 To 6
Temp = 6 - W
Waitus T2
If R > W Then
Portc.2 = 1
Else
Portc.2 = 0
End If
Next
For W = 0 To 6
Temp = 6 - W
Waitus T2
If G > W Then
Portc.0 = 1
Else
Portc.0 = 0
End If
Next
For W = 0 To 3
Temp = 3 - W
Waitus T2
If B > W Then
Portc.1 = 1
Else
Portc.1 = 0
End If
Next
Next
Portc = 0
Waitms T3
Next
For I = 4 To 6
For A = 0 To T
Select Case I
Case 4
Porta = &B00000110
Case 5
Porta = &B00000101
Case 6
Porta = &B00000011
End Select
Thispixel = I
R.0 = Pixel(thispixel).0 'temporar speichern
R.1 = Pixel(thispixel).1
R.2 = Pixel(thispixel).2
G.0 = Pixel(thispixel).3
G.1 = Pixel(thispixel).4
G.2 = Pixel(thispixel).5
B.0 = Pixel(thispixel).6
B.1 = Pixel(thispixel).7
For W = 0 To 6
Temp = 6 - W
Waitus T2
If R > W Then
Portc.5 = 1
Else
Portc.5 = 0
End If
Next
For W = 0 To 6
Temp = 6 - W
Waitus T2
If G > W Then
Portc.3 = 1
Else
Portc.3 = 0
End If
Next
For W = 0 To 3
Temp = 3 - W
Waitus T2
If B > W Then
Portc.4 = 1
Else
Portc.4 = 0
End If
Next
Next
Portc = 0
Waitms T3
Next
Next
Kommentare
Bisher noch keine
Kommentar verfassen