PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Testcode für eine 4stellige LED Dot-Matrix Anzeige



rogerberglen
11.10.2006, 17:16
Ich habe mal meinen bisherigen Code hier gepostet. Der macht nichts anderes als nur 4 Zeichen die in einem Textstring hinterlegt sind auf 4 Dot-Matrix Led Modulen auszugeben. Diese sind leider nur schlecht abzulesen, da ich diese nur mit 5V betreibe. Ich will aber noch die Ansteuerung auf 12V umbauen so dass die Anzeige gut ablesbar ist.
Ich wäre für ein paar Ideen sehr dankbar das Ganze Interruptgesteuert über einen Timer laufen zulassen. Auch wäre es schön wenn Jemand ein Beispiel oder eine Idee hat wie man denn die Zeichen mit den seriellen Anschlüssen von einem anderen AVR an diesen übergebenkönnte, so dass diese auf der LED Dot-Matrix Anzeige erscheinen.

Da ich leider noch nicht herausgefunden habe wie man Code von Basom in einem extra Fenster postet habe ich es als Kopie an diesen Text gehängt.



' ************************************************** **************************
' * Led Dot-Matrix Anzeige *
' * V 0.1 *
' * Fuse-Bit Einstellung: Interner 8MHz Oszillator mit abgeschaltetem Teiler *
' ************************************************** **************************

' ************************************************** **************************
' * Anschlussbelegung Attiny2313 *
' * _____ *
' * (Reset/dw) PA2 = Pin1 Pin20 = Vcc *
' * (RxD) PD0 = Pin2 Pin19 = PB7 (UCSK/SCK/PCINT7) *
' * (TxD) PD1 = Pin3 Pin18 = PB6 (MISO/DO/PCINT6) <7.ZL> *
' * (XTAL2) PA1 = Pin4 Pin17 = PB5 (MOSI/DI/SDA/PCINT5) <6.ZL> *
' * (XTAL1) PA0 = Pin5 Pin16 = PB4 (OC1B/PCINT4) <5.ZL> *
' * (CKOUT/XCK/INT0) PD2 = Pin6 Pin15 = PB3 (OC1A/PCINT3) <4.ZL> *
' * (INT1) PD3 = Pin7 Pin14 = PB2 (OC0A/PCINT2) <3.ZL> *
' * <Reset> (T0) PD4 = Pin8 Pin13 = PB1 (AIN1/PCINT1) <2.ZL> *
' * <Daten> (OC0B/T1) PD5 = Pin9 Pin12 = PB0 (AIN0/PCINT0) <1.ZL> *
' * GND = Pin10 Pin11 = PD6 (ICP) <Takt> *
' ************************************************** **************************

$regfile = "attiny2313.dat" 'ATtiny2313 Prozessor
$crystal = 8000000 '8MHz int. Taktquelle
$baud = 9600

'$sim 'nach Test entfernen !!!!!!

Dim Z As Byte 'Anzahl der Anzeigenstellen (4)
Dim X As Byte 'Spaltenzähler pro Anzeige 5 Spalten.
Dim Zeichen As Integer 'Zeichencode für Decoder
Dim Temp As String * 1 'Zwischenspeicher für Stringbearbeitung
Dim Index As Integer 'Zeichenposition für Caraktergenerator
Dim Text As String * 5 'Testvariable (später Empfangspuffer)
Text = "ABCD" 'Teststring

Config Portb = Output 'Port B auf Ausgabe (Zeilen)
Config Portd.4 = Output 'Pin D4 auf Ausgabe (Reset Schiebereg.)
Config Portd.5 = Output 'Pin D5 auf Ausgabe (Daten Schiebereg.)
Config Portd.6 = Output 'Pin D6 auf Ausgabe (Takt Schiebereg.)
Portd.5 = 1 '1 für Schieberegister setzen und
Portd.4 = 0 'Schieberegister Reset durchführen.

Anfang:

'Waitus 10
Portd.4 = 1 'Schieberegister freigeben und alle
For X = 0 To 24 'Ausgänge der Schieberegister auf 1
Portd.6 = 0 'schalten.
'Waitus 10
Portd.6 = 1
Next X

Portd.5 = 0 '0 für Schieberegister ausgeben.

Portd.6 = 0 '1mal schieben um die 0 auf dem ersten
Waitus 10 'Ausgang auszugeben.
Portd.6 = 1
Portd.5 = 1 '1 für Schieberegister ausgeben. Ver-
'hindert weitere 0 auszugeben.
Z = 1 'Beginn 1.Anzeige
X = 1 'Beginn 1.Spalte

Do

Temp = Mid(text , Z , 1) 'Zeichen aus String lesen und in
Zeichen = Asc(temp) 'Zeichencode dez. umwandeln.
Z = Z + 1 'Durchlaufzähler erhöhen und dann im
'Zeichendecoder Zeichen decodieren.
Index = Lookdown(zeichen , Zeichendecoder , 22)
Index = Index - 1 'gefundene Position um 1 korrigieren und
Index = Index * 5 'Anfang im Caraktergenerator berechnen.

For X = 0 To 4 'Pro Zeichen 5 Spalten ausgeben. Dazu
Portb = Lookup(index , Zeichensatz) 'Code holen und Zähler erhöhen. Dann
Incr Index 'Ausgeben und warten (Lesbarkeit der
Waitus 900 'Anzeige). Dann Anzeige abschalten und
Portb = 0 'per Schieberegister die nächste Spalte
Portd.6 = 0 'auswählen.
Waitus 10
Portd.6 = 1 'solange wiederholen, bis 5 Spalten aus-
Portd.5 = 1 'gegeben worden sind.
'Waitms 500 'Dann nächstes Zeichen holen und eben-
'Portb = 0 'falls wie oben beschrieben ausgeben.
Next X



