Newsgroup: it.hobby.elettronica.digitale
Titolo: Convertire un pixel a 256 colori in un segnale VGA

Salve a tutti,
sempre per il mio progetto di un home computer, mi servirebbe questa
informazione...
Supponiamo che io abbia una Ram di 64Kb che viene letta/scritta dal
processore con i dati che dovranno essere visualizzati. Questi dati
sono a 8 Bit, quindi ogni pixel sarà individuato dal un valore da 0 a
255. A sua volta, tramite una palette di 256 colori, un pixel è
identificato dai valori R G B anche essi a 8 bit (quindi da 0 a 255
come valore numerico).
Per generare un segnare vga ho bisogno di tre valori RGB analogici di
Vpp 0.77 v, come faccio ad ottenerli? Devo utilizzare un PIC (per
esempio) che ottenga i valori RGB dalla ram e li spedisca ad un DAC?
Esistono DAC a 24 ingressi e 3 uscite?
Possibile che non esista un integrato che, dato l'indirizzo della ram,
lo converta direttamente in segnale VGA?
Voi come lo risolvereste il problema?
P.s. Il processore principale non lo vorrei appesantire con calcoli
inutili.

 lo converta direttamente in segnale VGA?
Se per questo esistono già le VGA fatte e finite e con 50 euro te le tirano
dietro.
Volendo fare da solo bisogna remare.
P.s.
Io farei (cioè... ho fatto così)
le informazioni relative ai tre colori Rosso, verde e blu in tre memorie
separate.
In ogni byte memorizzo le informazioni relative a 4 pixel...
in pratica sono pussibili 2^2 * 3 =12 colori... con i dac "a resistenze
pesate" autocostruiti.
Il casino è solo creare il sincronismo e generare gli indirizzi per le
memorie.
Davide B.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Voi come lo risolvereste il problema?
Inizialmente punterei su palette fissa e reti resistive come convertitori... E'
una soluzione molto semplice e la qualità delle immagini che si possono ottenere
usando il dithering è davvero buona (fotografica). Prova ad impostare il video
del tuo PC su 256 colori e te ne renderai conto: le immagini che vedi sono
ottenute con una palette fissa tipo quella che ti ho detto prima.
Ciao,
A.D.

 A.D.
La palette a 256 colori può essere sempre riprogrammata, di questo ne sono
sicuro perchè nella mia gioventù (6 anni fa :-| ) facevo il demo coder.
La palette è in una zona di memoria di 768 Byte (256 * 3). Comunque forse
ho trovato una via d'uscita, leggi il topic "Home Computer con Zilog
eZ80190".
Grazie e Ciao !
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 utilizzare (hanno moltissimi piedini...)
I ramdac si possono recuperare da vecchissime schede VGA,
di solito hanno un contenitore DIL a 28 pin, qualche volta
addirittura su zoccolo, percio' molto facili da riutilizzare.
Le prestazioni non sono eccezionali, risoluzione 8 bit,
palette di 256 colori, un centinaio di MHz di banda, pero'
per qualche circuito sono ottimi, considerata la difficolta'
di trovare qualcosa di simile in commercio.

 ha scritto nel messaggio
news:37164e13.04102...@posting.google.com...


Premetto che mi sono svegliato da poco e non sono molto lucido.. :)))

Cioè intendi implementare una palette di 256 colori a 24 bit??
Per come la vedo io, 8 bit per ciascuna delle 3 componenti, fanno 24.
Con altrettante linee digitali (24).
Non conosco il micro che intendi usare, nè l'architettura dello z80, ma
quanto è ampio il bus dati del tuo sistema?
Mi aspetto al max un bus a 16 bit, se non addirittura ad 8, magari anche
multiplexato con il bus indirizzi.
Nella peggiore delle ipotesi, usando 3 latch ad 8 bit collegati ai DAC, se
vorrai aggiornare lo schermo direttamente dal micro, avrai bisogno di 3
memory cycle per fornire i livelli RGB e disegnare un solo pixel, o sbaglio?
L'integrato dei tuoi sogni potrebbe essere una fpga opportunamente
configurata per contenere l'array della palette
(1byte*3componenti*256elementi = 768byte, magari in sram), leggere la ram
(condivisa col micro) in cui è definita la matrice dei pixel che compongono
il video, sparare i 3 byte rgb ai DAC e generare i sincronismi orizzontali e
verticale richiesti dal monitor VGA.
In tal modo, dal micro, dovresti far viaggiare solo un byte per pixel sul
bus dati, e il resto se lo piange la fpga.
Nel caso abbia scritto fesserie, ti prego di non infierire! ;))
Buona serata a tutti.
Gabriele.

 di solito hanno un contenitore DIL a 28 pin,
