Category Archives: MCU

AVR37: Print Screen

Viskas prasidėjo nuo to, kad vienas žmogus įsigijo prabangią obuolinę klavietūrą. Ir joje nėra “print screen” mygtuko. Tačiau žmogus mėgsta tą mygtuką… kelios internete sklandančios trijų ar daugiau klavišų kombinacijos nepadėjo. O man staiga užėjo bzikas… pasinaudojau senesnio projekto PCB plokštele, kiek pamodifikavau source code, “Kauno Jūra” firmelėje išverkėm mygtuką su dėžute ir gavosi toks gaminys:

usb print screen individual button keyboard

Ir kiek arčiau:
usb print screen individual button keyboard

Tiesa, foto nesimato, kad nuspaudus mygtuką, kokią pusę sekundės mygtukas pašviečiamas žalia šviesa. Čia kad rimčiau atrodytu. Visdėlto “industrinis dizainas” vienok.

O dabar informacija sudėtingesnė: tai USB HID įrenginys- klavietūra. Varoma ATMEL ATINY2313 mikrokontroleriu ant 12MHz. Keli LEDai, kad rimčiau veiktu. Softas- sukompiliuotas ir source kodas
pridedamas. Beja, kiek pasirause internete, galite ikompiliuoti kokį norit kodą. Jei vietoje žalio mygtuko įdėti “raudoną grybuką” ir įprogramuoti “boss key” gautusi irgi naudingas “devaisas”.

Watmetras, naujas firmware ir kalibravimas

Tai naujos firmware pristatymas mano savadarbiui elektros matuokliui (vatmetrui). Kaip ir minėjau senesnėse žinutėse, pirminis firmware yra tik greitas juodraštis, kad pasitikrinti ar prietaisas veikia. Sukalibruoti seną versiją tai tik skausmas šiknoje- visos konstantos surašytos ir hardcoded į programą. O tai baisuokliškai nepatogu. Specialiai pasidariau dar vieną matuoklį. Šį kartą panaudojau 3 fazių skaitiklio korpusą. Geležies lygyje matuokliai nesiskiria, nebent tuo, kad padaryti LED mirksiukai kurie demonstruoja aktyvios ir reaktyvios energijos “kvantus” ir dar sumontavau I2C duomenų šynos kištuką. Pats PCB kiektai skiriasi nuo pirminės versijos.

savadarbis vatmetras
(PF rodmenys dar neteisingai skaičiuojami)

Pagrindiniai skirtumai firmwarėje:

1. Visiškai atsisakyta slankiojo kablelio matematikos. Softo ilgis sumažėjo nuo ~9K iki 5.5K. Manau softas pasidarė ir greitesnis. Softas sumažėjo nežiūrint į tai, kad parašytas visas RS232 interaktyvus valdymas.
2. Prietaiso valdymas, kalibravimas per terminalinę programą pajungta per optinę jungtį (57600 8N1). Šiaip aš pradžioje projektavau kelis mygtukus. Bet vėliau nusprendžiau, kad dėl saugumo, jokių mygtukų nebus.

ADE skaitliukas ir terminalas
(čia matosi ATH komandos rašymas kad išjungti duomenų srautą. Plačiau apie tai kiek žemiau.)

3. Šios versijos softas naudoja didesnį LCD ekraną. Tačiau tai padaryta tik dėl mano patogumo. Programos softas leidžia visus skaičiukus sudėti kompaktiškiau. Ir šiaip, kam reikalinga dažnio indikacija? 🙂
4. Visi konfiguraciniai skaičiukai (bent jau tie kuriuos aš palaikiau svarbiais) išsaugomi atmegos EEPROMe.
5. 16 kilobaitu I2C mikroschema dar nepanaudota. Tiesa, firmware leidžia nusiskaityti per consolę jos turinį.

Kalibravimas

Kalibravimas atliekamas pagal Analog device rekomendacijas- skaityti datasheetą. Kalibracija labai sunki dėl reikiamų prietaisų ir elektros tinklo sąvybių. Mumi prireiks: kintamos srovės TRUE RMS voltmetro ir ampermetro, reguliuojamo 50Hz stabilaus (! beviltiška) šaltinio, kelių aktyvinių apkrovų (kiek galima didesnės galios- kokių 5kW, 2kW ir ko nors mažesnio). Jokių induktyvinių elementų, grynas R. Toliau reikės reaktyvinių apkrovų, irgi kiek galima didesnių- kondikų ir droselių (trafų be apkrovos)… ir gerai būtų kontrolinių vatmetrų… bet čia jau beviltiška. Pati mikroschema deklaruoja gana didelį tikslumą: 0.2%, tačiau buitinėm sąlygom tas tikslumas nepasiekiamas dėl kalibravimo sunkumų.

Primityvus kalibravimas:

