Category Archives: MCU

AVR: elektros galios matuoklis

Šiaip, ADE7758 mikroschemą turėjau iš labai senų laikų. Kai ka tik jas pagamino Analog Devices. Ją man atsiuntė kaip pavyzdį, tačiau niekaip neprisiruošiau ką nors su ja daryti. Eksperimentui paskatino partija blogų elektros skaitiklių, kurius išardęs radau tą pačia mikroschemą. Skaitliukų MCU buvo kažkokie egzotiški, todėl viską perdariau ant man žinomų ir turimų ATMEGA16. Daugelis detalių ir didžioji dalis schemotechnikos (ypač analoginė dalis) nukopijuota iš donorinio skaitiklio. O toliau viska standartiškai:

ADE7758 skaitliukas
Kiek didesnis LCD ekranas, maitblokiukas, optinė jungtis.

ADE7758 skaitliukas
Ekraniukas rodo tik vienos fazės duomenis, nes tik viena ir pajungta. Čia viskas paprastai: voltai, amperai, hercai; antra eilutė: vatai, voltamperai, varai. Pirmos eilutės duomenys kiek matematiškai apdoroti, kad bent jau panašūs skaičiai matytusi. Tuo tarpu antrojoje eilutėje duomenys tiesiai iš ADE7758 mikroschemos registrų.

ADE7758 skaitliukas
Prieš tai nuotraukoje matėsi mėlynas srovės transformatorius, o šioje nuotraukoje matosi įtampos daliklis- virtinė 75k 1206 korpuso rezistorių. Dar ant plokštės pastačiau 24C128 mikroschemą (gal prireiks), galingą mosfetą (gal reikės ką junginėti- dabar junginėja LCD ekrano apšvietimą), paprastas indikacinis LEDas bei optinė jungtis.

Programinė įranga dar labai pirminėje stadijoje, o ADE mikroschema niekaip nekalibruota. Praktiškai ir teoriškai duomenys rodo pieno riebumą. Nelabai teisingai veikia slankiojo kablelio ir šiaip didelių skaičių (24 bitai) ženklai ir matematika. Dar yra kažkokios problemos- kartais ADE mikroschema užsigliučina ir rodo visiškas nesamones. Ir kas durniausia, neklauso software reset komandos. Negaliu pasakyti ar tai schemos ar softo problemos. Tai pat negalima atmesti, kad pati ADE gali būti brokuota- juk kažkodėl skaitliukas buvo išmestas.

Surinkti keli rezultatai ir apdoroti su Libreoffice programulka:
ADE7758 skaitliukas
Absoliučios šio grafiko reikšmės nieko nereiškia. Tačiau matosi, kad sistema veikia. Grafikas prasideda nuo pirmojo piko- čia įjungiu termoklijų pistoleta. Tai grynai aktyvinė apkrova ir matosi, kad kai tik pradeda kaisti, srovė krenta. Tai patvirtino ir ampermetras. Sekanti grafiko dalis- įjungiu savo PCB gamybos UV švitinimo dėžę. Ten stovi kelios įvairios dujų išlydžio lempos su paprastais droseliniais balastais. Matome, kad mėlynas vatų grafikas žymiai žemiau ir kad atsirado naujas geltonas VARų grafikas. Kaip ir teisingai?

Papildomas žalias grafikas tai paprasčiausiai sudaugintos U ir I reikšmės.

Tai labai labai žalias projektas, todėl tiek SCH, tiek PCB ir net source code failai atsiras vėliau čia ar naujam straipsnyje. Kol kas tiek. Tikėkimės, kad “užsidegimas” nenuslobs ir pabaigsim šį projektą.

Pradinio varianto galios matuoklio schema, PCB/SCH Eagle failai, source code, hex

Pratesimas >> Part 2.

AVR-27 ir 28

Kiek tvarkiau kaimo ir namų kompus. Tiksliau sinchronizavau MyDoks direktorijas. Todėl pagaliau pavėluotai atsirado (nes pakeliui pamečiau USB flešiuką) keli senesni failai.

