Sida 1 av 2

Snabbprojekt ledmatris

Postat: 31 juli 2004, 13:56:37
av mullemeck
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:


Bild

Bild

Bild

Bild

Bild

Och en liten film
http://www.kakmonster.com/mulle/matris/ledmatris1.WMV


Och två bilder på den ultimata consolbaserade mjukvaran:D

Bild

Bild

Postat: 31 juli 2004, 19:10:44
av Chribbe76
är 74374 en flip-flop???
Vad driver du med på radsidan?
Vilken Pic använder du?
Hur mycket ström matar du lysdioderna med?

Postat: 31 juli 2004, 19:32:35
av mullemeck
74374:an är en Octal D-type flip-flop, hela namnet från elfa :D

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.

Postat: 31 juli 2004, 20:25:09
av MadModder
Hoho! Fin pappskiva :D
Vad kör du med för programmerare och mjukvara? Picsy?
Själv tänkte jag börja med Olimex PIC PG2, baserad på JDM...

Postat: 1 augusti 2004, 00:02:49
av mullemeck
Har en fin Isp-Pro från elfa.. blev efter en stund trött på att inte få igång mina hemmabyggda programerare så det fick bli en färdigbyggd..

Sen så skriver jag koden för Pic:en i basic och för programmet i datorn i C++

Postat: 1 augusti 2004, 01:05:06
av MadModder
Ahaa... får väl se om jag har större tur då :D

Postat: 2 augusti 2004, 12:14:21
av 99nvbjed
Får man kika lite på källkoden? Har nyss börjat med PIC:ar och är lite sugen på att bygga en liknande sak, fast alla exempel jag hittat är skrivet i ASM vilket jag har lite svårt för :?. Skulle va kul att se hur koden ser ut i basic!

Postat: 2 augusti 2004, 20:23:09
av mullemeck
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...:doh:


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

Postat: 3 augusti 2004, 08:49:23
av 99nvbjed
Aaa, tack så mycket! Det var ju några rader :)

Postat: 3 augusti 2004, 12:35:47
av mullemeck
Jo det blev en del.. och teckentabellen gjorde att det blev väldigt ont om plats i pic:en också så jag fick vänd å vrida på all kod för att få in allt..

Postat: 14 augusti 2004, 21:15:18
av mullemeck
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..
Bild
Bild
Bild
Bild
Bild

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

Postat: 14 augusti 2004, 21:18:23
av MadModder
gör om, gör rätt. Inga backslashar ;)

Sygg matris det där

[edit]
Sådärja :D

Postat: 15 augusti 2004, 14:42:08
av mullemeck
Det var visst lite klabb med servern jag hade bilderna och filmerna på så de har inte riktigt funkat..

men nu ska problemet vara fixat..

Postat: 15 augusti 2004, 17:50:26
av Lindqvist
Mycket roligt att få se din arbetstakt mullemeck, du har verkligen fått upp frekvensen! :D Det var också en påhittig teknik du använde för att få ihop matrisen, bra gjort. :tumupp:

Hoppas bara att assistenten inte åt upp alla kakor för dig.

Postat: 15 augusti 2004, 20:09:13
av PaNiC
Är det Jönssonligans största kupp man hör i bakgrunden? :)