'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