Monthly Archives: December 2009

VGA signalo generavimas

Internete yra gana daug viskiausių VGA signalo generatorių schemų FPGA čipams. Vienos geriau, kitos mažiau suprantamos. Tačiau radau vieną aiškinimą kuris man pasirodė labiausiai suprantamas ir lengvai realizuojamas.

Pradžiai reikia pažiūrėti į paveikslėlį:

FPGA VGA VESA timing

Tai visas video signalo vaizdas- balta zona tai tas ką męs matom ant ekrano, kitos dalys- nematomos, bet labai svarbios.
VESA numato visą eilę standartinių video siganalų ir raiškų variantų. Mane domina tik patys populiariausi- naudojami LCD ekranuose (native resolution) ir paprastieji VGA režimai kurie buvo naudojami su CRT monitoriais.
Dažnas žino ekranų raiškas (800×600, 1024×768), dar gal kadrų dažnį (60, 70, 75 … 100Hz), tačiau žymiai mažiau žinomi kiti labai svarbūs parametrai- pixel clock ir eilučių dažnis.
Yra dar sinchronizacijos signalai, jų ilgis, dažnis, vieta ir poliariškumas taip pat standartizuoti.
Darant VGA signalą geriausiai skaičiuoti x ir y koordinates ne iki standartinio ekrano dydžio, bet iki viso signalo galo. T.y. VGA režime x reikia skaičiuoti ne iki 640 taškelio, bet iki 800. Tada labai lengva realizuoti teisingus sinchro signalus- po vaizdo palaukiam 16 pixelių (A), padarom sinchro signalą ir palaikom 96 pixelius (B), pašalinam sinchrosignalą ir dar 48 pixelius laukiam iki naujos eilutės pradžios (C). Panašiai ir su y koordinate.

Dabar biški VESA standartinių duomenų:

Mode Pixel clock, MHz VS, Hz HS, kHz Sinchro poliariškumas x y A B C D E F
VGA 60 25.17 60.04 31.46 – – 640 480 16 96 48 11 2 31
VGA 75 31.5 75 39.38 – – 640 480 16 96 48 11 2 32
VESA 1024×768 65 60 48.36 – – 1024 768 24 136 160 3 6 29
VESA 1280×1024 108 60 64 + + 1280 1024 48 112 248 1 3 38

Jei domina kitos rezoliucijos, va online skaičiuotuvas: http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html

Šiaip dažniai gali vos vos skirtis- monitorius sugeba prisiderinti prie nedidelių nukrypimų, bet geriau daryti tiksliai. Darant schemutes su FPGA ir naudojant VGA režimą, galima pernelyg nepaisyti elementų vėlinimo, tačiau darant projektą skirta normaliam LCD monitoriui taimingas labai svarbu- 100MHz pixel clock tai jau ne juokas. Čia galioja ne tik vėlinimas išorinėje atmintyje, bet ir vėlinimas pačioje FPGA mikroschemoje.
Vienas iš geriausiu prietaisų pasitikrinti vėlinimus yra LCD monitorius dirbantis “native resolution”- 17″ monitorius tai “tikslus oscilografas” su 10ns “raiška”.

Pavyzdinis Verilog failas VESA 1027×768 vaizdelio generavimui (rodo kelius brūkšnelius):
Continue reading →

Svetimas PONG projektas

Čia lygtai Armando puslapiuose paminėtas projektas. Tik autorius kodą rašė Xilinx Spartan plokštėje (Tiesa, VHDL kalba universali, nepririšta prie hardwarės). O aš norėjau pasibandyti su Altera DE1 plokšte. Šiaip viskas tiko, tik reikėjo invertuoti mygtukų signalus… ir kažkodėl autoriaus source kode (bent jau tame kur aš nusikroviau) nebuvo šrifto. Todėl failai nesikompiliavo, o ir be jo, nebuvo jokios tekstinės informacijos ant ekrano.

FPGA Altera DE1 Pong

Todėl aš primontavau klasikinį 8 bitų ATARI kompiuterio šriftą ir dar prikabinau grafinį Quartus block failą, kad paprasčiau matytusi kokia FPGA koja kur panaudota. Originalus VHDL kodas (+šriftas) įdėtas į papildomą katalogą.

Norintiems pasibandyti, čia Altera Quartus PONG archyvas (kompiliuojasi su 8 versija tikrai).

Pačiam autoriui rekomenduoju vietoje mygtukų “aukštyn – žemyn” panaudoti rotary encoderius- tada galima perduoti ne tik judėjimo kryptį, o ir greitį. Tada žaidimukas tikrai bus įdomensnis, o ir encoderių logika nėra labai sudėtinga.

Osciliatorių testeris

