Sida 1 av 1

Dataöverföring till ledskärm

Postat: 31 maj 2006, 21:34:44
av Maze
Håller på och ritar kopplingsscheman på mitt ledskärmsbygge och har i princip bara ett problem kvar att lösa och det är överföringen mellan enheterna. Tar och beskriver lite hur jag har tänkt och hoppas på lite bra förslag så jag kommer vidare.

Systemet består av en huvudenhet och 24 stycken ledmoduler. Huvudenheten AD omvandlar och processar först en VGA signal för att sen skicka ut den till ledmodulerna. Varje ledmodul består av 256 pixlar och behöver därför matas med 3x256x12x60 = 552960 bitar data per sekund. Till en början kommer det byggas 24 moduler men jag vill konstruera systemet så det klarar 48 moduler om fler byggs i framtiden.

Nu till problemet. Jag vill inte bygga något stjärnnät för styrsignalen utan vill kunna linka signalen vidare från ena modulen till nästa. Detta gäller bara kolumnvis för att förenkla kabeldragningen. Styrenheten får med andra ord ha flera utgångar, en för varje kolumn men de ska skicka samma data eftersom jag vill slippa addressera om modulerna om de riggas om. Detta ger en datahastighet runt 30 Mbps och hur överför man det på ett bra sätt ? Har funderat lite på ehternet men det känns lite överdrivet då det bara finns en enda sändare och flera mottagare och alla ska ha samma information. Det som finns att välja på är väl RS-422 eller LVDS och ett eget protokoll ? I varje modul finns en FPGA med stöd för LVDS men det känns lurigt att bygga ett multidrop nätverk med det. Har funderat på att låta varje modul ta emot och terminera en LVDS signal från förra enheten och sen skicka ut en ny signal på ett par extra pinnar till nästa. Då försvinner problemet med terminering och långa kablar men på bekostnad av fördröjning av signalen i varje enhet. Undrar även på om en lösning med en PLL som låser på dataströmmen som manchesterkodats är en bra lösningen för själva överföringen ? Tacksam för förslag på hur jag kan lösa detta både hård och mjukvarumässigt.

Postat: 1 juni 2006, 10:23:41
av macgyver
Hur får du det till 30Mbps?
är varje kolumn i modulerna 256 bitar stora?

Postat: 1 juni 2006, 10:40:05
av vfr
552960 x 48 = 26542080 d.v.s ca 30MHz med lite overhead.

Postat: 1 juni 2006, 13:01:18
av macgyver
Detta gäller bara kolumnvis för att förenkla kabeldragningen.
beräkningen 3x256x12x60 = 552960, om 256 skulle vara en kolumn så skulle det ju bara vara 48 rader i hela displayen

Postat: 1 juni 2006, 17:07:32
av Maze
"3x256x12x60 = 552960 bitar" 3 för att varje pixel består av RGB, 256 för antalet pixlar per modul, 12 för antalet bitar per färg och 60 för uppdateringen. Varje modul har 16x16 pixlar.

Postat: 1 juni 2006, 17:27:42
av rehnmaak
Jag skulle satsa på en UART till varje modul från huvudenheten. Du skulle kunna dra en flatkabel med 8 seriekanaler. Alla dessa 8 kanaler går sedan in på modulens FPGA och sedan väljer man vilken man ska lyssna på mha en mux (i FPGA:n). Nackdelarna med denna lösning är att du måste programmera in vilken kanal modulen ska lyssna på samt att du måste ha 8st line receivers. Det elektriska gränssnittet skulle jag köra med RS422.

Postat: 4 juni 2006, 00:34:30
av Maze
Problemet är att jag helst inte vill bygga ett stjärnnät vilket jag gör indirekt med ovanstående lösning. Varje modul blir en m2 så flatkabel faller nog bort som media mellan modulerna. Det jag är mest nyfiken på är om det är något vidare proffsigt att "buffra" signalen i varje moduls FPGA och bygga ett multidrop system på detta sätt. Nackdelen med LVDS är just att det blir lite svårt med "riktigt" multidropnätverk då längden på stubsen i varje modul blir svår att hålla ner och att sista enheten måste termineras för att något ska fungera huvudtaget.

En liten skiss på systemet med 48 moduler i 8 kolumner. Mellan varje kolumn finns ett mellanrum så jag vill kunna koppla ihop modulerna vertikalt efter varandra. Om sen varje kolumn får en egen kabel till huvudenheten spelar ingen roll då kabeldragningen där då blir lättare.

X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X

X = modul

Hade tänkt ge varje modul en egen address som ställs in på modulen via en dilswitch. På datalänken skickas sen pixelvärdena från första till sista modulen efter varandra och varje modul tar emot det som motsvarar modulens addressen. Varje modul ska ta emot 768 stycken 12 bitars ord. Största frågan är då hur jag löser hårdvaran och hur konstruerar jag en USART på bästa sätt i FPGAn vid dessa hastigheter ? Oversampla eller synka med en PLL ?