Tai senesnės hardwarės, jau aprašytos senesniam poste papildinys. Servo motoriukų valdymas.
avr-usb
Servo motoriukai- pigiena iš kinijos už porą dolerių. Valdymas- siauro diapazono PWM, ~50..60Hz. Pridėtas softas prie senojo straipsnio archyvo. Softas leidžia per USB, iš didelio kompo, valdyti servo motoriuką (-us). Paprasta komandinė eilutė (beja softas nemodifikuotas, nes nėra kompiliatoriaus kaime) ir kiek kitos firmware nei kito projekto.

Kita hardwarė ATTINY testavimui jau kiek kitokia:
avr-usb
Beveik visos kojos išvestos į varžtines jungtis. Čia galima pajungti bet ką. Tai pakeliui pajungiau kažkokią LED lentą su UCN5833A mikroschema.

Ten dar galima uždegti raudonus ir geltonus kryžius ant skaičių. Kiek spėju, tai tikriausiai “aptarnaujame jūsų numeriuką” švieslentės dalis.

Aišku, visas softas čia kartu su kompiliuotu failu.

Archyve dar yra papildomas softukas… kurmiams vaikyti. Kaimo kaimynas įsigijo tikriausiai senukuose tokį cipuką, kuris periodiškai cypia. Ir mane bei kurmius nervuoja. Dažnis visai neultragarsinis. Todėl parašiau tokį softą kuris irgi periodiškai cypia ir dar kartais keičia cypimo dažnį.

Lifto indikatorius (AVR 29)

Aišku spėju, nes nesu tikras ar tai lifo dalis. Šiaip, šios hardwarės prisilupau visą kalną (apie 4kg) ir jau seniau minėjau, kad kažką kursiu… Tačiau reikia pasinagrinėti, kaip tie šviesos diodai sulipinti originalioje schemoje. Keletą vakarų praleidau ir beveik visą schemą atstačiau. Ir parašiau šiokį tokį softuką testavimui.

lifto hardware
Tai klasikinis 8 bitų Atari kompiuterio šriftas. Tai paprasčiausias count-up, arba count-down softukas.

Iš kitos pusės plokštė atrodo taip:
lifto hardware
MCU- ATTINY2313, maitblokis- du vienetai MC33063AP čipukų, kurie iš 24V daro viską ką reikia. O toliau prasideda biški nesamonės. Stovi 4 vnt. HEF4094BP sujungti nuosekliai t.y. 32 bitų registras. Kadangi šie HEF kabo ant visai kitokios maitinimo įtampos nei ATINY, tai jie valdomi per …. ULN2803A! Šis čipas per savo darlingtonus invertuoja signalus iš MCU. Dėl čipo lėtumo net tenka įterpti pauzes softe. Vienas ULN skirtas įtampos lygiams keisti, tuo tarpu kitas- bendri LED laideliai į minusą (katodai lygtai vadinasi). Tuo tarpu LED pliusai iš matricų per rezistorius pajungti prie likusiu trijų HEF…

Maždaug taip reikia išpurkšti iš MCU, kad uždegti kelis diodus:
lifto hardware
Toks straipsniukas primintukas.

Beja, stovi dar du SN75176BP čipai. Taip įtariu, kad šios dvi mikroschemos sujungtos lygiagrečiai…

AVR 23: Red Matrix Clock

Labai seniai rašiau apie raudonų šviesos diodų matricą. Šiaip programa nedadaryta iki galo, bet kadangi ji funcionali ir veikianti, tai įdedu.

Trumpai primenu. Tai raudonų šviesos diodų matrica valdoma spec mikroschema (Toshiba TD62C962LF). Pagrindinė projekto “fiška”, kad skaičiai slenka aukštyn žemyn…
RED dot matrix clock
Yra kalendorius su automatiniu savaitės dienų skaičiavimų, teoriškai žadintuvas, rodo temperatūrą. Viskas valdoma keliais mygtukais ir ATMEGA16.