28 piedini?!?
Devono essere veramente vecchissime! :-)
Tent'è che non ne ho mai viste... :-)

 La palette è in una zona di memoria di 768 Byte (256 * 3).
Si, lo so... Però quando in Windows usi la modalità a 256 colori viene
utilizzata una palette fissa, che è quella VGA "standard". Questa palette è
ottenuta all'incirca come dicevo nel post precedente, cioè considerando 2 o 3
bit per ciascun canale RGB, quindi il risultato che ottieni è simile a quello
che otterresti con le reti resistive. (Ho anche fatto qualche esperimento per
esserne sicuro...)
Ci sono solo due problemi: 1) Senza dithering le immagini fotografiche fanno
schifo; 2) Se si ripartiscono i bit come 3 per R, 3 per G, e 2 per B, si
ottengono solo 4 grigi puri + 4 un pò "sporchini"... :-) Il risultato è comunque
più che accettabile per un home computer a 8 bit!
Ciao,
A.D.

 Tent'è che non ne ho mai viste... :-)
O forse erano 24 pin? In cantina credo di avere ancora qualcuna
di queste vga su bus isa, non so nemmeno io quanto vecchie sono,
sicuramente hanno piu' di 10 anni, io le ho smontate da vecchi pc ma
ne ho viste anche recentemente tra i rottami delle fiere.


Realtek VGA 1MByte ISA 28piedini DIL
Trident/QuadTel VGA TV9000 ISA 512Bkyte 28 piedini DIL
-- 
Saluti,
	TorbaX
 
Friendly Forum Verilog, Elettronica Digitale,Tecnologie Alternative, DSP
Location: 
http://www.digitalraptor.net
Personal Home Site: 
http://www.digitalraptor.net/torbax
(Togliere NOSPAM per rispondere).

 Trident/QuadTel VGA TV9000 ISA 512Bkyte 28 piedini DIL
Grazie! Stamattina sono andata a rumare tra i rottami in cantina
ed effettivamente ho trovato 4 vga con ramdac a 28 pin, tutti su
zoccolo. Sono schede risalenti al 1990-91.

TROVATO !!!!!!!!!!!!!!!!!!!!!!!
Analog Devices Adv7120 un ramdac 8 bit molto economico e in produzione...
Input i tre valori dei pixel (RGB) da palette e genera le uscite RGB più i
segnali di sincronizzazione per il monitor...
guardate il link :
http://www.analog.com/UploadedFiles/Data_Sheets/173587347adv7120.pdf
Esisteva e come...
Ciao !!!!


 Ciao !!!!
Interessante, ma dove intendi procurartelo?
Ho consultato Distrelec e RS e sembra non esserci.
Digikey è l'unico che ce l'ha a catalogo, ma non a magazzino. Però
quest'ultimo dispone di un TI a 10 bit niente male:
http://it.digikey.com/scripts/DkSearch/dksus.dll?Criteria?Ref=59427&Site=IT&Cat=31523464
Tra l'altro questo dac permette di configurare in output 3 tipi diversi di
sync, il che dovrebbe rendere più agevole pilotare un'uscita vga.
Ho letto anche il datasheet del micro che ha ispirato il tuo progetto.
Notevole.
L'ho guardato rapidamente, e mi sembra che disponga di un bus dati a 8 bit.
Intendi pilotare il videoDac tramite 24 delle 32 porte GPIO?
Saluti.
Gabriele.


 lo converta direttamente in segnale VGA?
L'ho trovato!!!
Ho trovato un integrato perfetto per generare un segnale video PAL/NTSC a
partire direttamente da dati RGB digitali. Praticamente svolge quasi le stesse
funzioni di un RAMDAC, solo che genera appunto un'immagine video anzicchè VGA.
Lo produce la Philips e si chiama SAA7103.
Il componente prende in ingresso una terna RGB digitale (fino a 24 bit), e
fornisce le uscite RGB ed S-video analogiche in uscita. Si può programmare la
risoluzione dell'immagine così come quella dei colori. Non solo, ha anche una
LUT programmabile interna per ciascun canale, che si può usare in diversi modi
(ad esempio come palette, o per la correzione dei toni).
Questo simpatico chip è disponibile in package TQFP a 44 piedini (spaziati di
0.8mm), quindi è anche relativamente "maneggevole".
Per maggiori informazioni questo è il link:
http://www.semiconductors.philips.com/pip/SAA7103.html
Ciao,
A.D.

 Intendi pilotare il videoDac tramite 24 delle 32 porte GPIO?
