Engineering Sample… WTF?

Norėjosi į vieną mikroschemą įpūsti kodą ir staiga pasipylė klaidos:

Info: Device 1 contains JTAG ID code 0x020A30DD
Info: Device 1 silicon ID is ALTERA04-0
Error: Operation failed
Info: Ended Programmer operation at Sat Feb 14 21:28:57 2009

Pasinaršius internete radau užuominą apie problemą. Žiū fotkę:
Altera engineering sample

Raidelės “ES” reiškia “Engineering Sample” ir šios mikroschemos ID skiriasi nuo paprastos, serijinės. Todėl paprasti fuse bit .pof failai netinka. Tačiau Quartuso mikroschemų saraše tokios nėra. Yra tik standartinė. Jokių problemų- softe ta mikroschema yra, tik nesimato. Pradedam projektą “retail” versijai. Poto atsidarom projekto direktoriją ir susirandam faila “projekto-pavadinimas.qsf”. Oten viduje, kažkur yra eilutė:
set_global_assignment -name DEVICE EPM1270F256C5
Šią eilutę pataisom į:
set_global_assignment -name DEVICE EPM1270F256C5ES
ir perkompiliuojam projektą. Ir jokių problemų. Aišku, gali kilti problemos jei nėra source code, o turim tik programinimo failus. Bet turiu didelį itarimą, kad ten skiriasi tik vienas baitas.

Small peek: kas dabar guli ant stalo…

Šiuo metu ant mano stalo guli štai toks kurinys:

3 PHASE DRIVE

Čia ant mažos PCB prilituoti 6 maži mosfetai, GAL16V8 mikroschema. Vertikaliai kabo viena iš ATMEGA16 testinių ploksčių. Juodulys- 2.5″ kieto disko likučiai.
Šiuo metu skaitom Atmel firmos straipsnius apie 3 fazių variklių valdymą su AVR mikrokontroleriais. Kol kas nelabai gaunasi, tiksliau ir neturi gautis, nes nesumontavau nei vieno atbulinio ryšio elemento: nei holo daviklio, nei trifazės įtampos nuskaitymo.
GAL mikroschema užprogramuota PWM valdymui per visas tris fazes ir dar kaip papildoma funkcija- apsauga nuo vienos fazės abiejų raktų įjungimo vienu metu. Tačiau ši mikroschema pati įnešė nenustatytą bugą- įjungimo metu, kažkodėl būtent ir įsijungia du tos pačios fazės raktai- matyt kažkoks pereinamasis procesas daro įtaką. Gerai, kad visas prietaisas maitinamas iš USB lizdo ir per kelis apsauginius diodus- MOSFETai įkaista tiek, kad pradeda rūkti dūmai ir išsilydo lydmetalis po raktu. Tačiau raktai neperdega- nes lieka vos pora voltų ant rakto. 🙂
Manau, kad iki sekmadienio perskaitysiu dokumentaciją ir paleisiu trifazį variklį pilnu greičiu.

ATMEGA USB 22: RTC laikrodis

Kažkaip neparašau apie laikrodžių darymą. Kiekvienas bent kiek įvaldęs kontroleriuką kada nors pradeda gaminti laikrodį. Aš irgi 🙂 Labai labai seniai dariau RTC laikrodį su PIC procesorium. Rašiau aš jį asembleryje… ir labai nervinaus, nes buvo sunku ir tas PICas turėjo savo bjauriu niuansu. Šiaip internete pilna laikrodžių- visokiems procesoriams, visokiems ekranams. Pasibandžiau keletą, kai kurie patiko, kai kurie ne. Pagaliau vieną dieną pasakiau- va ateis savaitgalis ir pradėsiu rašyti laikrodį nuo nulio.

