PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dotmatrix



Stiff-Master
04.03.2007, 17:15
Hi erst mal
wir haben folgendes Problem:
sind seit kurzer Zeit in die Mikrocontrollertechnik eingestiegen. Haben auch schon einige kleine Projekte gemeistert, sind nun aber an einem großerem Projekt hängen geblieben.
Also das Problem ist folgendes:
Es soll eine Led-Dot-Matrixanzeige 10x100 Led's mit einem Controler angesteuert werden. Sie soll hinterher wie eine Anzeige in einem Zug - verschiedene Haltestellen anzeigen. (Beim Theater)

Haben uns folgendes überlegt:
Die 10 Zeilen wollen wir über Mosfets ansteuern (Buz 11 - ( oder kennt ihr besseren))
Bei den 100 Spalten wollen wir Schieberegister verwenden (74HC595), die dann über einen ULN die Led's auf Ground ziehen.

Nun zu den Fragen:
Auf Grund der Größe der Anzeige sind wir uns nicht sicher ob die anzuzeigenden Wörter flimmerfrei darstellbar sind.
Denn nach unseren Nachforschungen wird ja 1. Zeit zum multiplexen und 2. Zeit zum beschreiben der Schieberegister benötigt.
Des Weiteren haben wir Fragen zum pragramieren in Bascom. Gibt es fertige Buchstaben bzw. kann man welche definieren und wenn ja woher weiß das Programm welche Led's es ansteuern soll.

Weitere Fragen werden sich wahrscheinliche ergeben - bzw. wenn ihr weitere Fragen haben wollt dann fragt.

Besten Dank schon mal
Jonas + Stefan

digitali
04.03.2007, 23:23
Vor einiger Zeit habe ich an einem Wochenende mal was aehnliches zusammengeschraubt:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=27693

Das laesst sich natuerlich erweitern. Mittlerweile kann ich flimmerfrei ganze Woerter darstellen. Mit dem MAX7219 ist das ja auch kein Problem.
Ich plane das ganze auf 16x80 zu erweitern. So lassen sich zwei Zeilen a' 13 Buchstaben darstellen. Die Ansteuerung ist ziemlich simpel.
Habe mir hier einen eigenen Font entwickelt. Die Buchstaben werden dann im Programm zerlegt und entsprechend uebertragen.

Vor ein paar Jahren habe ich mal eine einzeilige Laufschrift gebastelt, die ueber eine lange Kette von Schieberegistern und ULN's angesteuert wurde. Das ganze musste man natuerlich permanent multiplexen. Das war ein ziemlicher Aufwand. Die Ansteuerung erfolgte ueber eine selbstgeschriebenes Delphi-Proggi (da gab es noch keine AVR's) :) . Die Daten wurden permanent ueber die LPT am PC rausgeschoben.
Ich denke wenn man das geschickt programmiert, dann kann ein Atmel mit Bascom das bewaeltigen.

Mit freundlichen Gruessen
Digitali

zerush
05.03.2007, 12:30
Hi,

ich bin grad auch dabei sowas mit Bascom zu realisieren, allerding nur 7x48.
Wieso habt ihr euch für 10 Zeilen entschieden? Also ich habe 7 gewählt, weil z.B. die Standart ASCII Zeichen 7 Zeilen haben, diese habe ich dann in Bascom bequem als Daten eingespeist...
(ich gebe immer gleichzeitig 6 Spalten aus, immer eine von einem 7x8 Block, dann kann ich immer ein Spalten-Byte des Zeichens raushauen, ohne groß rumzurechnen)

Hier mal ein Beispiel für die Großbuchstaben:
(man beachte das das Bit 0 immer besagt, ob das Zeichen noch breiter ist, so hat das I z.b. nur eine Breite von 3 LEDs bei mir!
Bit 7 ist oben... Bit 1 ist unten)



Data &B00111111 , &B01001001 , &B10001001 , &B01001001 , &B00111110 'A
Data &B10000011 , &B11111111 , &B10010011 , &B10010011 , &B01101100 'B
Data &B01111101 , &B10000011 , &B10000011 , &B10000011 , &B01000100 'C
Data &B10000011 , &B11111111 , &B10000011 , &B10000011 , &B01111100 'D
Data &B11111111 , &B10010011 , &B10010011 , &B10000011 , &B10000010 'E
Data &B11111111 , &B10010001 , &B10010001 , &B10000001 , &B10000000 'F
Data &B01111101 , &B10000011 , &B10010011 , &B10010011 , &B01011100 'G
Data &B11111111 , &B00010001 , &B00010001 , &B00010001 , &B11111110 'H
Data &B10000011 , &B11111111 , &B10000010 , &B00000000 , &B00000000 'I
Data &B00000101 , &B10000011 , &B10000011 , &B11111100 , &B00000000 'J
Data &B11111111 , &B00010001 , &B00101001 , &B01000101 , &B10000010 'K
Data &B11111111 , &B00000011 , &B00000011 , &B00000011 , &B00000010 'L
Data &B11111111 , &B01000001 , &B00110001 , &B01000001 , &B11111110 'M
Data &B11111111 , &B01000001 , &B00100001 , &B00010001 , &B11111110 'N
Data &B01111101 , &B10000011 , &B10000011 , &B10000011 , &B01111100 'O
Data &B11111111 , &B10010001 , &B10010001 , &B10010001 , &B01100000 'P
Data &B01111101 , &B10000011 , &B10001011 , &B10000101 , &B01111010 'Q
Data &B11111111 , &B10010001 , &B10011001 , &B10010101 , &B01100010 'R
Data &B01100101 , &B10010011 , &B10010011 , &B10010011 , &B01001100 'S
Data &B10000001 , &B10000001 , &B11111111 , &B10000001 , &B10000000 'T
Data &B11111101 , &B00000011 , &B00000011 , &B00000011 , &B11111100 'U
Data &B11100001 , &B00011001 , &B00000111 , &B00011001 , &B11100000 'V
Data &B11111111 , &B00000101 , &B00011001 , &B00000101 , &B11111110 'W
Data &B11000111 , &B00101001 , &B00010001 , &B00101001 , &B11000110 'X
Data &B11000001 , &B00100001 , &B00011111 , &B00100001 , &B11000000 'Y
Data &B10000111 , &B10001011 , &B10010011 , &B10100011 , &B11000010 'Z


