Monday, July 23, 2012

Koduvaht

Juba õige mitmes versioon kodusest uksekellast sündmuste logijast. Arvestab keskmise korteri-majaga, kus on 2 sissepääsu, õuevärav, garaaž jms. Hea märgata kui väravast käiakse, millal on keegi ukse taga kella andmas käinud, kas postkasti on midagi pandud jms. Ei asenda kaugeltki mitte professionaalset valvesüsteemi, aga täiendab seda, olles samas unikaalne ja omanäoline.

Spetsifikatsioon:
  • 3 optiliselt isoleeritud digisisendit (logitakse avatud-suletud, kaasneb helisignaal)
  • 2 tavalist digisisendit (logitakse avatud-suletud, kaasneb helisignaal)
  • 3 erinevat uksekella sisendit (logitakse), igaühele sõltumatu monofooniline meloodia või MP3
    • üks uksekella sisenditest on optiliselt  isoleeritud
  • 2 temperatuuriandurit
  • Logimälu sügavus 1023 sündmust
Baseerub PIC18F2520-l, võrgupingest sõltumatu reaal-aja kellaga (DS1307).Tarkvaraliselt paras pähkel - monofoonilise muusika esitamine nõuab taimeritega parajat mängimist, displei vajab kontrollimist ja juhtnupud jälgimist (üle I2C liidese). Monofoonilise muusikaga oli pigem lihtne, lahenduse printsiibid olid omal varnast võtta juba kunagiste tipi õpingute aegadelt 80-te algul kui sai ehitatud esimesed monofoonilise muusikaga uksekellad.
MP3-mängijana on kasutatud laiatarbe mälupulk-mängijat (baseerub SIGMATEL Inc. kiibil STMP35XX), mida saab juhtida tema juhtnuppudele vajutuste emuleerimise kaudu - nõudes optilist lahutamist ülejäänud ahelatest ja omaette taktiga komponendi taimingu ning vastavate signaalijärjestustega mängimist. MP3 väljundi digimürast päästmiseks tuli tekitada võimendile (TDA2822M kiibil) galvaaniliselt lahutatud toide.
Korpuseks sai vana 9600 bps modemi oma :-)
Ekraanil on näha jooksev aeg, sise- ja garaaži temperatuur (talvel võib minna alla nulli ja kartulitega-hoidistega võib juhtuda siis üht-teist ebameeldivat).
Teisel real on viimase sündmuse aeg ning kolmandal selle kirjeldus.

Alumine pisike ekraan kuulub MP3 mängurile.
Nuppe on minimaalselt - logi vaatamine, kellamuusika valik ja kellaaja sättimine. Tjah, seade ei salvesta sündmusi kui elektrit pole, aga elektri tagasitulek ise on üks sündmus, mis pannakse kirja.




Sunday, January 15, 2012

WHS 2011 disappointment

Why?
User of the first Windows Home Server (aka v1) launched in 2007. I ordered installation disks from www.newegg.com and set up computer taking into account minimal power consumption - finally HS is an additional device consuming energy always some other computer at home is in use.
Processor Celeron 440 2.0GHz, GigaByte board and 1GB memory (it was required 512MB), two (later added one more) Western Digital Green disks. The WHS v1 was installed fluently and connecting computers and uses was simple and transparent. Very useful is Lights-out add-in which is keeping an eye on computers and when last one will be shut down then 10 minutes after that server will hibernate, minimizing power consumption. I appreciated duplication of selected resources. Although it is only software controlled functionality at least on some of cases of one disk failure it does not mean loosing of important files duplicated on some another drive.
Another useful add-in appeared to be Twonky server, standing for steaming media - photos, music, videos for devices following DLNA® standard e.g. to Sony Blue-ray player BDPS370 connected to widescreen TV - right place to watch everything. Twonky is not free product but it justified many spent being relatively stable and doing what promised.
The third useful add-in enabled to make backups of home computer itself and collected backups. I didn't long worry about it long making sometimes only external back up of media resources which were duplicated anyway. But agree, the right strategy is to back up externally everything. Not too often but still.
Although WHS functionality and service was well stable then Twonky sometimes failed just when you had dear guests and home video or photos of recent trip was planned to be demonstrated.
Of cause when WHS 2011 was announced with all promised bells and whistles together with DLNA functionality it was difficult not to start thinking of upgrade. Amazon.de offered OEM version of WHS relatively cheap (59€) but delivery was expensive one - 20€. So on one nice day it arrived - box inside of what was DVD box.
There are somewhat higher requirements to computer - contrary to WHS v1 WHS 2011 is 64-bit software so processor has to support this, in addition the minimum memory required is 2 GB. In my case only memory was necessary to add, processor met requirements. More inconvenient was the fact that old backups are incompatible thus special attention was needed for transfer to new system to keep own precious files duplicated somewhere else just for case. I freed up one 500GB disk for new WHS (luckily had less than half of server storage in use and it was well possible) and kept old system on two disks just for case there is need to pick up something from old installation. Wise decision!