Pagrindinės užduotis kurias sau pastačiau:

  • RTC nepriklausantis nuo maitinimo. T.y. atjungiam maitinimą, o laikrodis sau toliau veikia.
  • Hardwarinis laikrodis- tikras nesusipratimas smaukytis su procesoriaus kodu, kad skaičiuoti kiekvieną pirstelėjimą ir apsakaičiuoti laiką. Laika turi skaičiuoti RTC čipas- procesorius užsiima grožiu ir User Interface.
  • Valdymas turi būti aiškus, o ne su vienu nupiepusiu mygtuku. Naudojam kaip minimum 6 klavišus (juolab kad naudojant ADC mygtukus, jų skaičiaus kaitaliojimas nėra nei hardwariškai, nei softwariškai sudėtingas). Mygtukai: kairėn, dešinėn, aukštyn, žemyn, OK ir Cancel. Kaip bet kuriame teliko distanciniam.
  • Jokių asemblerių, advanced dalykėlių (ir atminties taupymo). Turi kompiliuotis su gcc.
  • Laikrodžio variklis (core) turi lengvai persikelti ant kito “displėjaus”. T.y. dabar rašau naudojant LCD ekraniuką, bet su minimaliu pokyčiu, softas turi persikelti kad ir į LED matricą ar kokį rotary clock displėjų.

Konstravimui panaudota esama hardwarė. Tik papildomai, prie I2C porto pajungta RTC mikroschema, kurią man maloniai padovanojo Intersil semiconductors: isl1208.
RTC ATMEGA clock

Čia kiek geriau matosi analoginių mygtukų “matrica” kuri pajungta prie MCU tik trim laidais: Vcc, GND ir analog. Tai pat matosi, kad RTC turi savo rezervinį energijos šaltinį: Ličio batareiką CR2025 (čia iš seno kompo išlupau).
RTC ATMEGA clock

Visas kodas dar neparašytas. Jau galima užprogramuoti laiką ir datą, beveik pabaigtas žadintuvas ir konfiguracinis modulis.
Pats žadintuvas irgi nedaromas su ATMEGA16, o jis tupi RTC mikroschemoje- netgi yra speciali kojytė, kuri gali generuoti žadinimo signalą be MCU pagalbos. Arba paprasčiausiai MCU nuskaito būklės registrą ir pradeda čirškėti. Įdomumas tame, kad žadintuvas gali suveikinėti kiekvienos valandos kažkurią minutę, arba galima nustatyti kad žadintuvas skambėtu tik pirmadieniais, trečią valandą penkiolika minučių ir 27 sekundės, arba kad skambėtu kiekvienos valandos 3 minutę tik balandžio 23 dieną ir jei ta diena išpuola sekmadienį… 🙂 Ten daug navarotų turi tas čipukas. O jei dadėti ir MCU navarotus, tai tikras CRON daemonas gaunasi. Nekalbant apie tai, kad softas pats žino, kelintadienis bus bet kurią 21 amžiaus dieną ir taip pat puikiai susipažinęs su keliamųjų metų skaičiavimais.
Softas turi bent trijų lygių menių sistemą. Meniu sistema automatiškai išsijungia, jei vartotojas ilgai neliečia klavietūros. Su minimaliais pokyčiais si sistema modifikuojasi ir galima konstruoti kokį nors termostatą- juk užtenka pajungti prie to pačio I2C kad ir FM75 mikroschemą. Arba galima valdyti kokią nors periferiją… Čia tik reikia įjungti fantaziją. Šiaip viskas sugrūsta į TIMER0 pertraukimą- visą kitą laiką ATMEGA dinderį muša.

Softas neskirtas “C” kalbos puristams ir specialistams. Aš iškarto pasakau, kad niekada nesimokiau “C” programavimo. Todėl daugelis momentų padaryta kvailai. Tik žinau, kad gerasis gcc nerado nei vienos priekabės prie šios programos- kompiliuojasi be jokių warning…

Štai jis: RTC clock core source code. Dalinamas pagal GNU GPL licenzija- imkit ir naudokit.

PHP programavimas: vienas iš mano tiesioginių darbų

Kartais nuo karto klausiat ką aš dirbu ne poilsio metu. Vienas iš mano darbų yra web programavimas. Paskutinis, dar nepabaigtas projektas tai UAB Vitra TVS (CMS) su prekių žinynu. Programos nuo nulio nerašiau- kaip pagrindą panaudojom kažkokį komercinį produktą kurį buvo nupirkusi kompanija. Tačiau ta sistema visiškai morališkai paseno, o “gamintojai” pradėjo šnekėti apie kažkokius kosminius skaičius. Teko pasinagrinėti svetimą kodą ir gana stipriai jį perrašyti. Taip gavosi tokia pusiau CMS, pusiau prekių katalogas.