Aš naudojų “naudotas” detales, šrotą. Kartais tai duoda papildomas problemas. Kai dariau ciklono plokštę, man reikėjo 50MHz osciliatoriaus (generatoriaus). Aš ir panaudojau tokią detalę. Tačiau kai viską surinkau, tik vėliau pastebėjau, kad prie esamo Vcc tas osciliatorius neveikia. O kelti sistemos įtampa aš negalėjau dėl kitų elementų parametrų. Šiandien staiga užėjo noras pasidaryti kaip ir testavimo plokštelę ir kartu kaip išorinį “clock” šaltinį. Taip gimė šitas “greitukas”.

Schemą nupasakosiu žodžiais: kištuko lizdas maitblokiui, jumperių (trumpiklių) komplektas pasirinkti darbo įtampai, universali vieta osciliatoriams, stabilizatorius (MIC29152), kondikai, indikacija, SMA lizdelis signalui.

Eagle PCB paveiksliukas:
Osciliatoriu tersteris
Jei norėsit, PCB paveiksliukas, 600dpi.

MIC29152 tai “low dropout” stabiliztorius kurio išėjimo įtampa nusistato su išoriniais rezistoriais. Dabar, kaitaliojant trumpiklius, galima pasirinkti Vcc įtampą šiom reikšmėm: 1.24V (be trumpiklių), 1.5, 2.5, 3.3, 5V.

Osciliatoriu tersteris
Surinkto aparačiuko nuotraukyteje matosi, kad panaudota tik viena SMA jungtis. Visas PCB padengtas alavu tik todėl, kad čia čiupinėjamas prietaisas, o tokie su neapsaugoti variu labai negražiai pajuoduoja. Reikėtu kur nors nusipirkti kokybiško lako spausdintų plokščių apsaugai.

Prilituotas 3.3V osciliatorius parodė, kad jis puikiausiai veikia ir 2.5V režime. Tačiau prie 1.5V jau neveikia.

FPGA šrotas: Nokia ir Siemens ADSL bazinės stotys

Nupirko šrotines ADSL bazines stotis, pačios pirmosios kartos Nokijas ir Siemensus. Šiaip visokių 19″ racku pilnų elektronikos, kažkiek Cisco tinklinės įrangos. Elektronika specifinė, plačiai vartojamu detalių nėra. Užtat yra daug FPGA ir CPLD čipukų.

FPGA Altera Flex

Čia idomesnė elektronika kurią atsinešiau namo nusikrapštyti idomesnes mikroschemas. Pagrinde domina FPGA, tačiau man tinka tik nedidelės (fiziškai) mikroschemos ir nelabai naujos. Naujosios jau BGA korpuse, o tokį namų sąlygom nepanaudosi. Tas pats ir su senom, bet labai dideliom mikroschemom- 240 plonų kojyčių tai jau labai daug.
Pagrinde tokios mikroschemos- Altera Flex’ai ir Max’ai pas optinius imtuvus, o štai ADSL skirstytuvai turi Arijas. Yra ir konfiguracinių čipų. Seni flexai geri dar tuo, kad jom užtenka vieno maitinimo šaltinio, tačiau neturi navarotnų PLLų. Dar yra visokių egzotinių atminčių- nuo IDT ar Cypress dviporčių statinių ramų iki Samsung ar Mitron SDRAMų.

Biški fotkių toliau: Continue reading →

ATX maitblokio perdarymas į reguliuojamą laboratorinį šaltinį

Šiaip tai gana paprasta užduotis, tačiau kadangi yra galimybė užsipurtyti negyvai, rašau ispėjimą: Šiame projekte galima prisiliesti prie aukštos įtampos laidininkų kurie turi galvaninį ryšį su žeme. Taip pat, schemoje yra kondensatoriai, kurių sukauptas krūvis gali būti pavojingas gyvybei.

Jau rašiau, kad remontavau ATX maitblokius ir vienas maitblokis buvo ant tiek pasvilęs, kad nepavyko greitai jį atgaivinti. Todėl nutariau panaudoti to maitblokio kūnelį kaip šio projekto donorą. Šiame ATX maitblokyje veikiantis budintis ir pirminė pusė. Problema buvo kažkur antrinėje, žemojoje pusėje.

Užduotis: reguliuojamos įtampos laboratorinis maitinimo šaltinis. Čia “light” versija- išėjimo įtampa nuo 5 iki kažkiek daugiau nei 12V. Užtat daug amperų. “Light” versija todėl, kad nesikišama į transformatoriaus pajungimą. Jei bus noro, parašysiu dar dvi versijas- “normal” ir “advanced” 🙂

Pirmiausia- nuardom viską, kas susijes su 12, 5 ir 3.3V grandinėmis. T.y. visus išėjimo diodus, kondikus, droselius. Taip pat nuardom ir neigiamų įtampų grandines. Pakeliui pašalinam ir ventiliatoriaus valdymą- jį reikės perdaryti pagal kitus principus. Taip pat dalinai nuardom ir paleidimo grandinę. Ją nuardom todėl, kad bent jau šitame modelyje per ją padaryta šiokia tokia apsauga.