Pajungiam prietaisą prie elektros tinklo, be apkrovos. Pasijungiam terminalą. Naujai užprogramuotas matuoklis rodo visiškus briedus (šimtai ar dešimtys kW ir panašiai), mirkčioja ledai, terminale bėga bet kokie skaičiai ir kas antroje eilutėje pranešimas apie pertraukimą (interrupt=454AF ar panašiai). Tai todėl, kad kai ištrini atmega (bent jau pas mane), jos epromas buna užpildytas FF reikšmėm. O tai žvėriški daugikliai.
Nekreipdami dėmesio į chaosa terminale (ir LCD ekranėlyje) rašom DIDŽIOSIOM RAIDĖM:

AT&F

Po šios komandos chaosas turi apsiraminti, voltai, amperai, vatai ir kiti turi pasidaryti bent jau panašūs į realius. Terminale nebeturi rodytis “interrupt” pranešimai. Interrupt- tai kai atmega nebesuspėja nuskaityti sukauptos energijos ir ADE registrai persipildo.
Terminale dabar turi bėgioti gražios duomenų eilutės (kurios lengvai importuojamos į elektronines lenteles). Tačiau šie skaičiai nervija. Todėl rašom komandą kuri išjungia rodymą:

ATH

Darba matome OK pranešimą ir terminalo langas nebekvailioja. Jei išjungsim maitinimą, vėl viskas bus iš pradžių, todėl šiuos “fabrikinius nustatymus” reikia surašyti į atmegos eepromą. Todėl rašom komandą:

AT&W

Dabar perkrovus visą prietaisą (cycle power) viskas turi būti normalu. Tas pats, jei išprovokuoti perkrovimą ir softwariškai su komandą ATZ , tai paprasčiausias ciklas ir atmega persikrauna dėl watchdog suveikimo.
Galima softwariškai perkrauti ir ADE7758 čipą komanda ATA.
Beja, jei norite vėl matyti duomenų eilutetes, parašykit komandą ATG.

Pajungiam voltmetrą prie prietaiso ir matuojam įtampą. Ji aišku nesutaps su prietaiso nuskaityta. Dabar reikia parinkti du 12 bitų skaičius. Tai daugiklis ir DC poslinkis (offset). Mano matuoklois naudoja tik C fazės rodmenis, tai mus dominantys registrai yra 0x26 (gain) ir 0x35 (offset). Gain galima pasikaičiuoti lyginant prietaisų parodymus ir žinant kad šis registras keičia ±50% with a resolution of 0.0244%/LSB. Vyriausias bitas yra ženklas. O galima iš palubinsko rašyti skaičius kol voltmetrai sutaps. Pas mane jie pradeda panašiai rodyti prie 0x478 reikšmės. A tiesa, užmiršau parašyti, visi skaičiai tik šešioliktainiai.
Rašom į Gain registrą su komanda:

ATX262000478

Čia ATXnnlmmmmmm. nn- registro numeris, l- ilgis baitais (1-3), mmmmmm- registro reikšmė. Būtini 000 priekyje (leading zeros).
Nuskaityti bet kurio registro reikšmę iš ADE mikroschemos:

ATYnnl

Čia nn- registras, l-ilgis baitais.
Rašant ir skaitant būtina pasidomėti kiek bitų ir atitinkamai baitų turi registras. Gain registras 12 bitų. Jį dapildom iki 24 bitų nuliais. Čia dėl to, kad softas kvailas 🙂 O SPI persiuntimas tik po 8 bitus, tai jei 12 bitų, vistiek į mikroschemą įsirašo 16 bitų. Iš čia ir ilgis- 2 baitai.
Firmware beveik neturi apsaugos nuo kvailų veiksmų, todėl laikykit šalia instrukcijas.

Grįžtam prie kalibravimo. Pakeičiam įtampą su kokių LATRu ir vėl žiūrim ką turim. Pastebim, kad įtampos rodymas kiek skiriasi. Čia paprasta matematika, priklausomybės formulė korekcijom:

U=Uin*x+a

Tas a ir yra DC offset, kurį ir rašom į registrą 0x35. Taip smaukom skaičius, kol voltmetras pradeda rodyti teisingai. Pastačius įtampą į vietą pereinam prie srovės. Čia registrai Igain=0x29 ir Ioffset=0x38.

Teoriniai paskaičiavimai, kodėl parinkti kai kurie koeficientai aprašyti firmwares source faile. Tas aktualu tiems žmonėms kurie norės panaudoti kitokius srovės transformatorius ar įtampos daliklius. Aišku galima pasiskaityti ir datasheetą, tačiau ten viskas “ant pirštų” paaiškinta.

Viskas lygiai taip pat reguliuojasi- tik dabar matuojam srovę su etaloniniu ampermetru.

Pastačius U ir I, pažvelgiam į VA parodymus. Čia paprasčiausias voltu ir amperų sudauginimas. Čia jau rodos nėra offset registro, tačiau yra gain registras (0x32). Čia reikia tai sureguliuoti, kad rodytų voltų ir amperų daugybos rezultatą.

Pastačius VA einam prie svarbiausio skaičiaus- vatų. Kol apkrova grynai aktyvinė, VA ir W parodymai turi sutapti. Tačiau vistiek rekomenduočiau pasijungti etaloninį vatmetrą. Čia mums vėl du registrai Wgain=0x2C ir Woffset=0x3B.

