'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'IIIIIII Programm steuert 8 X 7 Segmente an
'IIIIIII IC Max7219
'IIIIIII 03.05.2008
'IIIIIII Demonstration Ausgabe Basic
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
' Das IC MAX7219 (Fa. Maxim) wurde für die Ansteuerung von bis zu acht
' 7-Segment-Anzeigen entwickelt.
' Durch kaskadieren (hintereinanderschalten) mehrer MAX7219 können auch größerer
' Anzeigen gebaut werden.
' Dies alles kann mit drei Portleitungen und einem einfachen
' Programmieralgorythmus realisiert werden.
' In diesem Programm werden 8 Siebensegmentanzeigen angesteuert.
' Die Pinbelegung Max7219
' ______ ______
' | \ / | Din Dateneingang vom Controller
' [ Din Dout ] Dout wird mit einem weiteren Max7219 verbunden, wenn nicht vorhanden NC.(nicht belegt)
' | |
' [ Dig1 S D 8] Dig 1 bis Dig 8 sind die einzelnen Digits (Kathode)
' | |
' [ Dig5 S Dp 128] S A bis S Dp = Segmente der Anzeige
' | | Die Zahlen 1 bis 128 geben die Wertigkeit der einzelnen Leds an.(Anode)
' [ GND S E 4]
' | |
' [ Dig7 S C 16]
' | |
' [ Dig3 + 5V ] Versorgungsspannung 5 V +
' | |
' [ Dig4 Iset ]
' | |
' [ Dig8 S G 1]
' | |
' [ GND S B 32] GND = - Masse
' | |
' [ Dig6 S F 2]
' | |
' [ Dig2 S A 64]
' | |
' [ Load Clk ] Load Steuerleitung am Anfang und Ende einer Datenübertragung
' | | Clk Takt.Nach jeder Bitausgabe an > Din < wird Clk an und ausgeschaltet. ( Pulse clk)
' ______________
'
' Siehe auch Schaltplan auf dieser Internetseite.
' Wer sich weiter in die Materie einarbeiten will,dem sei das Datenblatt von Maxim empfohlen.
' Im Internet stehen auch einige Beschreibungen.
' Besonders gefallen hat mir die Anleitung von Stefan Buchgeher. (in deutsch)
' http://www.stefan-buchgeher.info/elektronik/max7219/max7219_dot_matrix.html
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
' Das Programm wurde mit OCbasr.exe compiliert.
' Die Routine zur Datenübertragung an den Max 7219 ist in Basic geschrieben,
' natürlich kann man auch die Routinen in Maschinensprache verwenden.
' Den Max 7219 gibt es bei Reichelt Elektronic für 5,90 Euro.
' (Soll keine Werbung sein, wenn jemand eine billigere Bezugsquelle
' weiß, bitte Mail an mich.)
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
option openmicro
'--------------------------
'------ I/O PORTS ---------
'--------------------------
define clk port[6]
define d_in port[4]
define Load port[5]
define port1 byteport[1]
define Adresse byte
define Daten byte
define Mask byte
define x Byte
define xx byte
define i byte
define ii byte
include "om.def"
gosub Initialisierung
#Hauptprogramm
gosub hell
gosub display_aus
for x = 1 to 8
xx=x
gosub anzeigen
pause 20
next x
pause 100
gosub display_aus
for xx = 8 to 1 step -1
ii = 0
for x = 0 to 9 ' Wert 10 bis 14 Sonderzeichen
gosub anzeigen ' Wert 15 = aus (blank)
pause 10
next x
pause 40
ii = 128 'Dp anzeigen +128
gosub anzeigen
next xx
pause 100
gosub display_aus
pause 100
goto Hauptprogramm
end
#Anzeigen
Daten = X +ii
adresse = xx
#Anz1
gosub Dataout ' Basic
return
#Hell
Adresse = &H0A ' Intensität
Daten = &H0F
gosub dataout
return
#Initialisierung
port1 = off
load = on
Adresse = &H09 ' Decode Mode ,
Daten = &HFF ' für decodierte 7 Segmentanzeige
gosub dataout ' d.h. als Daten wird der Wert Dezimal ausgegeben
' z.B eine >5< Adresse = Digit 1 bis 8 Daten = 5
Adresse = &H0A ' Intensität
Daten = 5
gosub dataout
Adresse = &H0B ' Anzahl der Digits
Daten = &H07 ' alle Anzeigen (8) werden angesteuert.
gosub dataout
Adresse = &H0F ' Display Test
Daten = 0 ' aus
gosub dataout
Adresse = &H0C ' Display einschalten
Daten = &H01 'normal
gosub dataout
return
#display_aus
for i = 1 to 8
Adresse = i
Daten = 15
gosub anz1
next
return
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
' BASIC
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
#Dataout
Load = off
CLK = off
MASK=&B10000000
While MASK 'Schleife so lange durchlaufen bis MASK 0 ist
d_in =(Adresse and MASK) 'Adresse wird maskiert, ein Bit wird gesendet
pulse CLK
MASK=MASK shr 1 'schiebt Bits eine Stelle nach rechts aus &B10000000 wird &B01000000 usw.
wend
MASK=&B10000000
While MASK
d_in =(Daten and MASK)
pulse CLK
MASK=MASK shr 1
wend
Load = on
return
end