Tai tik archyvas, kad nepasimestu source kodas:

Redclock firmware ir source.

Šiaip aš kaip atšalau nuo šio projekto, nes užėjo didybės manija. Tik pažiūrėkit į šią fotkę:
naujos RED LED matricos

Vienas kitas šviesos diodas? 🙂

ATMEGA USB 27: užknisiklis

Šiaip čia ne mega, o vienas iš ATTINY čipų kurių pririnkau visą saują (~50 vienetų).
Tai nėra užbaigtas projektas “užknisiklis”, tai tik hardwarės ir bazinės firmwarės tikrinimas.

Pirmiausia hardwarė:

uzknisiklis
(didesnė schema spausdinimui)

Schema supaprastinta ir tipinė. 5V iš USB porto per du diodos nusimuša iki USB standarto (apie 3.3V), pats ATTINY2313 maitinamas irgi pamažinta įtampa. Naudojam 20MHz versiją, kuri puikiausiai veikia 12MHz dažniu ant kiek mažesnės įtampos.

uzknisiklis
(PCB eskizas, 1200dpi)

Visos papildomos jungtys nepavaizduotos schemoje nors yra ant PCB. Čia šiaip projektas su galimybe išplėsti.

Firmware ir Software (su source kodais):
Žinutės rašymo metu archyve tik 3 testiniai projektai iš V-USB interneto puslapio. Vėliau įdėsiu naujesnę archyvo versija ir gal bus pats užknisiklio projektas.
Šiuo metu archyve yra trys projektai:

  1. Power Switch – mikroschemos kojyčių valdymas per USB iš motininio kompo. Nesigylinau į veikimą. Tai tik pirmas testinis projektas.
  2. Hid mouse- USB kompiuterinės pelės emuliatorius. Pasidaro kaip paprasčiausia USB pelė kuri sukioja ratus po kompo ekraną. Tai jau irgi šioks toks užknisiklis.
  3. Hidkeys- USB kompo klavietūra. Laisvos ATTINY kojytės trumpinamos į žemę siunčia kokią nors raidę į kompą. Tai irgi šioks toks užknisiklis.
  4. Servo- kiniškų servo motoriukų valdymas

Visas firmware kiek modifikuotas, kad veiktu su šia schema ir kompiliuotusi su WinAVR paketu. Yra pridėti ir sukompiliuoti HEX failai, jei reikia ištestuoti hardwarę.
Schemoje nėra ISP jungties. Tai tikrai problema tiems kurie neturi programatoriaus. Aš turiu ir kiniečių gamybos programatorių ir dar vieną plokštelę kitiems projektams su ISP-JTAG jungtim. Tai jau bus kitas postas.

Firmware and software archyvas.

ATTINY atrakinimas

Iš užsienio atvežė biški šroto, berniukai rušiavo ir mano prašymu atidėjo kažkokias plokšteles, greičiausiai tai buvo lifto indikacija. Tai raudonų diodų matrica, kelios mikroschemos (buferiai, raktai ir RS485) ir ATTINY2313V-10 arba ATTINY2313-20 MCU. Tačiau bėda- beveik visi čipukai užlokinti (gal kokie 5 nebuvo). Užlokinti su security bitais ir dar kažkas. Žodžiu, čipai nesiprogramavosi, net nesiskaitė jų signatūra. Gaila išmesti, o ir žinojau, kad šiuos čipus galima išvalyti. Iš pradžių, išvaliau tiesiogine to žodžio prasme- išskalbiau plokštes indų plovimo mašinoje. Poto, pasikonsultavęs su newsgroupu, surinkau ant ATMEGA8L schemutę. Beja atmega atkeliavo iš to pačio šroto, tik tikriausiai iš didesnio lifto, nes matrica didesnė. 🙂

