MAX7219 + ATtiny2313

Övriga diskussioner relaterade till komponenter. Exempelvis radiorör, A/D, kontaktdon eller sensorer.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Ja, det är inte språket jag har problem med, utan mer om jag tänkt fatalt fel nånstans, så jag ser gärna din Basic-kod.

Mvh
speakman
Pjoms
EF Sponsor
Inlägg: 644
Blev medlem: 24 maj 2004, 12:18:40
Ort: Ö-vik

Inlägg av Pjoms »

Ok, detta var ett av de första testen jag gjorde. Jag hoppas att denna koden är riktig...

Kod: Markera allt

' Ett första test att styra en ELM-2882 8x8 Dor Matrix LED Display
' med en MAX7219 LED driver.
' En LED i taget tänds över hela displayen.


AliveLED                var     PortA.0
DIN                     var     PortB.0
CLK                     var     PortB.1
LOAD                    var     PortB.2


' Namnge alla register i MAX7219
NoOp                    con $0
Col1                    con $1
Col2                    con $2
Col3                    con $3
Col4                    con $4
Col5                    con $5
Col6                    con $6
Col7                    con $7
Col8                    con $8
DecodeMode              con $9
Intensity               con $A
ScanLimit               con $B
ShutDown                con $C
DisplayTest             con $F


' Allokera variabler

DataOut                 var word
Buffert                 var word            	 	                ' Register som buffrar DataOut och klockas ut
RegData                 var DataOut.Byte0				
RegAddr                 var DataOut.Byte1					
i                       var byte                         	        ' For/Next loop
db                      var byte                         	        ' For/Next loop för att klocka ut data
rad                     var byte                        	        ' For/Next loop för att shifta rad (Test)
kol                     var byte                        	        ' For/Next loop för att shifta kolumn (Test)
temp                    var byte                        	        ' temp-register

	TrisA = 0
	TrisB = 0


Init:
	PortA = 0
	PortB = 0
	For i = 0 To 2                                                   ' Blinka lite coolt med en LED för att visa att vi lever...
		AliveLED = 1
		Pause 500
		AliveLED = 0
		Pause 500
	Next i


SetUp:
	RegAddr = DecodeMode                                            ' Sätt DekodeMode
	RegData = 0                                                     ' Ingen dekodning. Fri styrning av alla LED:s
	Gosub SendData

	RegAddr = Intensity                                             ' Sätt Ljusstyrka
	RegData = 10                                                    ' Ljusstyrka 0-15
	Gosub SendData
	
	RegAddr = ScanLimit                                             ' Sätt antal använda "displayer" (kolumner)
	RegData = 7                                                     ' Alla 8 "displayer" skall användas
	Gosub SendData

	RegData = 0                                                     ' Nolla all ev. displaydata 
	For kol = 1 to 8
		RegAddr = kol
		Gosub SendData
	Next kol

	RegAddr = ShutDown                                              ' Standby
	RegData = 1                                                     ' Normal Operation
	Gosub SendData

	RegAddr = DisplayTest                                           ' Tänder alla segment med max ljusstyrka
	RegData = 0                                                     ' Normal Operation
	Gosub SendData


Main:
	For kol = 1 to 8
		RegAddr = kol
		RegData = 1
		For rad = 0 to 8
		        Gosub SendData
		        RegData = RegData << 1
		        Pause 100
		Next rad
	Next kol

	Goto Main




SendData:
	Buffert = DataOut                                               ' Kopiera DataOut så att den inte förstörs vid utklockning
	For db = 0 To 15                                                ' Loopa runt för att klocka ut alla 16 bitar
	        DIN = Buffert.15                                        ' Lägg ut databit 15 på I/O
	        CLK = 1                                                 ' Ge en klockpuls
	        CLK = 0
	        Buffert = Buffert << 1                                  ' Shifta ett åt vänster för att få nästa bit på plats
	Next db

LoadData:
	LOAD = 1                                                        ' Alla bitar överförda. Ladda upp data
	LOAD = 0
	Return



	End
Tabarna blev lite knas... Jag fixar det senare så att det ser lite bättre ut.
[EDIT] Städat upp det värsta i tabarna.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Tack tack!
Nu är det bara att konstatera att felet ligger i kretsen. Man KAN nästan inte göra fel. Den är banne mig för enkel för det!
Fungerar ju perfekt med intensitets-registret, men skriver jag till "nummerregistren" så är det ingen skillnad på displayen.
Inväntar den nya så går jag vidare då...

Mvh
speakman
Pjoms
EF Sponsor
Inlägg: 644
Blev medlem: 24 maj 2004, 12:18:40
Ort: Ö-vik

Inlägg av Pjoms »

Hur gick det?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Väntar fortfarande på min nya krets att testa med.

Mvh
speakman
Skriv svar