Snabbprojekt ledmatris
Snabbprojekt ledmatris
Blev så avundsjuk när jag hörde att många andra byggde på matriser och jag inte har gjort någon så det fick bli att rota fram ett gammalt projekt och sno alla lysdioderna därifrån och bygga sig en matris.
Till första versionen använde jag mig av två 4017 för att styra kolumnerna men då de även krävde en transistor per kolumn så gick jag senare över till att använda 2 74374:or istället.
matrisen är 7x18 men då 74374:orna endast klarar av att hantera 8 kolumner var så använder jag bara 16 rader.
I nuläget kan den visa 3 olika meddelanden som vardera är max 30 tecken långa.
Dessa meddelnaden skicka man in från ett litet program i datorn där man även ställer in scroll hastigheten och hur stor pause det ska va mellan meddelandena.
Credits till $tiff för halva teckentabellen..
lite bilder på schabraket:
Och en liten film
http://www.kakmonster.com/mulle/matris/ledmatris1.WMV
Och två bilder på den ultimata consolbaserade mjukvaran:D
Till första versionen använde jag mig av två 4017 för att styra kolumnerna men då de även krävde en transistor per kolumn så gick jag senare över till att använda 2 74374:or istället.
matrisen är 7x18 men då 74374:orna endast klarar av att hantera 8 kolumner var så använder jag bara 16 rader.
I nuläget kan den visa 3 olika meddelanden som vardera är max 30 tecken långa.
Dessa meddelnaden skicka man in från ett litet program i datorn där man även ställer in scroll hastigheten och hur stor pause det ska va mellan meddelandena.
Credits till $tiff för halva teckentabellen..
lite bilder på schabraket:
Och en liten film
http://www.kakmonster.com/mulle/matris/ledmatris1.WMV
Och två bilder på den ultimata consolbaserade mjukvaran:D
Senast redigerad av mullemeck 14 augusti 2004, 21:07:38, redigerad totalt 1 gång.
74374:an är en Octal D-type flip-flop, hela namnet från elfa
På radsidan driver jag direkt från pic:en, nu har jag typ 150ohms motstånd i serie och när jag mäter då så går där ca 1-2mA, kan nog sänka värdet på de motstånden ganska kraftigt egentligen.
Just nu sitter det inkopplat på en Pic16f877a, men sen till den slutgiltliga matrisen ska en lite mindre PIC16LF876:a får agera Hjärna.
På radsidan driver jag direkt från pic:en, nu har jag typ 150ohms motstånd i serie och när jag mäter då så går där ca 1-2mA, kan nog sänka värdet på de motstånden ganska kraftigt egentligen.
Just nu sitter det inkopplat på en Pic16f877a, men sen till den slutgiltliga matrisen ska en lite mindre PIC16LF876:a får agera Hjärna.
Jo kan du väll få, den är inte så vacker och flera namn på variablerna är inte de mest genomtänkta.. blev det som först poppade upp i huvudet efter en stund.
Om det är nått du inte fattar så kan jag försöka förklara det, om jag själv minns hur jag gjorde...
Här kommer hela koden som "ritar" ut bilden, sen efter slutet så är där ca 1400 rader teckentabell till som inte är så spännande att titta på.
Om det är nått du inte fattar så kan jag försöka förklara det, om jag själv minns hur jag gjorde...
Här kommer hela koden som "ritar" ut bilden, sen efter slutet så är där ca 1400 rader teckentabell till som inte är så spännande att titta på.
Kod: Markera allt
DEFINE OSC 20
DEFINE DEBUG_REG PORTC
DEFINE DEBUG_BIT 3
DEFINE DEBUG_BAUD 115200
DEFINE DEBUG_MODE 1
out VAR BYTE[96]
out1 VAR BYTE[96]
tmp VAR BYTE
tmp1 VAR BYTE
moj VAR BYTE
scroll VAR BYTE
temp VAR BYTE
temp1 VAR BYTE
indata VAR BYTE[30]
num VAR BYTE
letters VAR BYTE
temp1 = 11
speed VAR BYTE
messnum VAR BYTE
mojn VAR BYTE[3]
tmp2 VAR BYTE
tmp3 VAR BYTE
delay VAR BYTE
delaylong VAR WORD
num = 0
TRISD = 0
TRISB = %00100000
intro:
IF PORTB.5 = 1 Then Inputt
GoSub memr
loop:
IF PORTB.5 = 1 Then Inputt
'print pic
For moj = 0 to speed
For tmp1 = 0 to 15
LookUp tmp1,[254,253,251,247,239,223,191,127,254,253,251,247,239,223,191,127],tmp3
IF tmp1 < 8 Then
PORTD = 255
GoSub clock2
PORTD = tmp3
GoSub clock1
EndIF
IF tmp1 >7 Then
PORTD = 255
GoSub clock1
PORTD = tmp3
GoSub clock2
EndIF
IF (tmp1 + scroll) < 95 Then
PORTD = out(tmp1 + scroll)
Else
PORTD = out1(tmp1 + scroll - 96)
EndIF
Pause 1
PORTD = 0
Next tmp1
Next moj
scroll = scroll + 1
IF scroll > temp1 Then
scroll = 0
GoSub memr
EndIF
GoTo loop
clock1:
PORTB.0 = 1
PORTB.0 = 0
Return
clock2:
PORTB.1 = 1
PORTB.1 = 0
Return
memr:
Read 92,speed
Read 93,delay
delaylong = delay * 1000
Pause delaylong
IF num = 0 Then
mojn(0)=29
mojn(1)=0
mojn(2) = 28
EndIF
IF num = 1 Then
mojn(0)=60
mojn(1)=30
mojn(2) = 59
EndIF
IF num = 2 Then
mojn(0)=91
mojn(1)=61
mojn(2) = 90
EndIF
tmp2 = 0
Read mojn(0),letters
For tmp = mojn(1) to mojn(2)
Read tmp,indata(tmp2)
tmp2 = tmp2 + 1
Next tmp
num = num + 1
IF num >2 Then
num = 0
EndIF
temp1 = 11
GoSub emtybuffert
GoSub inibuffert
Return
Inputt:
PORTD = 55
SerIn2 PORTB.4,16780,[wait("H"),STR indata\29,num,speed,delay]
letters = 0
For tmp = 0 to 28
IF indata(tmp) = 10 Then
letters = letters - 1
GoTo after
EndIF
IF indata(tmp) < 123 Then
letters = letters + 1
indata(tmp) = indata(tmp) - 32
EndIF
IF indata(tmp) <155 AND indata(tmp) > 131 Then
letters = letters + 1
EndIF
Next tmp
after:
IF num = 0 Then
mojn(0)=29
mojn(1)=0
mojn(2) = 28
EndIF
IF num = 1 Then
mojn(0)=60
mojn(1)=30
mojn(2) = 59
EndIF
IF num = 2 Then
mojn(0)=91
mojn(1)=61
mojn(2) = 90
EndIF
Write 92,speed
Write 93,delay
Write mojn(0),letters
tmp2 = 0
For tmp = mojn(1) to mojn(2)
Write tmp,indata(tmp2)
tmp2 = tmp2 + 1
Next tmp
num = 0
Return
inibuffert:
For tmp = 0 to letters
IF indata(tmp) = 134 Then
GoSub aring
EndIF
IF indata(tmp) = 132 Then
GoSub auml
EndIF
IF indata(tmp) = 148 Then
GoSub ouml
EndIF
IF indata(tmp) = 143 Then
GoSub austor
EndIF
IF indata(tmp) = 142 Then
GoSub aeistor
EndIF
IF indata(tmp) = 153 Then
GoSub aoustor
EndIF
BranchL indata(tmp),[space,utrops,citta,kohage,cash,proc,och,apostrof,parantesstart,parantesend,_
star,plus,comma,minus,punkt,division,zero,one,two,three,four,five,six,seven,eight,nine,kolon,semikol,_
arrowleft,equal,arrowright,questionmark,at,aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt,uu,_ vv,ww,xx,yy,zz,klammerleft,slach,klammerright,tak,underline,acsang,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,_
u,v,w,x,y,z]
afterbranch:
GoSub fit
temp = 0
GoSub fit
Next tmp
scroll = 0
GoTo loop
fit:
IF temp1 < 95 Then
out(temp1) = temp
Else
out1(temp1 - 96) = temp
EndIF
temp1 = temp1 + 1
Return
emtybuffert:
For tmp= 0 to 95
out(tmp) = 0
out1(tmp) = 0
Next tmp
temp1 = 15
Return
a:
temp = %00000010
GoSub fit
temp = %00010101
GoSub fit
'temp = %00010101
GoSub fit
'temp = %00010101
GoSub fit
temp = %00001111
GoTo afterbranch
Ja då var den slutgiltliga versionen av matrisen färdig.
Den består av 119 ytmonterade lysdioder som är fastlimmade på vinylplast och sen ihoplöddade med någerlunda flexibel kopplingstråd.
Styrning och mjukvara är den samma som för tidigare varianten..
bilder, Klicka för större..
Och så en film på den i action:
http://www.kakmonster.com/mulle/matris/matris.avi [ca 5,17 mb]
och så en liten film på hur den är byggd på 8min 56sekunder
http://www.kakmonster.com/mulle/matris/film.avi [ca 60mb]
/mullemeck
Den består av 119 ytmonterade lysdioder som är fastlimmade på vinylplast och sen ihoplöddade med någerlunda flexibel kopplingstråd.
Styrning och mjukvara är den samma som för tidigare varianten..
bilder, Klicka för större..
Och så en film på den i action:
http://www.kakmonster.com/mulle/matris/matris.avi [ca 5,17 mb]
och så en liten film på hur den är byggd på 8min 56sekunder
http://www.kakmonster.com/mulle/matris/film.avi [ca 60mb]
/mullemeck