Dabar prasideda mistika. Datasheetas sako prijunkit 0.5 cos fi apkrovą. Nu ir kur ją gauti? Niekaip. Vienintelis sprendimas- jungti kondensatorių. Nedidelis kondensatorius- 20…40uF, naujas, geriau polipropileninis, su tikrai gera izoliacija ir storais laidais turi generuoti tik reaktyvinę galią. Ją galima net pasiskaičiuoti pasiskaičiavus kondiko reaktyvinę varžą. Taip bandom pasistatyti VAR reikšmę. VA turi rodyti tą patį ka VAR, o W turi būti 0. VARgain=0x2F, VARoffset=0x3E… Tačiau jei vistiek nesigauna, vadinasi skaitliukas biški nepataiko fazę tarp įtampos ir srovės. Tam reikalui yra 0x41, 7 bitų registras.
Nuo kondensatoriaus VAR reikšmė gaunasi neigiama. Nuo induktyvumo- teigiama.

Jei jūsų įtampos ir srovės daliklis koks nors kitoks, nei mano, dar yra registras 0x23- PGA gain registras kuris keičia visų fazių ir srovių stiprintuvo koeficientus.
Nu dar yra 0x42-0x44 registrai…

Viska sustygavus, neužmirškit viską išsaugoti su AT&W komanda.

Papildomos komandos:

ATDn – I2C mikroschemos turinio rodymas. Po 2 kilobaitus. n- rodo 2K puslapio numerį.
ATI – šiaip informacija apie aparatą.
ATE – echo išjungimas.
ATS – duomenų iš megos epromo perrašymas į ADE čipą. Tas pats kaip ATA, tik neperkraunamas čipas. T.y. be software reset. T.y. nenusinulina kiti registrai.

Ir aišku pats firmware: source ir sukompiliuotas HEX failas.

LED lempučių galios matavimas

Čia iškilo tokia diskusija apie LED lempučių naudojama (ir generuojama reaktyvinę) galią. Nors matuoklis neturi skaičių po kablelio, tai matavimai gaunasi vos ne “plius minus” vienas. Tačiau bendrą tendenciją galima pastebėti. Pirma dalis posto, tai tik galios matuoklio fotografijos. Antrojoje dalyje pačių LED lempučių nuotraukos.

LED galios matavimas
Prietaiso “kalibracija”, niekas pajungta.

LED galios matavimas
Daug mažų LEDų plastikiniam korpuse.

LED galios matavimas
Savadarbis LED šviestuvas iš televizoriaus pašvietimo.

LED galios matavimas
Vienas diodas, aliumininis nedidelis radiatorius.

LED galios matavimas
Vienas diodas, normalus radiatorius.

LED galios matavimas
Kitas vienas diodas, juodas normalus radiatorius.

O dabar pačių šviesos diodų lempučių nuotraukytės: Continue reading →

AVR30: taimeris fotorezistui ar dar kam nors

Čia buvo šiaip, ekspromtas. Poto, kai prasidėjo šaltkalvystė, “pasistojo” klausimas: nu ir kam toks didelis ir sudėtingas indikatorius. Realiai, čia buvo softwarinis eksperimentas kuris peraugo į hardwarinį, tačiau buvo pilnai nutrauktas.

AVR taimeris
Koks gi buvo “sofwarinis” eksperimentas? Mano LED laikrodžiai neturi minučių-valandų ar panašiai skirtuko. Paprastai tai būna dvitaškis. Tačiau matricoje nėra specialios vietos šiam simboliui. Gerai, kad skaičių sriftas turi nenaudojamus bitus, todėl jei skaičius kiek pastumti į šoną, tai atsiras vietos ir dvitaškiui. Continue reading →

AVR 32: senoviški LED indikatoriai

Jau beveik neatmenu iš kur juos išlupau. Kažkada bandžiau parduoti, bet šiuolaikinis jaunimas nesuprato kam jie naudojami ir kokie jie tiesiog grąžūs. O tai jug vintage elektronika. Dabar tokios jau niekas pigiai nepagamins. Tiek bambesių, todėl pridėjau ir bambesių kategoriją. 🙂

Tai dviejų gamintojų: didesnis Siemens DL3416, mažesni Hewlet Packard HPDL1414 (o poto Agilent, poto AVAGO…)

Gražuliai tokie:
Red LED alphanumeric display

Jie valdomi paraleliniu interfeisu, Siemensas kiek navatniau, HP kiek paprasčiau. Tačiau Siemensas backward compatabilus su HP.


(skaičiukai biški nesutampa, nes tikriausiai supainiojau A0 ir A1 laidelius ant breadboardo).Ir kitas filmukas:

Kadangi valdomas ATMEGA, tai papuola į AVR kategoriją. Ir net turi savo numeri, nes šiokia tokia programa guli 32 direktorijoje. Manau tikrai jums jos nereikia… 🙂

Kaip ir viskas. Čia šiaip, kad straipsnių daugiau būtų…

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…