ATX workbench PSU

Kad lengviau susigaudyti, įdedų ATX maitblokio schemą. Ji nėra šio modelio schema, tačiau ji leis bent jau susigaudyti kas ir kaip. Po iliustraciniu paveiksliuku yra nuoroda į didelį paveikslą.
ATX workbench PSU
Nuoroda į didelę schemą.

Mus domina šios grandinės: FEEDBACK (schemoje R25 ir R26 sujungimas patenkantis į TL494 1 koją). Man užteko susirasti trumpiklį ir jį pašalinti. Rezistorių R21 analogas liko schemoje, R20 geriau pašalinti arba pamastyti kaip jis veiks. Čia prisilituojam laidelį kuri jungsime prie išėjimo gnybto.
POWER GOOD grandinė padaryta ant LM393 neliečiame nes bent jau mano schemoje ji netrugdė.
Visa feedback ir overvoltage circuit pašalinta: Q10, Q6, Q5 ir Q11 (paveikslėlyje kažkodėl Q1). Ir visa smulkmė aplink juos (pas manė schema kiek skirėsi). Ten buvo prie Q1 ir 4 TL494 kojos elektrolitas švelniam startui ir pora rezistorių. Jie liko. Vietoje paleidimo tranzo Q1 (vėl sakau schema neatiko- mano schemoje ten stovėjo npn ir jo emiteris buvo žemė) pastačiau jungiklį.
Poto per naujo įlitavau dvigubą diodą D18, įdėjau droselį ant žiedo vietoje multidroselio ir L1. Įlitavau kondiką ant išėjimo C30. Čia ir prisijungia kintamas rezistorius. Jo vienas gnybtas prie senojo 12V, kitas prie žemės. Sliaužiklis jungiasi prie feedback grandinės. Iškarto ispėjimas- šis laidas turi būti labai trumpas ir gal net ekranuotas. Veikiančioje schemoje užtenka paimti už šio laido izoliacijos ir išėjimo įtampa moduliuojasi 100Hz nuo tinklo trugdžio.

Jau labai knieti jungti į rozetę? Nėvelnio! Reikia pasitikrinti- reikia išorinio maitinimo šaltinio apie 12V. Jo minusą prijungiam prie išėjimo žemės. O pliusą- prie TL494 maitinimo (12 kojos). Dabar labai gerai būtų oscilografas, bet tiks ir multimetras. Turim gauti tokias reikšmes: DT (4), FB (3) kojos- nulis ar panašiai. Ant CT (5) turi matytis taktinio generatoriaus “pjūklas”. Operacinių (komparatorių) kojyte 1+ (1) apie nulį- čia gi feedback, o aparatas dar neveikia. 1- (2) turi būti 5V iš VREF (14) arba kažkokia mažesnė įtampa. Beja, čia bus jūsų maitblokio “apatinė” riba. Kito komparatoriaus: 2+ (16) apie 0V, nes bent jau schemoje ta koja pajungta prie žemės :). 2- (15) kažkas teigiamo. Mano schemoje ten rodos pirminės srovės apsauga. Išėjimo emiteriai E1 ir E2 (9, 10) pajungti į žemę. O štai kolektoriuose turi matytis stačiakampiai impulsai. Panašūs impulsai užtinkami ir už ryšio transformatoriaus T2 ant galios raktų Q1 ir Q2. Kad pasitikrinti feedback veikimą, galima laikinai atjungti laidą nuo kintamo rezistoriaus kojos ir išėjimo ir perjungti prie VREF (14). Tada sukiojant sliaužiklį link Vref išėjimo impulsai turi išnykti, jei jautriau pasukinėsite, pamatysite kaip impulsai siaurėja (veikia PWM moduliacija).

ATX workbench PSU

Neužmirštam pajungti kokią nors apkrovą (be apkrovos ši schema veiks nestabiliai). Dabar jau galima būtų pabandyti jungti į 230V tinklą. Geriau jungti per kaitrinę lemputę kad apriboti srovę eksperimento metu ir be reikalo nepriduminti kambario. Aš pasinaudojau kitu laboratoriniu maitblokiu kuris turi srovės apribojimą- nustačiau 200V ir apie 100mA ir viskas normaliai veikia ir reguliuojasi. Tik va iškilo mintis, kad reikia padaryti vargšos TL494 mikroschemos apsaugą- tokia pat kaip aprašyta kito maitblokio komentaruose.

Filmuko metu panaudotas silpnoka apkrova, todėl tokios mažos srovės. Tiesa, 200V maitblokio srovę padidinau iki 200mA nes kai gamina ~20W šilumos jau 100mA (200Vx0.1A=20W) srovės neužtenka.

Va toks greitas straipsniukas.
High Voltage