Problem med 64x8 LED-matris
- startracer
- Inlägg: 48
- Blev medlem: 29 april 2007, 15:01:10
- Ort: Lund
Problem med 64x8 LED-matris
Jag köpte nyss en av de fräcka 64x8 LED-matriserna av sodjan. Nu har jag stött på ett problem, nämligen att den alltid tänder en hel kolumn LED:s åt gången. Jag kan alltså inte välja ut en specifik LED i en kolumn. I mitt enkla testprogram sätter jag ut en punkt och fyller ut med nollor så att den rullar fram över matrisen. Men det blir alltså ingen punkt utan en hel kolumn som rullar fram. Jag har tittat lite på koden som pheer skrev till sitt maskenspel för att få klarhet i vilken ordning saker bör skickas till matrisen och jag tror att jag har förstått det rätt.
I min kod gör jag så här:
- Klockar in 128 nollor för att rensa skiftregistren.
- Klockar in en etta och sen en nolla för att tända en av dioderna.
- Jag väljer rad 1 med bitmönstret 001 på ROW_SEL-pinnarna och sätter sen ROW_EN = 1.
- Sätter COLENABLE_OUTPUT = 0.
- Sätter COLDATA_LATCH = 1.
- Sätter COLENABLE_OUTPUT = 1.
- Sedan har jag en oändlig loop som skiftar in nollor för att rulla fram allting. En räknare klockar in en ny diod när den gamla har rullat över kanten.
Men det som händer är alltså att en hel kolumn med dioder tänds och rullar fram över matrisen istället för bara en punkt. Jag har provat att hårdkoda in olika värden på ROW_SEL-pinnarna men resultatet blir alltid detsamma, en hel kolumn som tänds. Jag har även provat att lägga in en fördröjning efter varje gång jag sätter en bit men det har inte gjort någon skillnad.
Någon som kan säga om jag har tänkt helt fel om hur matrisen fungerar?
Koden finns här:
http://213.238.215.75/code.txt
Här finns en bild. Slutartiden var lite lång så det ser ut som det är flera kolumner som rullar.
http://213.238.215.75/matris.jpg
/Magnus
I min kod gör jag så här:
- Klockar in 128 nollor för att rensa skiftregistren.
- Klockar in en etta och sen en nolla för att tända en av dioderna.
- Jag väljer rad 1 med bitmönstret 001 på ROW_SEL-pinnarna och sätter sen ROW_EN = 1.
- Sätter COLENABLE_OUTPUT = 0.
- Sätter COLDATA_LATCH = 1.
- Sätter COLENABLE_OUTPUT = 1.
- Sedan har jag en oändlig loop som skiftar in nollor för att rulla fram allting. En räknare klockar in en ny diod när den gamla har rullat över kanten.
Men det som händer är alltså att en hel kolumn med dioder tänds och rullar fram över matrisen istället för bara en punkt. Jag har provat att hårdkoda in olika värden på ROW_SEL-pinnarna men resultatet blir alltid detsamma, en hel kolumn som tänds. Jag har även provat att lägga in en fördröjning efter varje gång jag sätter en bit men det har inte gjort någon skillnad.
Någon som kan säga om jag har tänkt helt fel om hur matrisen fungerar?
Koden finns här:
http://213.238.215.75/code.txt
Här finns en bild. Slutartiden var lite lång så det ser ut som det är flera kolumner som rullar.
http://213.238.215.75/matris.jpg
/Magnus
Jag vill inte säga mot pheer (eftersom han *har* testat men det har inte jag),
men spontant låter det som om även startracer's metod skulle fungera.
D.v.s att bara shifta runt en diod. Om de tre ROW linjerna ligger fast som 001,
så ser jag inte varför de 7 andra raderna också tänds upp...
Om det inte är något i bit-hanteringen i C-koden som ställer till det...
Fasen, jag *måste* se till att få upp en test-koppling...
Alla modulerna ska enligt uppgift ha varit testkörda innan leverans
till mig, men om du ändå vill så skickar jag gärna över en extra för
att utesluta fel på den du fick.
men spontant låter det som om även startracer's metod skulle fungera.
D.v.s att bara shifta runt en diod. Om de tre ROW linjerna ligger fast som 001,
så ser jag inte varför de 7 andra raderna också tänds upp...
Om det inte är något i bit-hanteringen i C-koden som ställer till det...
Fasen, jag *måste* se till att få upp en test-koppling...