WHS 2011 installation went painlessly; about 50 updates were installed too. After setting up users, connecting computes and installing lights-out add-in (which melted much better with new WHS) I was ready to enjoy as effortless media streaming experience. Wrong. Although I succeeded to get server visible in Sony player none of content was not displayed either played. And so it remained, obviously certain mismatch in DLNA standard or some other incompatibility. Windows sticking to own WMP formats is known but home videos are all divx. Web didn't help much. One reference described similar situation as I had but solution was missing. Probably Xbox or some other MS compatible devices will work but I had no will at all to start replacing other home equipment.
Moreover the disk management was not as smart as in case of WHS v1. No duplication! Meaning that the importance of regular external back-up is very high - in case of single disk failure all on that will be lost. So despite better user interface more IT-specific management and attention is required compared with old v1 WHS.

So I returned to old WHS. Returned wisely preserved disks, launched it again, replaced client software in home computers and felt as at own home again. Even Twonky server was functioning. :)

Update. Just learned that although Twonky media server add-in for WHS is discontinued, there is newer and free DLNA server compatible with WHS 2011 - Serviio. So...



Monday, May 16, 2011

Kõu kaugvalve

Kaugvalve pole mingi raketiteadus, aga rahuldava lahenduse leidmine võttis ikka aastaid aega.Probleemiks ka see, et sideühendused jälgimiskohas napid ja tülikalt liiga kallid. Ka kippus süsteemi kokkusaamine poolfabrikaatidest nõudma rohkem häälestust ja programmeerimist kui oleks olnud aega. Selleks, et kord nädalas või kuus valdustele pilku peale heita, tundus olevat mõttetu telekomioperaatoritele püsivalt kuutasusid maksta.
Aga siin see komplekt on:
  • Ontech GSM 9030, hind €124
  • Ülepingekaitse €10
  • Tele2 Smart kõnekaart (laaditakse ainult kasutuse järgi, SMS hind 0,04€)
  • Veebikaamera INSTAR IN-3010 Amazon.de-st €99  (+€20 saatekulusid)
  • KÕU ruuter ZTE AR550 €78 (+ kuutasu €19,04, lepingu võib aastas 9-ks kuuks peatada)
Ontech GSM 9030 on kompaktne GSM juhitav-jälgitav valvejaam, mille juurde saab ühendada täiendavaid valveseadmeid (nt.infrapuna-liikumisandur, suitsuandur, termoandur jms.), lisaks võib seade lülitada sisse täiendavaid võrguseadmeid lokaalselt või üle lokaalse raadioside kaugemalgi. Nii et tubli seade küll.
Vältimaks osaliseltki pahandusi kõikuva liinipingega ja äikesehäiretega on Ontech ühendatud võrku läbi ülepingekaitse.
KÕU-ga on selline lugu, et tavapaketis on sisenevad pordid lukus. DynDNS.org vahendusel saab küll seadme IP iga kell teada, aga ruuteri suunas lubatakse sisenevatest portidest ainult nr 113-t. 113 on aga Unix ajastust pärit protokolli jaoks, mida veebilehitsejad kuidagi ei taha näppida.
 Firefox jaoks on siiski toimiv häkk olemas, vt. siin (parameetriks tuleb panna 113), aga paraku ei lubata Firefox korral kogu INSTAR kaamera funktsionaalsust. Microsoft Explorer lubab enamat läbi ActiveX komponendi, aga selleks tuleb Exploreri turvaseadistustes teha järeleandmisi (Tools -> Internet Options -> Security -> Custom level -> Download unsigned ActiveX controls -> Promt). Siiski, see võte ei olnud piisav igal arvutil, kohati oli ja kohati polnud port 113 probleemiks.