Vitra.lt

Kadangi jau beveik žinau ką daro kiekvienas kodo pirstelėjimas, dabar labai lengva tobulinti sistemą. Ypač kai įdėjas laikas nuo laiko pageneruoja bendradarbiai. “Dizainą” tikrai pats nedariau, čia paprasčiausias free template. Tačiau CMSas lengvai apvelkamas bet kokiu drabužėliu.

Emailų markutės

10 ct markuteLabai jau užknisa spamas. Tikrai užknisa. Su užsienietišku spamu apie pimpalų prailginimą galima kovoti naudojant gana efektyvias Spamassassin priemones. Tačiau su Rusišku ir Lietuvišku spamu jau kovoti žymiai sunkiau. Ypač užknisa, kad Lietuviškas spamas labai neefektyvus ir jo siuntėjai yra visiški debilai. Tokių debilų kontora yra “Office System” iš Vilniaus. Jie siuntinėja 180…230 kilobaitų paveiksliuką su kažkokiu pasiūlymu… Kadangi jie proto neturi, o ir seimūnai nuo šių metų pradžios iteisino spamą, tenka griežtinti elektroninio pašto taisykles. Todėl, jei man rašot laišką iš kokio užspaminto domeino, ypač iš kokių nors Rusiškų webmailų, padidėja tikimybė, kad jūsų laiškas paprasčiausiai automatiškai bus ištrintas jau serveryje, o jūsų SMTP serveriui bus pranešta, kad tokio emailo nėra ar iš viso, kad pašto serveris neegzistuoja. Prasimušti per šį bloką labai sunku. Tačiau yra labai paprastas sprendimas- naudokite pašto ženklus- markutes. Šiuo metu Savel Paštas išleido į apyvartą nemokamas 10, 25 centų ir vieno lito vertės pašto markutes. 🙂
Kad pasinaudoti šiomis markutėmis, tereikia jas perkopijuoti į laiško temos (Subject) laukelį. Užtenka kad ir temos gale įkopijuoti markutę, ir jūsų elektroninis laiškas gaus spamassassino neigiamų taškų. Rašant iš paprastų emailų dažniausiai užtenka priklijuoti 10ct markutę, tačiau jei rašote iš kokio nors nuvalkioto Rusiško webmailo ir dar rusiškom raidėm, gali prireikti 25ct ar net vieno lito pašto ženklo…
Pašto ženklai riboto galiojimo laiko. Todėl prašom nenaudoti senų pašto ženklų. Šiuo metu galioja šie pašto ženklai:

[Markute10c]
[Markute25c]
[Markute1Lt]

Gal toks metodas paplis 🙂

ATMEGA USB 21: IR RC5 skaitytuvas

Čia nelabai yra to USB. Tiksliau, netgi pjaunasi šitas projektas su USB 🙂 (kompas puliuoja, kai aparaciukas pagauna IR komandą) Todėl paveiksliukyje atsirado plokštės gabalas su USB kištuku.

Tai grynai C kalboje parašytas infraraudonų spindulių distancinio (pagal standartą RC5) dekoderis. Autorius yra Georg-Johann Lay, kokios rušies licenzija jis paskyrė savo softui aš nežinau. Bent jau jo puslapiuose ir source nieko nėra apie (c).

IR RC5 receiver
IR daviklis išluptas iš sugedusio DVD grotuvo. Prilituotas prie geltonos PCB ir jungiasi 3 laidais prie plokštės: Vcc, GND ir PD2/INT0.