Si, è una soluzione che mi interessa, in origine avevo pensato ad un pic a
5 porte che mi mandasse i valori R G B al dac, per non appesantire il
processore...
Tu che mi consigli?
Ciao e Grazie !


 Tu che mi consigli?
Il pic andrebbe a leggere dalla ram oppure comunicherebbe sul bus con lo
Z80?
Stando ad alcuni doc (presi da 
www.epanorama.net
) che leggevo qualche giorno
fa, per produrre una schermata VGA standard (640*480*16colori a 60Hz) serve
un pixel clock di circa 25MHz.
Non sono un espertone, in particolare sui PIC (uso gli AVR), e mi chiedo se
un pic riesca a produrre questo pixel rate...
Confesso che non ho capito bene se vuoi collegare questo sistema ad una TV o
ad un monitor VGA. :))
Nel caso della TV, il sistema PAL ha un refresh rate più lento rispetto alla
VGA/NTSC, e dovrebbe tornare a vantaggio della tua implementazione.
Tutto sommato, se il micro lavora a 50MHz, non dovrebbe essere un gran
sacrificio donare metà del tempo al videoDAC, magari in un interrupt (o, se
possibile, un canale DMA, così la CPU ne risente al minimo) dedicato allo
scopo.
Però ho una perplessità sulla palette a 24 bit.
Ha senso disporre di 16,777 milioni di colori se ne puoi visualizzare
soltanto 256 alla volta?
Con 5 bit per componente puoi rappresentare 32.768 colori, più un bit da
gestire come chroma-key, e sfruttare 16 linee di dati anziché 24.
Pensa che l'Amiga ECS aveva una palette di 4096 colori (12 bit) e, a parte
la modalità HAM, ne visualizzava max 32 a 320x256!! ^__^
A parte tutto il progetto che è molto interessante, sono curioso di
conoscere il parere di qualche esperto sulla parte video, per capire qual è
la soluzione migliore.


 Lo produce la Philips e si chiama SAA7103.
RS ce l'ha a quasi 19 Euro!!!
Un pò caro, ma effettivamente fa tutto lui, inclusi i 3 sincronismi
programmabili, la lookup table interna per la palette e il colorbar
generator per i primi test, oltre all'interfaccia JTAG per il debug.
E lavora pure a 3.3v come lo Z80, eliminando la necessità di eventuali
transceiver dal design.
Davvero niente male!! :)


 segnali di sincronizzazione per il monitor...
Lo conoscevo già.
Non l'avevo preso tanto in considerazione perchè in fondo è soltanto un DAC
triplo... Non permette di impostare la palette, non genera direttamente segnali
video standard, e non gestisce direttamente una RAM esterna come i RAMDAC.
Insomma, bisognerebbe usare un bel pò di roba aggiuntiva per farlo funzionare...
Inoltre credo sia abbastanza difficile da reperire! (Casualmente non è neanche
disponibile come campione gratuito!!!)
A.D.

 la soluzione migliore.
Dipende cosa intendi per "migliore"!
Una soluzione a 256 colori con palette fissa 3R3G2B avrebbe un hardware banale e
poco costoso (rete resistiva!), una buona resa dei colori per un home computer
(mediamente migliore di quella dell'Amiga), e richiederebbe una ram video
piccola. Inoltre il pilotaggio sarebbe facile e quindi si potrebbero ottenere
risoluzioni più elevate.
Utilizzando un DAC triplo ad 8 bit si otterrebbero immagini migliori, ma
bisognerebbe per forza di cose utilizzare o una palette (256 colori) o una ram
video molto grande (colori a 24 bit). Il pilotaggio andrebbe fatto con hardware
dedicato* (un PIC non basterebbe probabilmente...), e sarebbe sicuramente più
costoso e complesso.
Si tratta quindi di fare una scelta. Un buon compromesso è usare l'SAA7103 o
qualcosa di simile...
Ciao,
A.D.
* L'"hardware dedicato" potrebbe essere la RAM video, un contatore clockato con
il pixel
clock, che indirizzi , la RAM video stessa, ed eventualmente un'altra RAM o ROM
per la palette... Le uscite dati di queste andrebbero direttamente ai DAC.
Rimarrebbe solo il problema dell'arbitraggio per far accederea la CPU alla RAM
video.