Wenn du natürlich jetzt 10 Zeilen hast musst du dann etwas entsprechendes realisieren, vielleicht ist es dann aber günstiger die Buchstaben zeilenweise zu speichern, weil du ja eh zeilenweise die Ausgabe machst.

Stiff-Master
03.06.2007, 18:17
danke für die antworten - wie ihr seht waren wir lange nicht mehr hier - das projekt würde nun aber wieder aufgenommen

haben nun erstmal versucht das program weiter zu vervollständigen -allerdings haben wir noch nicht mehr als die deklarationen. haben uns für hardwarespi entschieden
nun wissen wir nicht mehr weiter - die programme- oder besser die schnipsel die man so findet befriedigen uns nicht wirklich da sie immer aus dem zusammenhang gerissen sind.
nun ja lange rede kurzer sinn...

unsere frage ist nun wie genau der code für bascom aussehen müsste (das prinzip haben wir nach langen recherchen verstanden)

hier erst mal das was wir haben
'-----------------------------------------------------------------------------------------
'name : HighFreq.bas
'micro : Mega16
'-----------------------------------------------------------------------------------------

$regfile = "m16def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space

'Pin Connection
'Output's
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Porta.7 = Output
Config Portc.7 = Output
Config Portc.6 = Output
Config Portd.6 = Output


Z0 Alias Porta.0
Z1 Alias Porta.1
Z2 Alias Porta.2
Z3 Alias Porta.3
Z4 Alias Porta.4
Z5 Alias Porta.5
Z6 Alias Porta.6
Z7 Alias Porta.7
Z8 Alias Portc.7
Z9 Alias Portc.6

Gen Alias Portd.6



'Input's
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input


Taster1 Alias Pind.3
Taster2 Alias Pind.4
Taster3 Alias Pind.5


'Dimmer

Dim Gen As Bit
Dim Porta.0 As Bit
Dim Porta.1 As Bit
Dim Porta.2 As Bit
Dim Porta.3 As Bit
Dim Porta.4 As Bit
Dim Porta.5 As Bit
Dim Porta.6 As Bit
Dim Porta.7 As Bit
Dim Portc.7 As Bit
Dim Portc.6 As Bit
Dim Test As Byte
Dim Zaehler As Byte
Enable Interrupts


Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0

Zaehler = 0



''''''''''Hauptprogramm'''''''''''''''

Do

Zaehler = Zaehler + 1

If Zaehler = 40 Then
Zaehler = 0
End If

If Zaehler = 0 Then
Z0 = 1
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 4 Then
Z0 = 0
Z1 = 1
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 8 Then
Z0 = 0
Z1 = 0
Z2 = 1
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 12 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 1
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 16 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 1
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 20 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 1
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 24 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 1
Z7 = 0
Z8 = 0
Z9 = 0
End If

If Zaehler = 28 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 1
Z8 = 0
Z9 = 0
End If

If Zaehler = 32 Then
Z0 = 0
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 1
Z9 = 0
End If

If Zaehler = 36 Then
Z0 = 1
Z1 = 0
Z2 = 0
Z3 = 0
Z4 = 0
Z5 = 0
Z6 = 0
Z7 = 0
Z8 = 0
Z9 = 1
End If

'Spiout
' ...



Loop
End



eine weiter frage wäre auch: benutze ich den befehl spiout oder shiftout? bei dem einen schieb ich ja bits und bei dem anderen bytes, aber was ist besser? zum finale wäre es auch noch schön zu wissen wie ich bascom mit den tabellen arbeite, damit ich hinterher "variable" texte ausgeben kann. vorerts reicht es mir ein festes wort auszugeben

nun ja viel holz - aber vielleicht kann ja jemand helfen - müsste es eigentlich bis samstag laufen haben (da wäre premiere von linie 1 an der freilichtbühne wo es eingesetzt werden soll)

besten dank schonmal stefan und jonas

hier noch ein kleiner anreiz: (mist um bilder einzufügen bin ich zu dumm) aber dem dem es gelingt mir nen fertigen code zu liefern winken 2 freikarten