Kad pademonstruoti rezultatus, pajungiau prie LCD modulio. Pats naudojimas labai paprastas, pažiūrėkit main.c failo main procedūrą.
Truputis informacijos apie LCD ekraniuko rodymą: Cod- tai mygtuko kodas, Adr- tai prietaiso adresas (0- tai TV), F- flip/flop rodantis kad paspaustas klavišas. Jis keičiasi kiekvieną kartą paspaudus distancinio mygtuką. Tai galima detektuoti kada nuspaustas tas pats mygtukas dar kartą.
Deja visuose namuose tik Samsung teliko distancinis suderinamas su šiuo standartu…
Kadangi ši programa naudoja tą patį INT0 kaip ir USB, tai kol kas šitas žaisliukas nesuderinamas su USB. Jei bus poreikis ir noras, pabandysiu pakeisti source, kad naudotu INT1. Tada distancinio duomenys bus galima pumpuoti į kompiuterį. O jei tai suderinti su ankstesnio posto HID įrenginiu… Gaunasi kaip ir universalus distancinis kompui.

Projekto source code.

P.S. jei naudojamas NEC IR tipo distancinis, verta pasiskaityti: NEC distancinio protokolas.

Balti LEDai ant 230V

Viskas prasidėjo nuo 5W balto diodo jungimo prie 230V tinklo. Tam tikslui buvo panaudotas kinietiškas korpusas ir balastas. Tačiau balastas nesuveikė- neužteko įtampos ant šio 5W diodo, nors balastas buvo skirtas 5W diodams. Tas diodas tai tikriausia du diodai sujungti nuosekliai tame pačiame korpuse, ar dar kažkokia kombinacija. Paprastai įtampos kritimas ant diodo apie 4V, tačiau ant šio diodo įtampa buvo apie 6V.

LED balast 230V

Balasto modulis kompaktiškas, tačiau, kas keista- korektiškai pagamintas. Kiti balastai kur mačiau, tai maksimaliai supaprastintos schemos ant diskretinių tranzų. Čia sumontuotos dvi mikroschemos ir vienas optotranzistorius.

LED balast 230V

Mikroschema tai Fairchild FSDH321, “Green Mode Fairchild Power Swithch (FPS)”- iki 11W galios impulsinis maitblokis. Darbui su 5W LED pats tas. Kita mikroschema tai paslaptis- manau kažkoks ST semiconductors TSM103 analogas. Joje yra du operaciniai stiprintuvai, vienas iš jų pajungtas prie įtampos etalono. Pasinagrinėjus schema ir kitus pavyzdžius, nustačiau, kad max įtampą riboja dviejų rezistorių daliklis (R4 ir R10). Originalioje schemoje R4 buvo 3.3K, pakeitus į 4.7K įtampa pakilo iki ~6V. Srovės reguliavimas nepakito. Tai aišku bėda, nes reikia 5W energijos- pakėlus įtampą, srovė turėjo buti kiek sumažinta. Tačiau diodas išlaikė (kol kas) šį kankinimą. Tačiau po kiek laiko “lemputė” labai įkaito. Todėl išsukau iš liustros ir perdarysiu srovės ribotuvą R13.

LED balast 230V

Supaprastinta LED balasto schema:

LED balast 230V

Išlyginta tinklo įtampa patenka į FPS mikroschemą ir per bootstrap paleidžia generavimą. Pradėjus tekėti srovei per antrinę trafo apviją, pradeda veikti feedback grandinė. Ji susideda ne iš vieno (kaip paprastam maitblokyje), o iš dviejų komparatorių: vienas matuoja įšėjimo įtampą, kitas- srovę.

ATMEGA USB 20: mini LED matrica iš Sure Electronics

Jau gana senokai esu nusipirkęs mažytę LED diodų matrica per eBay iš Sure Electronics firmelės. Tai kiniečių kompanija kuri gamina įvairiausią šlamštą ir pardavinėja on-line. Kada prie progos pažiūrėkit eBay ar jų pačių puslapiuose.

Tai visiškai nereikalingas prietaisas. Nebent pasistatyti ofise ant stalo ir laikas nuo laiko siusti žinutes kolegom. Kadangi tai vienos dienos projektas, tai visas softas gal ir nekulturingas- biški per daug darbo kad daryti kultūringai. Visgi reikėjo parašyti firmware ATMEGAI (panaudotos turimos bibliotekos), parašytas softas USB valdymui windows XP (iš esmės hackintas pavyzdys) ir parašytas nuo nulio MS Visual BASICe grafinis interfeisas paveiksliukų paišymui… Kai viska gražiai sutvarkysiu, visus source kode sudėsiu čia.

