Category Archives: MCU

AVR: elektros galios matuoklis 2

Beja, tai ATMEGA USB 26-SPI blogo įrašas. Tokiu kodu jis guli mano kompiuterio kietam diske.
Truputis apie schemą. Tai nėra joks dviratis- biški info iš gamintojo puslapių, biški nukopijuota iš donorinio skaitliuko ir gavosi tokia schemutė. Schema buvo paišoma Eagle programoje ir nebuvo paišoma su mintim, kad reikės gražiai parodyti, todėl ji nelabai ir skaitoma ar suprantama. Sukapojau iliustracijas gabalais ir kiek prisimenu parašysiu komentarus. Pati matuoklio schema susiskirsto į gabalus (paveiksliukai išsididina):

ADE7758 skaitliukas
Analoginė dalis. Tai pati ADE7758 ir jos aprišimas. Grupė 0R rezistorių atlieka trumpiklių vaidmenį.
Kairėje schemos grupė 75K rezistorių daliną tinklo įtampą iki mikroschemai tinkamo lygio. Kondikai prie analoginių išvadų yra aukšto dažnio filtrai. Deja nežinau jų reikšmių. Rekomenduočiau pasiskaityti devboardo aprašymą. Varistorius saugo nuo išlydžių, grupė kondensatorių ant maitinimo laido yra bendri visai schemai.

ADE7758 skaitliukas
Optinis ryšis bent jau priėmimo pusėje visiškai vogtas iš skaitliuko. Nežinomi diodų, tranzistorių parametrai. Ir net neatsimenu, ar išbandžiau priėmimą. Siuntimas tai tikrai veikia.

ADE7758 skaitliukas
Skaitmeninė dalis. Viskas paprasta ir jau daug kartų aprašyta mano puslapiuose: mega, LCD ekraniukas, ISP lizdelis, I2C mikroschema, jungtis.

Viskas susidėlioja į mazdaug tokią PCB plokštelę. Ji vienpusė, tačiau verkiant ją reikią daryti dvipuse, nes mikroschema gaudo trugdžius ir blogai veikia. Aš PCB ekranavau lipnia folija.

ADE7758 skaitliukas
Vienas pastebėjimas- prie įtampos daviklio didesnis tarpelis tarp vario. Ten aukšta įtampa ir dėl buitinių gamybos sąlygu yra galimybė įtampos nutekėjimui.

Visos šitos schemos ir bonusai (maitblokis, RS485 užuomazgos ir dvi versijos PCB, 57600 8N1) yra Cadsoft Eagle faile:Eagle failai. Manau kai kurie failai reikalaus mano detalių bibliotekos. Kažkur yra jau įdėta mano bloge nuoroda į ją.

Programos source… nu net gėda rodyti. Kiek ten nedadaryta. Prie source kodo dar pridėti reikalingi datasheetai, todėl archyvas gavosi kiek didesnis. Kompiliuojasi su winavr paketu.

Source code, datasheets, hex file. – this firmware is obsolete.

Ir dar:
High Voltage

Nes yra galvaninis ryšis su tinklu.

Toliau. Part 3
.

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.