Stap 4: MAX7219 Driver uitvoering
Neem een kijkje op het bijbehorende artikel en/of het gegevensbladvoor een gedetailleerde technische beschrijving van de werking van de MAX7219.
1. initialisatie
-- MAX7219 registers MAXREG_DECODEMODE = 0x09 MAXREG_INTENSITY = 0x0a MAXREG_SCANLIMIT = 0x0b MAXREG_SHUTDOWN = 0x0c MAXREG_DISPTEST = 0x0f
DIN = 7 -- 13 - data in pin CS = 6 -- 12 - load (CS) pin CLK = 5 -- 14 - clock pin
gpio.mode(DIN,gpio.OUTPUT) gpio.mode(CS,gpio.OUTPUT) gpio.mode(CLK,gpio.OUTPUT)
2. Schrijf van bestaande gegevens
function wrByte(data) i=8 while (i>0) do mask = bit.lshift(0x01,i-1) --print(mask) gpio.write( CLK, 0) -- tick dser = bit.band(data,mask) if (dser > 0) then gpio.write(DIN, 1) -- send 1 --print("1") else gpio.write(DIN, 0) -- send 0 --print("0") end --endif --print(dser) gpio.write( CLK, 1) -- tick i=i-1 end --while end
3. set Register
function setReg(reg, value) gpio.write(CS, 0) wrByte(reg) -- specify register tmr.delay(10) wrByte(value) -- send data gpio.write(CS, 0) --tmr.delay(10) gpio.write(CS, 1) end
4. convert anf geheel getal in xxxx formaat afdrukken
function print_led_int(c) th = string.format("%d",c / 1000) h = string.format("%d",(c-th*1000) / 100) t = string.format("%d", (c-th*1000-h*100) / 10) u = string.format("%d", c-th*1000-h*100-t*10) --print(string.format("%d %d %d %d", th,h,t,u)) setReg(4, th) setReg(3, h) setReg(2, t) setReg(1, u) end
5. Maak een Display 'Nul' init stadium
function zero_all() v=1 while (v<9) do setReg(v,0) v=v+1 end end
6. MAX7219 initialisatie
setReg(MAXREG_SCANLIMIT, 0x07) tmr.delay(100) setReg(MAXREG_DECODEMODE, 0xFF) -- full decode mode BCD tmr.delay(100) setReg(MAXREG_SHUTDOWN, 0x01) -- not in shutdown mode tmr.delay(100) setReg(MAXREG_DISPTEST, 0x00) -- no display test tmr.delay(100) setReg(MAXREG_INTENSITY, 0x00) -- set Brightness zero_all() -- set all to ZERO
7. test Display - 9999 teller
count=0 tmr.alarm(0,1000,1, function() count=count+1; --print(count); print_led_int(count) if (count>9999) then count=0;zero_all() end end)