Bu arada daha önce soruldu mu bilmiyorum? HDMI to DVI dönüştürücü ile DVI girişine takılabilir mi? Sorun olur mu? HDMI varken buna gerek yok tabi, ama bilgimiz olsun bir kenarda. HDMI ekran bulamazsak bir süre gene işe yarar mı acep?
Aslında kabaca HDMI, DVI'ın ses ve birtakım başka veriler eklenmiş halidir. Dolayısı ile teorik olarak çalışır, ancak ses çıkmaz. Sesi doğrudan Amiga'dan almak lazım.
Ancak HDMI yada DVI fiziksel bağlantı tipine verilen isim. Her iki fiziksel bağlantı tipinde de transfer edilebilecek formatlar apayrı bir konu. Yani örneğin biz 720x576p yada 720x576i formatı ile görüntüyü HDMI'a basıyoruz. Eğer karşıdaki monitör yada TV bu formatı desteklemiyorsa, görüntü alamayız.
HDMI girişi olan cihazlar genelde TV oluyor, dolayısı ile 720x576 formatı TV çözünürlüğü olduğundan sorunsuzca gösteriliyor. Fakat DVI girişe sahip cihazlar genelde monitör oldukları için hepsi 720x576 formatını desteklemeyebilir, emin değilim. Monitorler genelde 640x480, 800x600 vb tarzı grafik çözünürlüklerini destekliyor... (Not: güncel TV'ler genelde hem grafik formatlarını hem de TV çözünürlüklerini sorunsuzca gösteriyorlar.)
Bir de son olarak, DVI fişinde hem analog, hem digital pinler var. Bazı ekran kartları aynı fiş üzerinden hem analog, hem dijital veriyi basıyor. Bazı pasif DVI>VGA dönüştürücüler de aslında sadece bu analog pinleri VGA fişindeki karşılıklarına bağlıyor. Dolayısı ile sanki DVI>VGA 'e dönüştürülmüş oluyor ama aslında böyle bir dönüşüm yok. Zaten o kartlar analog çıkışı da üretiyor ve DVI fişinden dışarı veriyor.
Bu ne demek, bizim scandoubler bu tarz pasif çeviriciler ile VGA monitore bağlanırsa çalışmaz. Çünkü çıkışmız dijital...
Aşağıdaki görsele bakabilirsiniz. Turuncu olan pinler analog sinyal taşıyan pinler:
@delimavi bize bu bile yeter
Aslında bana da yeter de, burada amaç sadece HDMI-520'yi tamamlamak değil. Aynı zamanda FPGA bilgimi arttıracak deneyimler kazanmak. Sonuçta OSD tek renk olsa da olur. Hatta olmasa bile olur. Ama şimdi donanım tabanında sanki bir ekran kartı yada "C64 ün VIC'i" tadında bir video çıkış entegresi tasarlamanın tadını alıyorum.
Proje bitince FPGA kaynak kodlarını temize çekip burada yayınlayacağım. Hatta bölüm bölüm vakit yettikce anlatacağım.
Şu anda FPGA içerisinde tasarladığım OSD motoru, ekranın herhangi bir yerine, istenilen ölçülerde bir pencere açıp, bunun içerisine 256 renk grafik ve yazı overlay edebiliyor. Hatta transparan bindirme de yapabiliyor.
Sözüne ettiğim OSD motoruna ait FPGA kodu:
// ----------------------------------------------------------------------------
// OSD Logic
// ----------------------------------------------------------------------------
// OSD Registers
reg OSD_Visible;
reg [7:0] OSD_PosX;
reg [7:0] OSD_PosY;
reg [7:0] OSD_Width;
reg [7:0] OSD_Height;
reg [3:0] OSD_Border; // Border Width ...
reg [7:0] OSD_BorderColor;
reg [7:0] OSD_BackColor;
reg [7:0] OSD_LineColor[8];
initial
begin
OSD_Visible=1;
OSD_PosX=116;
OSD_PosY=190;
OSD_Width=128;
OSD_Height=64;
OSD_Border=2;
OSD_BorderColor<=0; // Black ...
OSD_BackColor<=1; // Dark Blue ...
OSD_LineColor[0]=8'b11100000;
OSD_LineColor[1]=8'b11100000;
OSD_LineColor[2]=8'b11100000;
OSD_LineColor[3]=8'b10010100;
OSD_LineColor[4]=8'b10010100;
OSD_LineColor[5]=8'b10010100;
OSD_LineColor[6]=8'b10010100;
OSD_LineColor[7]=8'b00001111;
end
// OSD Engine Output signal (OSD Overlay)
reg OSD_Switch=0;
// OSD Engine Output Data (R,G,B) ...
reg [7:0] OSD_DataRed;
reg [7:0] OSD_DataGreen;
reg [7:0] OSD_DataBlue;
// Gerçek ekran 720x576 ...
// Ancak OSD pixelleri 2:2 olduğu için, bu koordinatlar OSD ye göre /2 yapılmış
wire [9:0] _RasterXOSD;
wire [9:0] _RasterYOSD;
assign _RasterXOSD[9:0]=RasterX[10:1];
assign _RasterYOSD[9:0]=RasterY[10:1];
// OSD alanı içerisinde, OSD Ram üzerinden okuyacağımız pixel koordinatları
wire [9:0] OSDX,OSDY;
assign OSDX[9:0]=_RasterXOSD[9:0]-OSD_PosX;
assign OSDY[9:0]=_RasterYOSD[9:0]-OSD_PosY;
assign OSDRamRdAddr[9:0]= OSDX + (OSDY/8) * 128;
wire _OSDPixel;
assign _OSDPixel =
(OSDRamRdData[0] & (OSDY[2:0]==3'b000)) ||
(OSDRamRdData[1] & (OSDY[2:0]==3'b001)) ||
(OSDRamRdData[2] & (OSDY[2:0]==3'b010)) ||
(OSDRamRdData[3] & (OSDY[2:0]==3'b011)) ||
(OSDRamRdData[4] & (OSDY[2:0]==3'b100)) ||
(OSDRamRdData[5] & (OSDY[2:0]==3'b101)) ||
(OSDRamRdData[6] & (OSDY[2:0]==3'b110)) ||
(OSDRamRdData[7] & (OSDY[2:0]==3'b111));
always @(posedge VideoClock)
begin
if ((_RasterXOSD>=OSD_PosX-OSD_Border+2) && (_RasterXOSD<OSD_PosX+OSD_Width+OSD_Border+2) && (_RasterYOSD>=OSD_PosY-OSD_Border) && (_RasterYOSD<OSD_PosY+OSD_Height+OSD_Border))
begin
OSD_Switch<=OSD_Visible;
if ((_RasterXOSD>=OSD_PosX+2) && (_RasterXOSD<OSD_PosX+OSD_Width+2) && (_RasterYOSD>=OSD_PosY) && (_RasterYOSD<OSD_PosY+OSD_Height))
begin
if (_OSDPixel==1'b1)
begin
// OSD Pixel Color ...
// OSD_DataRed<=160;
// OSD_DataGreen<=160;
// OSD_DataBlue<=240;
OSD_DataRed<=OSD_LineColor[OSDY[7:3]][7:5]<<5;
OSD_DataGreen<=OSD_LineColor[OSDY[7:3]][4:3]<<6;
OSD_DataBlue<=OSD_LineColor[OSDY[7:3]][2:0]<<5;
end else
begin
// OSD Background Color ...
// OSD_DataRed<=0;
// OSD_DataGreen<=0;
// OSD_DataBlue<=40;
OSD_DataRed<=OSD_BackColor[7:5]<<5;
OSD_DataGreen<=OSD_BackColor[4:3]<<6;
OSD_DataBlue<=OSD_BackColor[2:0]<<5;
end
end else
begin
// OSD Border Color ...
// OSD_DataRed<=OSD_BorderR;
// OSD_DataGreen<=OSD_BorderG;
// OSD_DataBlue<=OSD_BorderB;
OSD_DataRed<=OSD_BorderColor[7:5]<<5;
OSD_DataGreen<=OSD_BorderColor[4:3]<<6;
OSD_DataBlue<=OSD_BorderColor[2:0]<<5;
end
end else
begin
OSD_Switch<=0;
end
end
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Oluşturulan OSD verisi ile gerçek görüntünün MUX edildiği atama ...
assign Red[7:0]= OSD_Switch ? OSD_DataRed : RamVideoData[23:16];
assign Green[7:0]= OSD_Switch ? OSD_DataGreen : RamVideoData[15:8];
assign Blue[7:0]= OSD_Switch ? OSD_DataBlue : RamVideoData[7:0];
Buradaki register değerlerine PIC, I2C ile erişerek istediği OSD görüntüsünü oluşturup ekranda gösterebiliyor.
Hdmi to dv-i oradan dv-i to vga
yada hdmi to vga de neler oluyo kısaca
Hiç bir bilgim yok. Tamamen bu çevrimi yapacak converter'in kalitesine kalıyor bence iş. VGA için aslında apayrı başka bir ürün yapılması lazım. Yapılabilir ama yapacağımı sanmıyorum. HDMI hayli hayli yetiyor bence. Neden VGA için kasalım ki?