Gavosi tokia snargliavonė ant breadboardo:
ATTINY FUSE unlocking
Iš kairės į dešinę: 5V maitblokis, ATMEGA8L, raudoni makaronai- pull-up rezistoriai (šiaip nereikalingi, bet naudojau debuginimui), pacientas- ATTINY, 12V stabilizatorius, TTL lygio RS-232 į USB adapteris. Nes ant ekrano rašė informacija ir priiminėjo komandas.

Štai toks valymo- remonto logas:
ATTINY FUSE unlocking
Užrakintų mikrokontrolerių ID buvo arba FFFFFF arba 000102. Pirmųjų turinys nusiskaitydavo kaip FF, o antrųjų- baitai iš eilės 00, 01, 02, 03 ir t.t.
Pats atrakinimas buvo kiek triukavotas… dėl mano tingumo. Nenorėjau ieškoti tranzų ir daryti 12V pajungimą. Todėl teko rankutėmis paduoti 12V į MCU pirmą koją. Ir ne iš karto, o atleidus start mygtuką, maždaug po 0.3 sekundės. 🙂 Ar panašiai. Kiek ilgiau ar trumpiau ir neveikia.
Beja, ATMEGOS serial eprom nebuvo išvalytas programuojant softą, todėl biški log meluoja. Aš tikrai nesuremontavau 28 000 čipų. Aš suremontavau tik 47 vienetus.

ATTINY FUSE unlocking
Nu ir ką dabar ant šitų konstruoti? 😉

Printerio zulintuvas (ATMEGA USB 025)

Ką galima padaryti iš seno adatinio printerio ir mano ATMEGA plokštės (beveik) ir MOSFET raktų rinkinio? Ogi tokį nesamoningą pieštukų ir popieriaus gadinimo prietaisą:

printerio steperiai kai braizikliai

Visa šita nesamonė valdosi iš pagrindinio kompo, ryšis tarp kompo ir “periferijos” per USB laidą. USB draiverių nereikia, tai HID įrenginys. Tik reikia kompe instaliuotis LibUSB-Win32 (arba linux analogą) iš source-forge.
Geležis tai ATMEGA16 su OBJECTIVE DEVELOPMENT Software GmbH (V-USB) freeware firmware ir keletas eilučių C kalboje. Host programinė įranga deja tik komandinė eilutė (nesugebėjau priversti man pavaldžias visualines programas dirbti su šia biblioteka). Komandinė eilutė supranta primityvų skriptingą, tai galima ir pažaisti. Tą ir parodo šis filmukas:


Nelabai lygiai gavosi, nes pieštukas pritvirtintas paprastom gumytėm ir kiek kliba.

Daugiau info rasite programos archyve (ten ir sukompiliuoti exe bei hex, bet ir visi source kodai).
Beja, viskas teoriškai turi kompiuliuotis ir veikti ant linuxų. Bandžiau tik su Windows XP Pro (32bit).

ATMEGA USB 24: steperiai per USB portą

Jau rašiau, kad ištraukiau kelis žingsninius variklius ir kiek su jais pažaidžiau. Poto pažiūrėjau į internetą, radau daug ten grožybių… tačiau grožybės arba reikalavo labai jau advanced softo ir super-duper draiverių, arba naudojo printerio (LPT) portą. Mano kompo LPT portas ir taip jau susvilintas, o su papildoma plokšte nekiekvienas softas sugeba dirbti. O ir tas LPT metodas man nepatinka. Todėl nutariau išrasti dviratį. Pasiėmiau savo seniausią ATMEGA16 testinę plokštelę su USB lizdeliu, prikabinau jau aprašytus raktus ir kiek paprograminau. Gavosi toks niekalas:

Sistemos principas- stepus valdo ATMEGA, didelis kompas per USB siunčia komandas ir gali nusiskaityti kai kurių registrų būklę- nu kad atbulinis ryšis. Didelis kompas siunčia komandą- steperį numeris vienas pasuk per 1056 žingsnius pagal laikrodžio rodyklę ant 5 greičio, o steperį numeris du pasuk per 38 žingsnius prieš laikrodžio rodyklę ant 15 greičio. Kol steperiai sukasi, didelis kompas gali nuskaityti komandos bitus, kiek liko žingsnių ir A porto (ir dalį B porto) bitų būkles. Ant tų portų galima užkabinti galinukus ar kokius trumpo jungimo bei termo daviklius.
Dar yra komanda “atleisti vadžias”- tada nutraukiama srovė per motorų apvijas ir juos lengvai galima sukinėti. Nes kai įjungtas stabdis, kai kurie labai priešinasi.
Beja, filmukyje matosi, kad motorai ant didžiausio greičio nepasisuka. Reikia eksperimentiškai sužinoti savo turimo motoriuko ribas.

Viskas primityvu ir paprasta. Atiduodu source kodus, todėl vietoje motoriukų lengvai galite valdyti ką tik norit- softas visiškai paprastas. Beja, valdymas tik command line, be jokių langelių. Tačiau softas kompiliuojasi ir ant windows ir ant Linux. Beja, USB įrenginukas draugiškas sistemai ir naudoja HID draiverius.
Full source code and HEX.

NiosII vs Atmega16

Vėl prisiminiau savo žaidimus su FPGA čipu. Prisiverčiau pasižaisti su virtualiu (softcore) procesorium. Juolab, kad Altera atidarė savo licenziją ir NiosIIe procesorių galima naudoti savo kūriniams nemokamai. NiosIIe procesorius tai 32 gyvis su galimybe prikomponuoti matematinį koprocesorių (FPU).
Procesorių nutariau sukišti į savo gamybos plokštę su minimaliu Cyclone II čipu (EP2C5T144). Kas įdomiausia, softas su programiškai padaryta slankiojo kablelio matematika netilpo į čipo vidinę atmintį, tačiau tilp FPU ir softas su koprocesoriaus panaudojimu :).
Kad palyginti procesoriaus greitį, panaudojau tą patį softą (C kalboje) tiek ant Atmega 16, tiek ir su NiosII procesorium. Štai jumi ir rezultatas:

Pagrindiniai parametrai:

  • ATMEGA16, veikianti 12MHz dažniu. Softas kompiliuotas su GNU C. Interfeisas su FPGA čipu per 4 duomenų bitus ir keliais kontroliniais laideliais. FPGA vidinis skaitliukas resetinamas su Atmega, vėliau paveiksliukas pumpuojamas po 4 bitus. (4 bitai, strobas, 4 bitai, strobas, FPGA padidina adresą, ir taip ratu).
  • NiosIIe, ekonominis, nemokamos licenzijos procesorius. Softas kogero irgi GNU C kompiliuojamas. Duomenų perdavimas kiek kitoks, nes viduje FPGA sujungti žymiai lengviau: 8 bitai duomenim, kelioliką bitų adresui. Kaip jau ninėjau- FPU, hardware floating point (sudėtis, atimtis ir daugyba). Procesorius veikia nuo 50MHz taktinio dažnio. Didesnio dažnio negalėjau panaudoti, nes FPGA neturi laisvo PLLo (PLLas naudojamas LVDS interfeisui).
  • NiosIIf, tas pats kaip ir NiosIIe, tik dabar “komercinė” versija, vadinama dar “fast”. Matosi, kad kiek greitesnė. Tačiau pagrindinis greitumas pasijaustu, jei softas važiuotu iš išorinės SDRAM ar DDR atminties.

Tikėjausi žymiai didesnio greičio skirtumo. Gi Mega tik 8 bitų, neturi “geležinio” slankiojo kablelio ir važiuoja nuo 12MHz (todėl, kad toks kvarcas prilituotas). Tuo tarpu Niosas 32 bitų, hardwarinis floating point, groja ant 50MHz ir naudoja vidinę FPGA atmintį kuri tikrai nestabdo.

Nemanau, kad reikia publikuoti softą (tiek C, tiek Verilog) nes hardwarė labai jau specifinė ir niekas jos nepasidarys. Jei labai labai susidominot, rašytik laiškelį, pamačysim.

