Hallo Marco,
hier mal ein kleines Demo, ist getestet.
Wenn Dein zweiter MAX immer noch spinnt, dann ist er wohl hinüber.
Das Demo benutzt den normal mode für Anzeigen.
Wenn man Zahlen anzeigen wil ist der BCD mode günstiger, siehe Datenblatt.
Hinweis: Die Versorgungsspannung der MAX sollte mit Kondensatoren geblockt werden.
Gruß Manfred
www.malo-web.de
Code:
'*****************************************************************************************************************
' Bascom AVR Compiler 1.11.8.7
' ATMega8 Applikation
'
' Manfred Look
' webmaster@malo-web.de
' http://www.malo-web.de
'
' Demo 2x MAX7219 (8x 7_Segment LED Treiber IC)
' sollte auch mit MAX7221 funktionieren
'
' 10/2007
' V1.00
'
' Takt getestet mit:
' intern 1MHz
' extern 16MHz (Fuses entsprechend setzen)
'
' Schaltplan siehe Datenblatt MAX7219 Seite 13 Figure 3
'
'*****************************************************************************************************************
'
'--compiler directives--------------------------------------------------------------------------------------------
'
$regfile = "m8def.dat" 'Chip auswaehlen: ATMega8
$crystal = 16000000 'Taktfrequenz (Hz) festlegen
$hwstack = 32 'Hardware Stack
$swstack = 8 'Software Stack
$framesize = 20 'Framsize
'
'--variable-------------------------------------------------------------------------------------------------------
'
Dim Send_max1 As Word '16Bit Variable MAX1 die seriel ausgegeben wird
Dim Send_max2 As Word '16Bit Variable MAX2 die seriel ausgegeben wird
'
'--alias----------------------------------------------------------------------------------------------------------
'
_data Alias Portd.2 'data MAX7219
_load Alias Portd.3 'chip Enable MAX7219
_clk Alias Portd.4 'clock MAX7219
'
'--init program---------------------------------------------------------------------------------------------------
'
'Initialisierung Ports
Ddrd = &B00011100 'Port D, 1=Ausgang
'
Loop:
'
'Initialisierung MAX7219
Send_max2 = &B0000111100000001 'Display Test ein
Send_max1 = &B0000111100000001 'Display Test ein
Gosub _ser_output
Wait 1 '1 Sekunde Test
'
Send_max2 = &B0000111100000000 'Test aus
Send_max1 = &B0000111100000000 'Test aus
Gosub _ser_output
'
Send_max2 = &B0000110000000001 'normal mode
Send_max1 = &B0000110000000001 'normal mode
Gosub _ser_output
'
Send_max2 = &B0000101100000111 'scan limit: 8
Send_max1 = &B0000101100000111 'scan limit: 8
Gosub _ser_output
'
Send_max2 = &B0000101000001000 'intensity: 17/32 (heller)
Send_max1 = &B0000101000000010 'intensity: 5/32 (dunkler)
Gosub _ser_output
'
'Initialisierung Ausgaben
' xxxx PABCDEFG
Send_max2 = &B0000000101111001 'Digit 0 Anzeige: 3
Send_max1 = &B0000000101101101 'Digit 0 Anzeige: 2
Gosub _ser_output
' xxxx PABCDEFG
Send_max2 = &B0000001000110000 'Digit 1 Anzeige: 1
Send_max1 = &B0000001001011111 'Digit 1 Anzeige: 2
Gosub _ser_output
'usw.
Wait 2 '2 Sekunden Anzeige
Goto Loop 'Demo startet neu
'
End
'
'Serielle Schnittstelle
_ser_output:
Reset _load 'bereit
Shiftout _data , _clk , Send_max2 , 1 '16Bit senden, MSB zuerst, Takt steigende Flanke
Shiftout _data , _clk , Send_max1 , 1 '16Bit senden, MSB zuerst, Takt steigende Flanke
Set _load 'fertig
Return
Lesezeichen