10711-mal angesehen • Hochgeladen: 01.02.2009
Einleitung
Bisher habe ich erst 5 8x8 Led Module in Gelb aufgebaut. Der Quellcode lässt sich aber sehr einfach erweitern. Ich habe mir für die Led Matrix 3 Platinen für die Module (8 pro Platine) und eine Hauptplatine gebaut. Die Hauptplatine verfügt über einen Rs232 Anschluss über den man vom PC aus Texte wie Uhrzeit an die Matrix schicken kann. Meine Led Module haben eine Gemeinsamt Kathode! Dies hat den Vorteil, dass dadurch, dass die Spalten nach einander durchgeschaltet werden, keine Kursive Schrift bei einer Laufschrift entsteht!
Ansteuerung der Module
Angesteuert werden die Module über einen AVR Mikrocontroller (ATMEGA32). An PORTC des Mikrocontrollers sind die Spalten angeschlossen, man könnte hier auch mit einem Demultiplexer arbeiten um sich Ports zu sparen. An PortD.6 habe ich die Datenleitung, an PortD.5 die Register Clock und an PortD.4 Die Taktleitung des Schieberegisters angeschlossen. Dieser Sendet seine Daten an Schiebe Register (74HC595), diese haben 8 Ports, somit wird für jedes Modul ein Schieberegister benötigt. Damit die Zeilen gleichmäßig hell leuchten habe ich MosFets ein gesetzt (IRLML6401, Beschaltung kann man im Schaltplan finden). Für die PC Verbingung habe ich einen Ganz normalen MAX232 verwendet.
MCU Software
Das Programm das auf den AVR kommt kann man sich weiter unten noch ansehen! Im Programm wird erstmal ein Standart Text festgelegt (z.B. 1234567). Dann geht eine Schleife jeden einzelen Buchstaben durch und hohlt sich die Werte für die Anzeige (Welche LED muss an?...). Nachdem Startet eine Do-Schleife in der die Leds immer wieder angesteuert werden (Multiplexing) außerdem wird in dieser Schleife immer der UART auf eintreffende Zeichen überprüft: Kommt ein Zeichen an wird ausgewertet ob es sich um ein "Befehlszeichen" handelt. So Steht das Ascii Zeichen 19 für NeuLaden und das Zeichen 20 für Anzeige Löschen. Alle andern Zeichen (Ascii größer als 31) werden in das Zeichen-Array aufgenommen und nach den Befehl Ascii 19 auf der Anzeige angezeigt.
Das PC Programm
Zum Testen habe ich noch ein recht einfaches Programm für den PC (in c#) geschrieben mit dem man Freitexte oder die Zeit (mit Timer) anzeigen lassen kann.
Downloads
Programm mit HEX File
Eagle Schaltplan und Board von der Module Platine
Passt nur für 38mm große Module mit der passenden Pinbelegung
Update 15.02.09
Hab nun schon 8 Matrixen eingelötet und schon ein Bild unten reingestellt!
Update 05.01.10
Da ich mit den Platinen einiges Falsch gemacht habe. Habe ich endlich ein richtiges Design gemacht. Hier gibt es dann ein Startboard, auf dem hinten die MCU und alle Kommunikationsbauteile sind und mehrere ExtensionBoards, auf denen nur die Module und die Schieberegister sind. Das Startboard hat natürlich auch noch LED-Module oben drauf. Ich habe die Platinen nun produzieren lassen und werde dann Bilder hier reinstellen wenn sie da sind.
Schaltpläne der beiden Boards
Quellcode
Zeigen
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Config Portc = Output
Config Portd = Output
Dout Alias Portd.6
Ss Alias Portd.5
Clock Alias Portd.4
Zeile Alias Portc
Dim Ze(8) As Byte
Dim Dat(192) As Byte
Dim Text(20) As Byte
Dim Textlen As Byte
'Dim Text As String * 15
Dim I As Byte
Dim Iend As Byte
Dim Istart As Byte
Dim Col As Byte
Dim A As Byte
Text(1) = "1"
Text(2) = "2"
Text(3) = "3"
Text(4) = "4"
Text(5) = "5"
Text(6) = "6"
Text(7) = "7"
Textlen = 7
Ze(1) = &B11111110
Ze(2) = &B11111101
Ze(3) = &B11111011
Ze(4) = &B11110111
Ze(5) = &B11101111
Ze(6) = &B11011111
Ze(7) = &B10111111
Ze(8) = &B01111111
'
Dim Buffer As Byte
Dim Prebuffer As Byte
Dim Bufferindex As Byte
Bufferindex = 1
Dim Wert As Byte
Dim Z As Byte
Iend = 8
Istart = 0
Col = 1
Dim Ff As Word
Ff = 10
'Dat(1) = 255 - 73 ' trd. module... etc...
'Dat(2) = 255 - 34
'Dat(3) = 255
'Dat(4) = 255 - 70
'Dat(5) = 255 - 73
'Dat(6) = 255 - 73
'Dat(7) = 255 - 81
'Dat(8) = 255 - 98
Dim Char As Word
Dim Tl As Word
Dim Tl2 As Word
Dim Einzelzeichen As Byte
Dim Ez As Byte
Dim Bz As Byte
Dim Beginn_zeichen As Word
Dim Db_zeiger As Word
Dim Ende_zeichen As Word
Dim B As Word
Dim Offset As Word , Offset2 As Word
Dim F As Word
Offset2 = 0
Offset = 1
B = 1
Char = Textlen
Print "hallo"
Do
Tl2 = Tl * 6
Einzelzeichen = Text(char)
Ez = Einzelzeichen
Bz = Ez - 32
Beginn_zeichen = Bz * 6
Select Case Einzelzeichen
Case "i"
Ende_zeichen = Beginn_zeichen + 1
Case " "
Ende_zeichen = Beginn_zeichen + 2
Case "`"
Ende_zeichen = Beginn_zeichen + 1
Case "."
Ende_zeichen = Beginn_zeichen + 2
Case "1"
Ende_zeichen = Beginn_zeichen + 3
Case "k"
Ende_zeichen = Beginn_zeichen + 4
Case "t"
Ende_zeichen = Beginn_zeichen + 3
Case "f"
Ende_zeichen = Beginn_zeichen + 4
Case "s"
Ende_zeichen = Beginn_zeichen + 4
Case "l"
Ende_zeichen = Beginn_zeichen + 1
Case "n"
Ende_zeichen = Beginn_zeichen + 3
Case Else
Ende_zeichen = Beginn_zeichen + 5
End Select
F = Ende_zeichen + 1
Do
Db_zeiger = F
F = F - 1
Dat(b) = Lookup(db_zeiger , Zeichensatz)
Dat(b) = 255 - Dat(b)
Incr B
Waitus 100
Next Until F = Beginn_zeichen
Char = Char - 1
Next Until Char = 0
Do
If Ischarwaiting() <> 0 Then
Buffer = Inkey()
If Buffer = 20 Then
Textlen = 1
B = 1
For Prebuffer = 1 To 20
Text(prebuffer) = 0
Next
For Prebuffer = 1 To 192
Dat(prebuffer) = 255
Next
Elseif Buffer = 19 Then
Offset2 = 0
Offset = 1
B = 1
Char = Textlen - 1
Do
Tl2 = Tl * 6
Einzelzeichen = Text(char)
Ez = Einzelzeichen
Bz = Ez - 32
Beginn_zeichen = Bz * 6
Select Case Einzelzeichen
Case "i"
Ende_zeichen = Beginn_zeichen + 1
Case " "
Ende_zeichen = Beginn_zeichen + 2
Case "`"
Ende_zeichen = Beginn_zeichen + 1
Case "."
Ende_zeichen = Beginn_zeichen + 2
Case "1"
Ende_zeichen = Beginn_zeichen + 3
Case "k"
Ende_zeichen = Beginn_zeichen + 4
Case "t"
Ende_zeichen = Beginn_zeichen + 3
Case "f"
Ende_zeichen = Beginn_zeichen + 4
Case "s"
Ende_zeichen = Beginn_zeichen + 4
Case "l"
Ende_zeichen = Beginn_zeichen + 1
Case "n"
Ende_zeichen = Beginn_zeichen + 4
Case Else
Ende_zeichen = Beginn_zeichen + 5
End Select
F = Ende_zeichen + 1
Do
Db_zeiger = F
F = F - 1
Dat(b) = Lookup(db_zeiger , Zeichensatz)
Dat(b) = 255 - Dat(b)
Incr B
Waitus 100
Next Until F = Beginn_zeichen
Char = Char - 1
Next Until Char = 0
Else
Text(textlen) = Buffer
Incr Textlen
End If
End If
Offset2 = Offset2 + 1
If Offset2 = 10 Then
Offset2 = 0
Offset = Offset + 1
If Offset = Tl2 Then
Offset = 0
End If
End If
Ss = 0
I = 0
A = A + 1
If A = 9 Then
A = 1
End If
For I = 0 To 7
Clock = 1
Dout = Dat(a + 32 + Offset).i
Clock = 0
Waitus Ff
Next
For I = 0 To 7
Clock = 1
Dout = Dat(a + 24 + Offset).i
Clock = 0
Waitus Ff
Next
For I = 0 To 7
Clock = 1
Dout = Dat(a + 16 + Offset).i
Clock = 0
Waitus Ff
Next
For I = 0 To 7
Clock = 1
Dout = Dat(a + 8 + Offset).i
Clock = 0
Waitus Ff
Next
For I = 0 To 8
Clock = 1
Dout = Dat(a + 0 + Offset).i
Clock = 0
Waitus Ff
Next
Portc = Ze(a)
Waitus 10
Ss = 1
Waitus 1300
Next
Zeichensatz:
Data 0 , 0 , 0 , 0 , 0 , 0 'Leerzeichen
Data 0 , 0 , 6 , 95 , 6 , 0 '!
Data 0 , 7 , 3 , 0 , 7 , 3 '""
Data 0 , 36 , 126 , 36 , 126 , 36 '#
Data 0 , 36 , 43 , 106 , 18 , 0 '$
Data 0 , 6 , 9 , 9 , 6 , 0 '%
Data 0 , 54 , 73 , 86 , 32 , 80 '&
Data 0 , 0 , 7 , 3 , 0 , 0 ''
Data 0 , 0 , 62 , 65 , 0 , 0 '°
Data 0 , 0 , 65 , 62 , 0 , 0 '
Data 0 , 8 , 62 , 28 , 62 , 8 '*
Data 0 , 8 , 8 , 62 , 8 , 8 '+
Data 0 , 0 , 224 , 96 , 0 , 0 ',
Data 0 , 8 , 8 , 8 , 8 , 8 '-
Data 0 , 96 , 96 , 0 , 0 , 0 '.
Data 0 , 32 , 16 , 8 , 4 , 2 '/
Data 0 , 62 , 81 , 73 , 69 , 62 '0
Data 0 , 66 , 127 , 64 , 0 , 0 '1
Data 0 , 98 , 81 , 73 , 73 , 70 '2
Data 0 , 34 , 73 , 73 , 73 , 54 '3
Data 0 , 24 , 20 , 18 , 127 , 16 '4
Data 0 , 47 , 73 , 73 , 73 , 49 '5
Data 0 , 60 , 74 , 73 , 73 , 48 '6
Data 0 , 1 , 113 , 9 , 5 , 3 '7
Data 0 , 54 , 73 , 73 , 73 , 54 '8
Data 0 , 6 , 73 , 73 , 41 , 30 '9
Data 0 , 0 , 0 , 0 , 0 , 0 ':
Data 0 , 0 , 236 , 108 , 0 , 0 ';
Data 0 , 8 , 20 , 34 , 65 , 0 '<
Data 0 , 36 , 36 , 36 , 36 , 36 '=
Data 0 , 0 , 65 , 34 , 20 , 8 '>
Data 0 , 2 , 1 , 89 , 9 , 6 '?
Data 0 , 62 , 65 , 93 , 85 , 30 '@
Data 0 , 126 , 9 , 9 , 9 , 126 'A
Data 0 , 127 , 73 , 73 , 73 , 54 'B
Data 0 , 62 , 65 , 65 , 65 , 34 'C
Data 0 , 127 , 65 , 65 , 65 , 62 'D
Data 0 , 127 , 73 , 73 , 73 , 65 'E
Data 0 , 127 , 9 , 9 , 9 , 1 'F
Data 0 , 62 , 65 , 73 , 73 , 122 'G
Data 0 , 127 , 8 , 8 , 8 , 127 'H
Data 0 , 0 , 65 , 127 , 65 , 0 'I
Data 0 , 63 , 64 , 64 , 64 , 48 'J
Data 0 , 127 , 8 , 20 , 34 , 65 'K
Data 0 , 127 , 64 , 64 , 64 , 64 'L
Data 0 , 127 , 2 , 4 , 2 , 127 'M
Data 0 , 127 , 2 , 4 , 8 , 127 'N
Data 0 , 62 , 65 , 65 , 65 , 62 'O
Data 0 , 127 , 9 , 9 , 9 , 6 'P
Data 0 , 62 , 65 , 81 , 33 , 94 'Q
Data 0 , 127 , 9 , 9 , 25 , 102 'R
Data 0 , 38 , 73 , 73 , 73 , 50 'S
Data 0 , 1 , 1 , 127 , 1 , 1 'T
Data 0 , 63 , 64 , 64 , 64 , 63 'U
Data 0 , 31 , 32 , 64 , 32 , 31 'V
Data 0 , 63 , 64 , 60 , 64 , 63 'W
Data 0 , 99 , 20 , 8 , 20 , 99 'X
Data 0 , 7 , 8 , 112 , 8 , 7 'Y
Data 0 , 97 , 81 , 73 , 69 , 67 'Z
Data 0 , 0 , 127 , 65 , 65 , 0 '[
Data 0 , 2 , 4 , 8 , 16 , 32 '
Data 0 , 0 , 65 , 65 , 127 , 0 ']
Data 0 , 4 , 2 , 1 , 2 , 4 '^
Data 128 , 128 , 128 , 128 , 128 , 128 '
Data 0 , 36 , 0 , 0 , 0 , 0 '`
Data 0 , 32 , 84 , 84 , 84 , 120 'a
Data 0 , 127 , 68 , 68 , 68 , 56 'b
Data 0 , 56 , 68 , 68 , 68 , 40 'c
Data 0 , 56 , 68 , 68 , 68 , 127 'd
Data 0 , 56 , 84 , 84 , 84 , 8 'e
Data 0 , 8 , 126 , 9 , 9 , 0 'f
Data 0 , 24 , 164 , 164 , 164 , 124 'g
Data 0 , 127 , 4 , 4 , 120 , 0 'h
Data 0 , 125 , 0 , 0 , 0 , 0 'i
Data 0 , 64 , 128 , 132 , 125 , 0 'j
Data 0 , 127 , 16 , 40 , 68 , 0 'k
Data 0 , 127 , 0 , 0 , 0 , 0 'l
Data 0 , 124 , 4 , 24 , 4 , 120 'm
Data 0 , 124 , 4 , 4 , 120 , 0 'n
Data 0 , 56 , 68 , 68 , 68 , 56 'o
Data 0 , 252 , 68 , 68 , 68 , 56 'p
Data 0 , 56 , 68 , 68 , 68 , 252 'q
Data 0 , 68 , 120 , 68 , 4 , 8 'r
Data 0 , 72 , 84 , 84 , 36 , 0 's
Data 0 , 4 , 63 , 68 , 36 , 0 't
Data 0 , 60 , 64 , 32 , 124 , 0 'u
Data 0 , 28 , 32 , 64 , 32 , 28 'v
Data 0 , 60 , 96 , 48 , 96 , 60 'w
Data 0 , 108 , 16 , 16 , 108 , 0 'x
Data 0 , 156 , 160 , 96 , 60 , 0 'y
Data 0 , 100 , 84 , 84 , 76 , 0 'z
Data 0 , 0 , 6 , 9 , 9 , 6 '{
Data 0 , 0 , 0 , 119 , 0 , 0 '|
Data 0 , 0 , 0 , 0 , 0 , 0 '}
Data 0 , 2 , 1 , 2 , 1 , 0 '~
Data 0 , 0 , 0 , 0 , 0 , 0 '
Kommentare
Kommentar verfassen
Bilder
Zum Vergrößern Klicken
|
 Modulplatine |
 Hauptplatine |
 Gesammtaufbau |
 Testtext: Hallo |
 Lötseite |
 Test: Uhr |
 Matrix mit 8 Modulen |
 Bild 2 mit 8 Modulen |
Hello, Sorry about no German Language, but I liked your project. I would be happy to see a project using TLC5940 chip in BASCOM. Greeting from India.
18:12 14.02.2010