Sudėtingiausia “namudinė” plokštė

Mintis paprasta- reikėjo padaryti LVDS siuntiką mano RGB matricai. Nei viena turima testinė FPGA plokštė netiko. Vienintelė išeitis- darytis plokštę. Viena problėmėlė- CycloneII mikroschema turi 144 kojas ir 0.5 mm kojelių žingsnį. Buitinėm sąlygom kiek sunkokas variantas- reikia užsisakyti kokiam nors fabrikėlyje Kinijoje ar Bulgarijoje. Tačiau tokia PCB gana brangiai kainuoja. Ypač žinant tai, kad aš dar nežinau kaip kas turi būti padaryta. Todėl išmasčiau, kad “beta” versija reikia pabandyti pasidaryti namie. Tokiom mikroschemoms reikia daugiasluoksnės plokštės, tačiau namų sąlygom metalizuotos skylutės nesigauna ir šiaip problemos su sluoksnių sutapatinimu. Todėl plokštę pasidariau viensluoksnę.

Va paveiksliukas kaip turi atrodyti plokštė:
FPGA
Rausvais kvadratais pažymėtos vietos, kur padariau klaidas. Klaidos tokios:

  • FPGA I/O 2.5V, ATMEGA16 3V tačiau aš neturėjau L versijos. Todėl mega važiuoja ant maždaug 5V.
  • Megos I/O ir Ciklono I/O lygiu suderinimas. Bandom su rezistoriais.
  • Rezonatorius ??MHz buvau sugalvojęs viena, teko dėti 50MHz kuris irgi važiuoja ant 5V. Iš čia CLK lygiu suderinimas su rezistoriu ir diodu. Kiek jis duoda problemų dar nežinau.
  • FPGA PLL maitinimas. Čia jau aš kaltas, kad iki galo neįsiskaičiau į instrukcijas. Aš sujungiau PLLA ir PLLD laidelius į vieną laidą ir per ferituko ir kondiko filtrą pajungiau prie VCCINT… Galbūt dėl šito negaunu PLL LOCKED patvirtinimo LVDS išėjimo megafunkcijoje.
  • Dar nepatvirtinta, bet rodos supainiojau “p” ir “n” poras ant kištukų… nes duomenys kitame kabelio gale gavosi invertuoti :).
  • Užmiršau “apsauginius” 3.6V zenerius ant USB duomenų šynos. Ir vieną rezistorių ten pajungiau prie GND vietoje VCC5.
  • Viena LVDS pora neveikia. Nežinau kodėl. Pasirinkau vieną kojelę su “dual purpose pin” ir kažkas man ten gliučina.– radau mažyti “solder bridge”
  • Nenumačiau keletos vietų “demferiniams” kondikams, nors ant PCB ten vietos pilna.

Pagaminta plokštė, kad negalvotumėte, kad svaigstu. Tas organinis stiklas tikrai padeda, nes ne vieną prietaisiuką esu pagadinęs kai nusprūsta koks oscilografo žemės laidas ir prisiliečia prie ten kur nereikia.

FPGA
(Plokštė pagaminta su fotorezistu ir lazeriniu printeriu. Takeliai išvedžioti Eagle programa)

Kol kas viskas veikia blogai. RGB LED plokštė pagauna LVDS sinchronizacija, bet vistiek bando rodyti visokius briedus. Pagyvensim pamatysim, kol kas gi mokomės. Dar nei vieno LVDS projekto nedariau.
O projekto fantazija buvo tokia, kad iš kompo informacija per USB paduodama į šią plokštę, o ji, savo ruožtu, valdo vieną arba dvi RGB matricas.
Šiuo metu, matrica prijngta 100Mbit greičiu prie “valdymo” plokštės. Jei pavyksta sekmingai sinchronizuotis, duomenys teisingai vaikšto ir matrica valdosi (per JTAG). Tačiau siuntėjo LVDS modulis “PLL LOCKED” nepakelia.