Süsteemi kasutusskeem on siis selline: 
  1. SMS Ontech-le, et lülita toide sisse, millega pingestatakse Kõu ruuter ja veebikaamera.
  2. Oodata umbes 3 minutit kuni seadmed initsialiseeruvad ja ühenduvad
  3. Avada veebilehitsejas vastav DynDNS serveris registreeritud valvatava objekti veebileht (nt. kui objekti nimeks on antud valvepunkt1, siis aadressiks on http://valvepunkt1.dyndns.org:113)
  4. Logida sisse kaamera administraatorina, et kaamerat juhtida - initsialiseerimise järel on kaamera suunatud mingisse jaburasse punkti) ja pilt käes! ActiveX all ka muud viled nagu kahesuunaline audio, sessiooni salvestamine jms.
  5. Lülitada toide välja saates vastava SMS-i Ontech-le. Sellest sammust saab loobuda kui esimese SMS-ga anda ühtlasi ette aeg kui mitu tundi toide peab peal olema. 
Peab arvestama, et seadmed on üsna energiasäästlikud. Ontech 0,5W ooterežiimis, max 4W, ruuter ja kaamera kokku ~20W. Ööpäevane tarbimine ~0.5kWh, mis maksab umbes 5 eurosenti. Üks SMS maksab sõltuvalt operaatorist 12..16 eurosenti (Tele2 võrgus ka juba tasuta). Üldiselt pole mõtet iga päev plõksida...
     Aga maailmatunnetus avardus jälle ja CO2 jalajälg palju suuremaks ei läinudki :-)

    Friday, September 3, 2010

    HP d530 power supply

    Masendav august.
    Sugulastel ja kodus lendas kokku 3 toiteplokki ja üks kõvaketas. Muidugi tassiti kõik mulle näha ja süüdi tunda, sest kes siis veel arvutite eest vastutab :-)
    Kõik masinad olid IT Kolledži vanad HP-d (d530S ja D5S SFF). DS5-ga jamama ei hakanudki, liiga vana ja selle toiteploki skemaatiline lahendus on remondiks tülikam ja kui aus olla, siis kunagi varem proovisin juba üht parandada, mis lõppes mitmesaja krooni ulatuses uute komponentide tapmisega.

    Üsna pea sai selgeks, et probleem on üle maailma tuntud, d530S ja teiste HP arvutite toiteplokkide probleemiks on komponentide fikseerimiseks kinnitatud liim, mis vanandes ja kuumuse mõjul teiseneb pisut elektrit juhtivaks. Natuke augustiniiskust juurde ja ühel ilusal hetkel ületatakse võrgupinge nivool töötavate komponentide taluvuspiir ning edasine on nagu laviin, selle käigus kõrbeb ligi 10 komponenti. Kõige naljakam, et sulavkaitse toetab kogu seda hävingut kuni täieliku finaalini, astudes tulest ja suitsust välja nagu tõeline terminaator ilma ühegi kriimuta.

    OK, maailmakogemus ja juhised on siin: http://webdevsys.com/d530psuRepairNotes.htm
    Peaaegu kõik komponendid on Oomipoest saadavad. P-N-P transistorid said isegi kaks korda ägedamad kui originaalid (tegijaks osutus ZTX751). Siiski, kõrbenud väljaviiguga 250pF 1kV kondensaatori asenduse leidsin ainult Tevalo/Elfaelektroonia valikust.
    Toiteplokid on päris komplitseeritud disainiga, põhiplaadil on veel kaks tütarkaarti, millest üks on autonoomne 5V käivituspinge muundi. Ühel toiteplokil (olgu see A) kõrbes ainult põhiplaadi võrgupinge osa, aga kannatada said ka voolurajad. Teisel (olgu see B) põles maha ka 5V tütarplaat. Aga B põhiplaat nägi parem välja.
    Seepärast saigi alustatud B-st, võttes A-st korras tütarplaadi.
    Paraku ei võtnud B pärast kõikide põlenud ja sulanud komponentide väljavahetamist täit vedu. Tütarplaat toimis, aga sisselülitamisel käis plokist läbi ainult üks impulss, ventilaator nõksatas, aga ilmselt oli miskit tagasisideahelates ikka sassis.
    Aga A-ga tuli õnneks bingo, kõrbenud emaplaati kannatas puhastada ja radasid jätkata, epoksiidliimiga tugevdasin komponentide püsivust kõrbenud läbiviikudes. Tütarplaat oli ju A-l niigi korras.

    Muidugi ei tasu aeg ja vaev end ära. Diagnostikaks on vaja normaalset multimeetrit, komponente tuleb kataloogidest otsida ja neil poes järel käia (kui täpne olla, siis Fairchild FQA9N90C MOSFET transistorid tellisin eBayst. Tulid Hong Kongist nädalaga kohale, 10$ väärtusega ümbrik tolli ei huvitanud).Tahmanud ja kõrbenud kõrgpinge osa remont nõuab mitmeid tunde aega ja kõrgendatud tähelepanu.

    Aga reinkarnatsiooni moment on imeline :-)

    PS. Lisan mõnede läbipõlenud komponentide nominaalid, mida veebijuhendis ei leidunud: C10 - 250pF 1kV; R12 - 1 oom 1W, R18 - 6,8 oomi.

    PS. Hiljem (16. septembril) sain käima ka põhiplaadi B. Selgus, et tagasisideahela optron võib olla ka teistmoodi läbi põlenud kui ainult lühisega.  Kokkuotsitud kuuest plokist on nüüdseks reinkarnatsiooni läbinud 4. Ühel on läbi tütarplaadi trafo mähis (katkestuses), sellist elementi Oomipoe ja Elfaelektroonika kataloogides ei leidu.Aga viienda reinkarnatsioon on veel võimalik. :-)
    SUMMARY
    Kokku sai 7-st plokist korda kuus, remontimata jäi ainult üks juba nimetatud põlenud mähisega trafo pärast, mille tarneks lihtsat viisi Googlest ei paistnud. Aga kolmel kõige kauem allumatust näidanud plokil oli viga tütarplaadi sekundaarahelates, lühistunud oli ilmselt ülepinge kaitse funktsiooni täitnud 6V zener diood D61.

    Thursday, April 29, 2010

    Spartan3 ja PicoBlaze programmimälu värskendamine üle JTAG liidese

    Kogu vajatav atribuutika selleks on kaasas PicoBlaze protsessori assembleri KCPSM3 failidega XILINX PicoBlaze lehelt.
    Tähelepanu tuleb pöörata lühijuhendile JTAG_loader_quick_guide.pdf, mis annab üsna ammendava ja pildirohke seletuse.
    1. Asendada mälu alusfailid ROM_form.vhd ja ROM_form.v, mis vaikimisi on koopiad failidest Normal_ROM_form.vhd ja Normal_ROM_form.v.
      Kopeeri nende asemele failid JTAG_Loader_ROM_form.vhd ja JTAG_Loader_ROM_form.v.
    2. Põhimoodulis, mis paigaldab KCPSM3 ja selle nüüdseks kahepordilise programmimälu, tuleb tagada JTAG-laaditava ROM-mooduli poolt genereeritava RESET-signaali jõudmine protsessorisse. Kui on soov protsessori RESET-i sõltumatult väljastpoolt juhtida, siis tuleb lihtsalt vastavad signaalid liita, nt.:
      reset <= CLEAR or proc_reset; -- siin CLEAR on minu kasutatud välise RESET-signaali nimi
    3. See pole veel kõik - tõenäoliselt tabab teid sünteesil teade, et prog_rom.vhdl failis on puudu komponent BSCAN_VIRTEX2. Tõepoolest, sellist pole Xilinx Unisim teegis olemaski, küll on seal aga BSCAN_SPARTAN3 - ja mis võiks olla parem! S.t. prog_rom.vhdl failis tuleb teha vastav asendus, ju on universaalsena mõeldud KCPSM3 paketis vaiikimisi üht teist Xilinx kiibisarja silmas peetud.
      Veelgi enam - kuna prog_rom.vhdl fail on genereeritud ROM_form.vhd aluspõhjast, siis tuleb see asi korda ajada hoopis aluspõhjas ROM_form.vhd, et uuel programmi kompileerimisel sama tüli ei tekiks!
    4. Kompileerida ja laadida Spartan3 arendusplaadile mistahes kanali/rakenduse kaudu.
    Kui nüüd on disainis vaja muuta ainult PicoBlaze programmi, siis sedapuhku saab programmi maha laadida ilma pikka sünteesiprotsessi läbimata.
    1. Programm kompileeritakse nagu tavaliselt, kuid sorry, sobib ainult KCPSM3 kompilaator, mitte pBlazIDE. Viimane ei genereeri väljundiks vajalikku .hex formaadis failil.
    2. Järgneb rida hex faili teisendusi, milleks on KCPSM failide hulgas olemas sobiv käsufail jtag_loader.bat, mis esmalt kontrollib vastava Boundary_scan konfiguratsioonifaili (hex2svf.cnf) olemasolu töökaustas ja puudumisel loob selle dialoogis kasutajaga. Sisendiks tuleb anda Xilinx kiibi tüüp (Spartan3 on 4) ja kirjeldada ahelat, s.t. Spartan3-le eelnevaid ja järgnevaid kiipe ahelas. No Nexys2 arendusplaadil on üks järgnev mäluelement xcf04s, mille kood dialoogis on 8, tavaahel on näha joonisel:

    3. Pärast teisendusi laadib jtag_loader.bat plokk-ROM-i sisu (.xsvf faili) ka paralleelpordis oleva JTAG liidese kaudu Xilinx kiipi.
      USB-liidese kaudu laadimiseks on lihtsaim kasutada Xilinx IMPACT rakendust (alternatiiviks oleks modifitseeritud .bat faili, mis sama IMPACT-i käsurežiimis rakendab). IMPACT graafilises režiimis kasutamiseks tuleb kustutada jtag_loader.bat-failis viimane käsk playxsvf %1.xsvf.
      IMPACT käivitatakse puhta tööväljaga. Kui eelenvast tööst on Boundary-scan ahel tööväljal, siis tuleb see kustutada (klikkides hiire vasaku klahviga elementidel ja ükshaaval kustutades Del-klahviga).
      Seejärel tühjal tööväljal parem hiire klikk ja valida hüpikmenüüst Add Xilinx Device.
      Valida töökaustast vastav .xsvf fail (minul prog_rom.xsvf), mille järele ilmub tööväljale ahel XSVF elemendiga.


      Valida element parema hiire klahviga ja hüpikmenüüst valida Execute XSVF/SVF.
      Prototüüpplaadil võib olla jälgitav (kui programm jooksis ja midagi dünaamiliselt esitas) programmi seiskumine ja toimub PicoBlaze lähestamine. Voila!
    Originaaljuhis on SIIN. Samal lehel allpool on soovitusi jtag_loader.bat faili modifitseerimiseks IMPACT kasutamiseks käsurežiimis.
    Kui see protseduur on korra juba läbi tehtud, siis järgmistel PicoBlaze koodi uuenduste kordadel piisab lahtihoitud käsu- ja IMPACT akendes väheste korralduste kordamisest, see läheb tõesti nobedalt.

    Sunday, April 4, 2010

    DMX 4-kanaliline kontroller PAR56-le

    Riist- või tarkvara disaini näidisprojekt
    Antud artiklis on juttu nö elektroonika hobiprojektist, mis siiski sai autorilt enam tähelepanu, kuna lahendust sai otsitud nii riist- kui tarkvaralisena, seda küll ilma koosdisaini metoodikat kasutamata. Sellest siis ka nihe pealkirjas – mitte riist- ja tarkvara koosdisain vaid riist- või tarkvara disain. Tulemus võib siiski väärida järeletegemist kuna valminud kontroller on küllalt universaalne seade.
    Projekti algatas lihtne juhtum – tekkis vajadus lisada 3-värvilisele LED-prožektorile PAR56, mis on küll varustatud sisemise kontrolleriga ja mõningate DIP-lülitilt valitavate valmis värvusskeemide ning värvivahetusprogrammidega, täielikku häälestusulatust lubav lihtne juhtseade. Valgustusseadmete juhtimiseks on olemas ka valmispulte, kuid need olid ühe pro˛ektori kodukasutaja jaoks „liiga head“.
    Nagu lähemal uurimisel selgus, on DMX (täpsemini DMX512 [1]) füüsikalisel tasandil sama, mis RS485 [2], s.t. diferentssignaali kasutav jadakoodi andmevahetusstandard. DMX protokoll on lihtne, lausa robustne – kõige lihtsamal juhul ühesuunaline andmepakett, milles iga bait tähendab infot ühe DMX kanali kohta. Konkreetne DMX-seade võib kasutada oma funktsioonide juhtimiseks mingit kanalite vahemikku paketist. Ühte paketti mahub kuni 512 kanalit, selle ulatuse ärakasutamine sõltub juba otstarbest, pakett võib olla palju lühem, olles määratud vajatavate kanalite arvuga. Pakettide vahel on paus (BREAK) loogilisel nivool „0“. Iga pakett algab minimaalselt 12µs märgisega MARK (nivool „1“), millele järgneb startkood (DMX seadmetel on üldjuhul koodiks 0x00) ja seejärel juba kanalid alates number 1-st. Jadakood saadetakse välja andmesõnadena (slot) kujul – startbitt (loogiline „0“), 8 andmebitti alates nooremast ja kaks stoppbitti (loogiline „1“). DMX standard defineerib veel pakettide vahelise pausi minimaalse kestvuse (92 µs ) ja ülekandekiiruse, milleks on üsna aukartustäratav 250kboodi – ühe bit kohta 4 µs aega. Maksimaalse paketipikkuse ja minimaalse pausi korral jõutakse sekundis saata 44 paketti, samas kui seadmed peaksid säilitama tööre˛iimi ka siis kui tuleb ainult üks pakett sekundis. Eri kanalid võivad olla mõeldud eri seadmetele kõik ühe ja sama RS485 signaaliahela (daicy-chain topoloogia) küljes. Iga seade loeb ühisest paketist välja just temale seatud kanalite andmed.


    PAR56 prožektor on häälestatud reageerima paketi nelja esimese kanali andmetele, mis on siis vastavalt:
    1. Punased LED-d         (koodid 0-255),
    2. Rohelised LED-d     (koodid 0-255)
    3. Sinised LED-d         (koodid 0-255)
    4. Heledus (koodid 0-189), vilkumine (koodid 190-250) ja mittedefineeritud (koodid 251-255).

    Niisiis, lähtudes otse standardist, tuleks saata sagedusel 250kHz vähemalt kord sekundis välja 58-bitiline pakett-vektor. Juhul kui PAR56 kõigi kanalite väärtuseks on 127, oleks pakett järgmine (algus paremal):

    "1101111111011011111110110111111101101111111011000000000111"  ====>

    Kolm „111“ alguses annavad täpselt vajaliku 12µs MARK-sündmuse.
    Kui nüüd juhtseadme projekteerimiseks läheb, siis selgub, et kõige lihtsama mikrokontrolleriga seda ära ei teegi, hädavajalik on riistvaralise jadaside mooduli olemasolu  (UART). Ilma selleta oleks paketi saatmine protsessorile üle jõu käiv - tavaline mikrokontrolleri töökiirus on suurusjärgus 1 µs käsutsükli kohta, mille korral jõuaks protsessor teha ühe biti väljasaatmise jooksul vaid 4 käsku – sellest ei piisa, et andmeid ette valmistada. UART moodul võtaks bitthaaval andmesõna formeerimise vaeva enda peale ja baithaaval andmeid ette sööta jõuab siis ka palju aeglasem protsessor (baidi saateaeg koos START ja kahe STOP-bitiga on 11 x 4 = 44 µs). Signaali pausiaeg on DMX korral piisavalt pikaks venitatav (kuni 1 sekund), et selle jooksul mistahes protsessor mistahes kasutajaliidese töötlemisega toime tulla.
    Kuidas oleks aga riistvaraline lahend väliprogrammeeritaval kiibil? Tegelikult väga elementaarne – riistvaras võib kuitahes pikki bitivektoreid moodustada, vajalikud andmebaidid tuleb vaid vektorisse õigesse positsiooni omistada ja 250kHz taktiga väljundisse suunata. Kasutajaliidest võib riistvara töödelda paralleelselt jadakoodi väljastamisega, selleks jätkub ressursse ka kõige tagasihoidlikumas FPGA-kiibis.


    -- Nexus 2 on takteeritud 50MHz signaaliga, millest teeme esmalt 25MHz signaali
    kell: process(clock)
      begin
        if rising_edge(clock) then
          clk <= not clk;
        end if;
      end process kell;


    -- DMX jaoks 250KHz signaali tegemine 25MHz taktisignaalist   
    txkell: process(clk)   
      begin
        if rising_edge(clk) then
          if txclk_cnt /= 49 then
            txclk_cnt <= txclk_cnt + 1;
          else
            txclk_cnt <=(others =>'0');
            txclk <= not txclk;
          end if;
        end if;
      end process txkell;


    -- Main procedure
    counting : process(txclk,reset)
      begin
        if reset = '1' then
          DE  <= '1'; -- lubav signal RS485 kiibi väljundile
          txcnt <= (others =>'0'); -- tsükliloendur (pakett + paus)
          dmxvector <= "1101111111011011111110110111111101101111111011000000000111";
        else
          if rising_edge(txclk) then
            txcnt <= txcnt + 1;
            if txcnt <= 1279 then –-paketitsükli kestvus 1280 x 4 us = 5.12ms
              dmxvector <= '0' & dmxvector (57 downto 1);    -- nihe paremale
            else
              txcnt <=(others =>;'0');<           dmxvector <= "11" & dmxch4 & "011" & dmxblue & "011" & dmxgreen & "011" & dmxred & "011000000000111"; -- DMX pakett-vektori moodustamine
            end if;
          end if;
        end if;   
      end process counting;


    TxDI <= dmxvector(0); -- vektori kõige parempoolne bitt väljundisse DMX-signaaliks

    Tervikkirjeldusse kuulub veel  komponent, mis tagab signaalide dmxred,dmxgreen, dmxblue ja dmxch4 juhtimise kasutaja poolt. Võib öelda, et kood töötas esimesest katsest, lubades pro˛ektorit vabalt juhtida ning katsetamise käigus proovida läbi erinevaid kasutajaliideseid.

    Eksperiment: Tarkvaraline lahendus
    Tarkvara kandjaks protsessor Microchip PIC16F88, arendustarkvaraks  Microchip IDE (vabavara) ja CCS C-kompilaator PCM (kommertsprodukt [4]).
    Mikrokontroller PIC16F88 on lihtne 8-bitilise arhitektuuriga 18-väljaviiguline protsessor, mis on paljude lisade hulgas varustatud asünkroonse jadaliidesega (USART). Dokumentatsiooni järgi suudab USART protsessor 4MHz sisemise takti korral genereerida vabalt 250kboodist jadasignaali.
    Koodi kirjutamisel tuli tõdeda mitmeid üllatusi, mis nõudsid paljusid katseid enne kui tulemus PAR56 pro˛ektorit allutama hakkas:
    1. Selgus, et PIC16F88 PortA on vaikimisi analoogsisenditena häälestatud, s.t. digitaalsisenditena kasutamiseks tuli analoogmoodul välja lülitada. Muidugi oli see ka dokumentatsioonis kirjas.
    2. PIC16F88 USART ei ole otseselt häälestatav kahe stop-bitiga jadaprotokollile. Siiski, kuna andmeüksuse suurus võib olla ka 9 bitti, siis oli võimalik sättida 9-s bitt täitma esimese stopp-biti rolli (konstantselt „1“). Seda tuli siis teha väljaspool CCS PCM kompilaatori standardfunktsioone (assembleris).
    3. PIC16F88 USART ei toetanud otseselt DMX protokolli. Tõsi küll, USART oskab genereerida väidetavalt RS485-toetuseks mõeldud ENABLE-signaali, mis on aktiivne andmesõna saatmise ajal, kuid ei oleks taganud vajalikku MARK signaali kestvust ja pealegi muutub ENABLE korraks passiivseks ka andmesõnade vahel, mis rikuks DMX-paketi kuju.
    4. USART väljund jääb andmesõnade saatmise vaheajal kõrgeks „1“ . Kuna DMX protokoll nõuab BREAK tingimuse moodustamist, mille ajal signaal on „0“, siis lõppkokkuvõttes tuli BREAK ja MARK tingimused samuti genereerida väljaspool kompilaatori standardfunktsioone.
    Nimetatud erisused tegid iseenesest triviaalse ülesande lahendamise ajakulukas ja väljundsignaali tegeliku kuju tuvastamiseks ja häälestamiseks tuli kasutada digitaalostsillograafi.
    Lõppjäreldused
    Riistvara (Nexys 2 ja Xilinx FPGA)
    • Geomeetria: Halb, defineeritud arendusplaadi suurusega ~180cm2
    • Katseplatvorm: Hea, triviaalne kodeerimine lähtudes otseselt standardist
    • Arendusaeg: Tunde
    • Kompileerimise/sünteesi  ja mahalaadimise aeg: Minutites
    • Hind: Nexys arendusplaat -$99, RS485 ajur -$3
    Tarkvara (PIC16F88)
    • Geomeetria: Hea, plaadi suurus määratud  protsessori ja ajurikiibi poolt ~18cm2
    • Katseplatvorm: Komplitseeritud tingituna USART otsesest mittesobivusest konkreetse (DMX) protokolliga
    • Arendusaeg: Päevi
    • Kompileerimise/sünteesi  ja mahalaadimise aeg: Sekundites
    • Protsessor - $5, RS485 ajur - $3, CCS PCM C-kompilaator - $150

    Tuleb tunnistada, et mõlematel variantidel on plusse ja miinuseid.  Kiireks prototüüpimiseks on riistvaraline lahendus FPGA-l vägagi sobiv ja eriti ladusalt läheb standardikohase protokolli genereerimine. Samas iga arendusplaadi väline lisafunktsionaalsus nõuab väliste riistvaraliste moodulite lisamist (näiteks mikrokontrolleris on mugav sisemine EEPROM, mida võib kasutada oleku säilitamiseks seadme väljalülitatud olekus; Nexys 2 arendusplaadil tulnuks sellise funktsionaalsuse saamiseks lisada mälukaardi moodul).
    Tarkvaraline lahendus sobib lõppteostuseks paremini, kuid nõuab protsessori ning kompilaatori dokumentatsiooni põhjalikku uurimist, et kõigi võimaluste ja tõkete rägastikus leida sobiv tee protokolli ja muu funktsionaalsuse teostuseks.
    Lõpptulemus, nelja kanaliga ja nelja mäluga DMX kontroller koos PAR56 prožektoriga on näha järgmisel fotol:

    Seadme kasutajaliidesel on neli nuppu värvide valikuks (ühtlasi ka mälupesade valikuks), nupud valitud värvi väärtuse kerimiseks ning värvuskombinatsiooni salvestus- ja taasesitusnupud.
    Projektifailid on veebis [5]: PIC16F88-ga DMX-kontrolleri skeem ja trükkplaat CadSoft Eagle failidena, kontrolleri tarkvara CCS PSM C-ning kompileeritud HEX-koodis ning Nexys 2 arendusplaadile mõeldud kontrolleri tipptaseme komponendi kirjeldus VHDL keeles.

    Viiteid
    1. DMX512, http://en.wikipedia.org/wiki/DMX512
    2. Jan Axelson, Designing RS-485 Circuits, http://lms.uni-mb.si/~meolic/students/mpk/designingRS485.pdf
    3. Nexys 2 FPGA board, http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,789&Prod=NEXYS2
    4. CCS Compilers, http://www.ccsinfo.com/content.php?page=compilers
    5. Kontrolleri projektifailid (tarkvara uusim versioon dets. 2011!!!):  http://mini.li.ttu.ee/~nalle/tmp/DMX_PAR56contoller

    Thursday, February 11, 2010

    Jõulutuled



    Tuli töökaaslasega jutuks, et vaja jõuludeks mõned tuled vilkuma saada ja siin siis mu jõuluaegne projekt  :-)
    Alus - seitsme hõõglambikesega nn juudi kuusk. Ajast ja arust, igav-igav ja raiskab energiat, mis hirmus.
    Lahendus - mikrokontrolleriga kontrollitavad kolmetoonilised LED-d, mis olid ligi aasta sahtlipõhjas sobivat hetke oodanud, tellitud SparkFun-st (vt. toote link)
    Protsessor PIC12F675 - üks lihtsamaid, 8-viiguga kiip, ainult 5 programmeeritavat väljundit! Aga seda on enam kui küll kui LED-e kontrollida üle jada-rööpmuundurite 74HC595, mis on 8-bitised väljundlukkregistriga seadmed, lubades lahedalt LED-e toita (20mA väljundi kohta).
    Värviheleduses 32 astet, sujuv värvide üleminek tempoga ~10 sek täisheleduseni, veenvalt maagiline, kogutsükkel mitmetes minutites ja sõltub ainult tarkvaralisest mustrist e "vaiba" pikkusest. Protsessori programmimälust kasutusel 30%, muutmälust ligi pool, töötlusjõudlusest ligi 100% (antud parameetritega, antud oludes).
    Näide pildilt (päevane ja öine uduse silmaga).
    Skeem ja kood, olge lahked - kingituseks, vt. siit :-) BTW - uuendatud-parandatud 2012 jaanuaris.

    Lisaks (dets. 2014) - jõuluajaga seotud kolmnurgakuju ei tarvitsesugugi ainuke olla. Jõuluaeg on üürike, aga silm tahab värve näha aastaringselt. Seepärast valmis uus disain, mis sisu osas nõudis vaid nn temporaalse värvivaiba muutmist, asendamaks sümmeetriamängu eri värvide ringliikumisega. See, et disain nõudis vajaliku elengantsi saamiseks 3D-freesi ja mitmete materjalide kasutamist, on sellest blogiteemast väljaminev lugu :-)

    Followers