Loop Until Z > 4 'Alle 4 Anzeigenstellen bearbeitet? Dann
'Schieberegister reset und von vorne
Portd.4 = 0 'beginnen.

Goto Anfang

' ****************************************
' * Zeichenmapping - Tabelle *
' ****************************************

Zeichendecoder:

Data $32 , $48 , $49 , $50 , $51 , $52 , $53 , $54 , $55 , $56 , $57
Data $65 , $66 , $67 , $68 , $69 , $70 , $71 , $72 , $73 , $74 , $75

' ****************************************
' * Zeichentabelle für Dot-Matrix *
' ****************************************

Zeichensatz:

Data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000 ' 32
Data &B00111110 , &B01010001 , &B01001001 , &B01000101 , &B00111110 '0 48
Data &B00000000 , &B01000010 , &B01111111 , &B01000000 , &B00000000 '1 49
Data &B01000010 , &B01100001 , &B01010001 , &B01001001 , &B01000110 '2 50
Data &B00100001 , &B01000001 , &B01000101 , &B01001011 , &B00110001 '3 51
Data &B00011000 , &B00010100 , &B00010010 , &B01111111 , &B00010000 '4 52
Data &B00100111 , &B01000101 , &B01000101 , &B01000101 , &B00111001 '5 53
Data &B00111100 , &B01001010 , &B01001001 , &B01001001 , &B00110000 '6 54
Data &B00000001 , &B01110001 , &B00001001 , &B00000101 , &B00000011 '7 55
Data &B00110110 , &B01001001 , &B01001001 , &B01001001 , &B00110110 '8 56
Data &B00000110 , &B01001001 , &B01001001 , &B00101001 , &B00011110 '9 57
Data &B01111110 , &B00010001 , &B00010001 , &B00010001 , &B01111110 'A 65
Data &B01111111 , &B01001001 , &B01001001 , &B01001001 , &B00110110 'B 66
Data &B00111110 , &B01000001 , &B01000001 , &B01000001 , &B00100010 'C 67
Data &B01111111 , &B01000001 , &B01000001 , &B00100010 , &B00011100 'D 68
Data &B01111111 , &B01001001 , &B01001001 , &B01001001 , &B01000001 'E 69
Data &B01111111 , &B00001001 , &B00001001 , &B00001001 , &B00000001 'F 70
Data &B00111110 , &B01000001 , &B01001001 , &B01001001 , &B01111010 'G 71
Data &B01111111 , &B00001000 , &B00001000 , &B00001000 , &B01111111 'H 72
Data &B00000000 , &B01000001 , &B01111111 , &B01000001 , &B00000000 'I 73
Data &B00100000 , &B01000000 , &B01000001 , &B00111111 , &B00000001 'J 74
Data &B01111111 , &B00001000 , &B00010100 , &B00100010 , &B01000001 'K 75
Data &B01111111 , &B01000000 , &B01000000 , &B01000000 , &B01000000 'L 76




Das geht mit "CODE-Tags" PicNick

Otti20vt
17.12.2006, 12:12
Vielendank für das Posten des Codes =P~ Ein ähnliches Projekt habe ich auch vor, leider noch nicht viel ahnung vom Programmiren. :-b

ACDC
17.12.2006, 12:29
Hi !

Kannst Du mal bitte einen Schaltplan einstellen, dann kann man sich eher mal Gedanken machen, warum Dein Display so schlecht ablesbar ist ?!

Gruß, Andreas

Otti20vt
25.12.2006, 20:39
So hab mir mal eine kleine schaltung aufgebaut mit einem 74HCT595 schieberegister und einem Tiny2313 O:)

Leider Funktioniert das Display nicht wenn ich den Reset ausgang auf das schieberegister gelegt habe, also Port PD4 auf Pin 12 :-k, den rest hab ich so angeschlossen PD5 -> 14 und PD6-> 11.

Hat da jemand eine ahnung was das Problem sein könnte 8-[

http://img148.imageshack.us/img148/2539/img1368filteredwr0.jpg

veit
26.12.2006, 11:29
ein schaltplan sagt mehr als tausend worte

Otti20vt
27.12.2006, 05:18
OK, hab mal schnell einen Schaltplan gezeichnet wie ich die Schaltung aufgebaut habe.

Die Ports stimmen jetzt nicht mehr mit meinem vorigem Posting überein. :-b

Auf dem Schaltplan ist ein Mega8 eingezeichnet, ich benütze aber einen Tiny 2313, aber das tut wohl nicht viel zur sache :-$

Das Programm habe ich so abgeändert:



Config Portd.3 = Output '(Reset Schiebereg.)
Config Portd.2 = Output ' (Daten Schiebereg.)
Config Portd.1 = Output '(Takt Schiebereg.)




Nun ich bin für jeden Tip dankbar, ich bin jetzt schon über 4 tage mit dem Problem beschäftigt und ich weiss echt nich mehr weiter. Werde mich mal mit dem Author der Programmes in verbindung setzen. :-s

veit
27.12.2006, 12:53
irgendwie versteh ich den schaltplan nicht ... da gehen doch dann immer 5 led´s an ... fehlt da nicht was? multiplexen z.b. ???

Otti20vt
27.12.2006, 18:24
irgendwie versteh ich den schaltplan nicht ... da gehen doch dann immer 5 led´s an ... fehlt da nicht was? multiplexen z.b. ???

Ja ich hab die Matrix falsch gezeichnet :Ostern

Habe jetzt eine Neue Version hochgeladen