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
MAX7219 + ATtiny2313
Ok, detta var ett av de första testen jag gjorde. Jag hoppas att denna koden är riktig...
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.
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
[EDIT] Städat upp det värsta i tabarna.
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
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