Alla modulerna ska enligt uppgift ha varit testkörda innan leverans
till mig, men om du ändå vill så skickar jag gärna över en extra för
att utesluta fel på den du fick.
- startracer
- Inlägg: 48
- Blev medlem: 29 april 2007, 15:01:10
- Ort: Lund
Jag har ändrat och rensat lite i koden så att den nu skickar 128 bitar innan den sätter ROW_SEL, COL_EN, LATCH och det andra enligt tidigare. Resultatet blir fortfarande detsamma, en hel kolumn som tänds. Jag har kollat på skopet så att signalerna finns på processorpinnarna men jag har ingen logikanalysator så jag kan inte se om de ligger rätt i tiden, men koden är så enkel att det inte borde vara något problem med det.
Ändrad kod:
http://213.238.215.75/code2.txt
Sodjan: Om du vill får du hemskt gärna skicka över en annan matris så jag kan utesluta. Det är väldans hyggligt av dig.
/Magnus
Ändrad kod:
http://213.238.215.75/code2.txt
Sodjan: Om du vill får du hemskt gärna skicka över en annan matris så jag kan utesluta. Det är väldans hyggligt av dig.
/Magnus
- startracer
- Inlägg: 48
- Blev medlem: 29 april 2007, 15:01:10
- Ort: Lund
Något som ser intressant ut är att kolumnen med dioder lyser starkare ju högre rad jag väljer med ROW_SEL-pinnarna. Väljer jag rad 0 så lyser dioderna väldigt svagt medan de lyser starkt om jag väljer rad 7 =) Det är nästan som om varje transistor släpper igenom lite lite ström vardera även när de inte ska vara aktiverade av multiplexerkretsen. Jag har uppfattat det så på schema och datablad att transistorerna driver och 62705-kretsarna sänker?
sodjan: Jag har skickat ett mail med min adress till dig.
/Magnus
Edit: Antagligen tankefel av mig. Multiplexerkretsen väljer ju bara ut en transistor som driver så även om de andra skulle släppa igenom lite ström så borde det inte bli någon skillnad i ljusstyrka beroende på vilken rad jag väljer eftersom strömmen skulle bli samma ändå? Det är lite spännande det här =)
sodjan: Jag har skickat ett mail med min adress till dig.
/Magnus
Edit: Antagligen tankefel av mig. Multiplexerkretsen väljer ju bara ut en transistor som driver så även om de andra skulle släppa igenom lite ström så borde det inte bli någon skillnad i ljusstyrka beroende på vilken rad jag väljer eftersom strömmen skulle bli samma ändå? Det är lite spännande det här =)
- startracer
- Inlägg: 48
- Blev medlem: 29 april 2007, 15:01:10
- Ort: Lund
Okej, nu blir det lite pinsamt. Eftersom jag inte haft nära tillgång till 12V vid datorn så har jag matat matrisen med 5V. Min tanke var att den har ingångar för två spänningar, 5V och 12V och att 12V bara regleras till 5V. Nyss testade jag att koppla in 12V eftersom jag hittade ett aggregat i en låda. Kopplade in det och flyttade bygeln vid spänningskontakten. Poff, så funkar allting precis som det ska... Någon som vet vad 12V-pinnen har för speciell funktion förutom att förvandlas till 5V för drivning av logiken?
Så nu kan jag även bekräfta att både min variant och pheers variant med att skifta in en respektive 128 bitar åt gången fungerar fint.
/Magnus
Så nu kan jag även bekräfta att både min variant och pheers variant med att skifta in en respektive 128 bitar åt gången fungerar fint.
/Magnus
Om man matar med 12V och har bygeln i VREG-läge (alltså i läget mot kondensatorerna), klarar man sig utan 5V-matningen då eller behövs den ändå?
Eller rättare sagt, går det att köra med bara 12V? Bara 5V verkar ju konstigt nog inte vara ett alternativ. Jag trodde också att det var 5V ELLER 12V matning beroende på byglingen.
Eller rättare sagt, går det att köra med bara 12V? Bara 5V verkar ju konstigt nog inte vara ett alternativ. Jag trodde också att det var 5V ELLER 12V matning beroende på byglingen.
- startracer
- Inlägg: 48
- Blev medlem: 29 april 2007, 15:01:10
- Ort: Lund
Just nu matar jag den bara med 12V och har bygeln i det läge som är närmast kanten på kretskortet, d.v.s. närmast komponenten R12 (i läge VLED) och nu fungerar den fint. Tidigare hade jag bygeln i det andra läget (VREG) och matade den bara med 5V. Då fungerade det inte så bra utan det blev bara hela kolumner som visades. Kanske är det någon komponent som vill ha 12V för att kunna driva dioderna eller så, och med bara 5V på den, eller något skumt värde i brist på riktig spänning, så betedde den sig skumt och tände alla dioder.
Så det går tydligen fint att köra den med bara 12V. Jag trodde också att det var optional, att köra antingen eller, men tydligen inte? Det jag ska göra nu är att låta bygeln vara i läget VLED den är och ta bort 12V och koppla in 5V på 5V-pinnen och se vad som händer.
Ehmm... jag gjorde precis så nu att jag tog bort 12V-matningen och kopplade in 5V på 5V-pinnen och hade kvar bygeln i samma läge som vid 12V och det fungerar precis lika bra nu... Så... vad jag tänker nu är att... jag mest är förvirrad... Vad jag kan se så går 12V in i spänningsregulatorn och den ger sen 5V ut. Denna 5V går sedan till VREG-pinnen på bygeln medan 5V från kontakten går till VLED-pinnen på bygeln medan mitten på bygeln går... tja, någonstans.
Ett sista test: Tar jag bort bygeln helt så får jag tillbaka problemet med att bara hela kolumner visas.
pheer: Hur kopplar du spänningen till din matris och vilket läge har du bygeln i?
/Magnus
Så det går tydligen fint att köra den med bara 12V. Jag trodde också att det var optional, att köra antingen eller, men tydligen inte? Det jag ska göra nu är att låta bygeln vara i läget VLED den är och ta bort 12V och koppla in 5V på 5V-pinnen och se vad som händer.
Ehmm... jag gjorde precis så nu att jag tog bort 12V-matningen och kopplade in 5V på 5V-pinnen och hade kvar bygeln i samma läge som vid 12V och det fungerar precis lika bra nu... Så... vad jag tänker nu är att... jag mest är förvirrad... Vad jag kan se så går 12V in i spänningsregulatorn och den ger sen 5V ut. Denna 5V går sedan till VREG-pinnen på bygeln medan 5V från kontakten går till VLED-pinnen på bygeln medan mitten på bygeln går... tja, någonstans.
Ett sista test: Tar jag bort bygeln helt så får jag tillbaka problemet med att bara hela kolumner visas.
pheer: Hur kopplar du spänningen till din matris och vilket läge har du bygeln i?
/Magnus