Mini Red LED matrica is Sure Electronics su ATMEGA ir USB

Matrica tai 6 moduliai su 8×8 diodų. Praktiškai, ten įlituota dvispalviai diodai, bet aš nesugebėjau įjungti žalios spalvos. Tuo labiau, kad nei Sure Electronics dokumentacijoje, nei Holtek čipo (HT1632) datašeete neparašyta apie daugiau kaip 384 diodų valdymą. Holtek kontroleris valdosi per 3 laidus, turi savyje 16 lygių PWM visai matricai. Dar yra mirksėjimo režimas, jei reikėtų padaryti kokį pranešimą, labiau atreipiantį dėmesį.

Mano hardwarė pati paprasčiausia ATMEGOS16 testinė plokštė. Viskas maitinasi iš USB, ir kai uždegiu visus diodus, šviesa ryškiai “pasėda”.

Čia windozinė GUI programa, kur galima paišyti vaizdelius. Dar pilna visokiausių DEBUG dalykėlių…
Softas Sure Electronics LED USB image

Nedidelis filmukas kuris bando pademonstruoti kaip greitai pasikeičia vaizdelis. Deja, realybėje jis kogero keičiasi greičiau.

Čia bus source kode, kuri susideda iš šių dalių:
\firmware:

  • holtek_ht1632.c
  • holtek_ht1632.h
  • usbconfig.h ir visas kalnas iš usbdrv kategorijos.

\commandline:

  • hidtool.c
  • hidtool.h
  • ir dar keli papildomi

\GUI:

  • LEDGUI.exe
  • LEDGUI visual basic source

\proteus:

  • Proteus schema protokolo analizavimuisi

Download: Source Code, exe, proteus, firmware, cmd line, visual basic

ATMEGA USB 19: temperatūros daviklis

Tai kelių svetimų projektų kompiliacija. Iš esmės, šitas prietaisiukas nuskaito daviklio FM75 (kiek rimtesnis nei LM75, I2C) informaciją. Šis prietaisas nieko nekaupia savo atmintyje (nors galėtų, paprasčiausiai softas neparašytas), visa informacija nuskaitoma per USB į kompiuterį. Viena iš įpatybių: šis įrenginys nereikalauja jokių draiverių, operacinė sistema (išbandyta su Windows ir Linux Debian) mato jį kaip HID prietaisą. O toliau jau programos reikalas.

ATMEGA16 USB HID temperature sensor

Nuotraukoje matosi V1 veikiantis prietaisiukas, ir V2 PCB plokštelė paruošta litavimui. V1 ir V2 skiriasi tik tuo, kad panaudoti mažesni rezistoriai, pašalinti takelių pralindimai po resistoriu.
Panaudojau ATMEGA16 tik todėl, kad tokių megų turiu daug prisilupinėjęs. MCU stovi pasuktas 45 laipsnių kampu tik tam, kad išbandyti kaip Cadsoft Eagle sugeba sukinėti detales. Šiam projekui teoriškai turi tikti bet koks Atmel firmos procesoriukas veikiantis ant 12MHz ar daugiau. Tinka darbiniai dažniai 12, 15 ar 16MHz. Arba naujieji Atmel MCU su greitu RC vidinių generatorium veikiančiu ant 16.5MHz (yra softas programiniui dažnio kalibravimui). Čia labiausiai tiktu 8 kojų procesoriukas ATTiny45.

Reikalingi PCB, pdf, BMP, Eagle failai.

Source code, PCB, Eagle failai, Win ir Linux softas su source bus greitai įdėtas. Gal ir padarysiu online rezultatus.

Testavimas ant mano USB-AVR serijos plokštės. Firmware modifikacija, kai informacija dar parodama ir ant LCD ekrano. Daviklis prijungtas laidais:

USB + LCD + FM75

(papildymai)
Firmware, source code, command line with source code.
Eagle files (PCB and SCH).
Linux source code, MRTG config example. See comments for live results.