Nuotolinis valdymas, tęsinys – posūkiai, siųstuvas 2024.07.16 at 09:15

Tęsiam projektuką, kurio pradžia susijusi su straipsneliais:

HT12E – HT12D bandymų plokštė – nuotolinio valdymo pradžia

HT12E enkoderio duomenų srauto savybių tyrimas

HT12E enkoderio emuliatorius

Jau po truputį galima papsakoti apie viso šito reikalo tikslą – reikia be laidų valdyti posūkius, taip taip, mašinos posūkius. Kas per mašina ir kodėl reikia – vėliau, kad būtų intrigėlė 😁. Ir pagaliau pabaigta finalinė siųstuvo versija, išbandyta ir pasitvirtinom teisingą veikimą. Paskutine tapo trečioji versija, taigi, pabandykime paanalizuoti klaidų ir tobulinimo kelią.

Pati pirmoji, V1.0 versija, įkūnijanti pačią idėją. O idėja tokia – prie H1 prijungiama posūkių valdymo rankenėlė, kuri iš 2 kontakto permetą pliusą į 1 arba 3, priklausomai nuo to, į kurią pusę paspausta. R1 ir R3 – pull-down rezistoriai, kad valdikliukas Attiny85 neprisigaudytų trukdžių. Toliau visą „protingą” darbą daro valdikliukas. Pagal tai, į kurį kontaktą (PB1 ar PB2) ateina signalas, valdiklis suformuoja atitinkamą baitų paketą ir supučia jį iš PB3 kontakto į siųstuvo TXM433LR antrą kontaktą (duomenų įėjimas), o siųstuvas viską ištransliuoja per ANT-433-USP anteną. Prieš tai nepamirštame nustatyti loginį 1 PB4 kontakte ir tuo pačiu siųstuvo PDN kontakte, kad siųstuvas „prabustų”. Tas padaryta elektros energijos taupymo sumetimais, kad bent jau siųstuvas neveiktų visą laiką, o tik tada, kai reikia parodyti posūkio signalą, nes maitinimas nuo CR2450 3V baterijos, iš kurios galima tikėtis tik 600 mAh. Viršutinė schemos dalis, U4 su C1 ir C2 – aukštinantis DC/DC mikrokonverteris XCL101C301ER-G, sugebantis iš 0,7-5,5 V įėjimo padaryti stabilią nustatytą įtampą, nuo 1,8 V iki 5.0 V (±2.0%) su 0,1 V žingsniu. Maksimali srovė 100 mA, mums tikrai užtenka. Kam jo reikia ? Ogi tam, kad baterijai išsikraunant, schema vis dar gautų skaniai ir sočiai valgyti 🙂. Pabandžiau, veikia stabiliai iki 0,8 V, taigi, baterijoje esančią energiją išnaudos kuo pilniausiai. Toliau jungiklis H2 ir baterija U3 (nežinau, kodėl būtent U). J1 trumpiklis arba 0 Ω rezistorius skirtas atjungti likusią schemos dalį, kol vyksta Attiny85 programavimas per CN1 jungtį, nes programatorius šeria 5 V, o siųstuvas valgo maksimum 3,6 V. Schema, sakyčiau griozdiška, bet kažkaip veikia, toliau bandome optimizuoti. Skirtingai nuo visų elektronikos gamintojų, man žodis „optimizuoti” nereiškia „atpiginti”, todėl antroji schemos versija gavosi tokia:

Pagrindiniai komponentai liko tokie patys, todėl kalbėsime tik apie pasikeitimus. Pirmas dalykas – schema perbraižyta plačiau, lengviau suprasti, kas čia prie ko prijungta ir kodėl. Perprojektuota maitinimo šaltinio veikimo logika, kas leido pašalinti mechaninį įjungimo tumbleriuką. Mintis tokia – baterijos pliusas, kaip ir ankščiau, ateina į posūkių rankenėlės kontaktus ir daugiau nieko neužmaitina. Įjungus posūkį, pliusas nubėga į trijų diodų mikroschemą ir patenka į tranzistoriaus Q1 užtūrą, tranzistorius atsidaro ir prijungia minusą prie visos schemos. Kam trys diodai ? Čia toks, vadinamas, loginis ARBA elementas. Loginis ARBA – tai kai bent viename įėjime yra loginis 1, išėjime irgi yra loginis 1. Taigi, kai maitinimas ateina nuo kurio nors posūkio (į kairę arba į dešinę), jis per savo diodą užmaitina tranzistorių, pasileidžia visa schema, tada valdikliukas iš PB4 paduoda pliusą, kad laikyti tranzistorių atidarytą tiek, kiek jam reikia. O kiek reikia ? Čia mintis tokia – kad posūkis mirksėtų, valdiklis/siųstuvas turi periodiškai siųsti įjungimo ir išjungimo komandas, jeigu siuntimas išjungiamas, tarkim, po komandos uždegti posūkio indikatorių, tuomet jis ir lieka degti, nes nebelieka komandos jį išjungti. Todėl atjungus posūkių rankenėlę pats valdikliukas dar palaiko schemą veikiančią, kad spėtų pabaigti siųsti išjungimo komandą ir tada jau PB4 nustatomas į loginį 0 ir viskas atsijungia iki sekančio posūkių rankenėlės įjungimo. Truputį pakoreguota ir Attiny programa, kad veiktų pagal naująją schemą. Toliau smulkmenos – pridėti trumpikliai SJ2 ir SJ3, skirti tam pačiam reikalui, programavimo metu atjungti likusią schemos dalį. Pamiršau – pirmoje versijoje J2, o antroje SJ1 naudojami DC/DC apėjimui, užtrumpinus maitinimas eina tiesiogiai iš baterijos ir DC/DC keitiklis nedalyvauja parade. Bandymu metu maitinimo schema veikė keistai, matyt atjunginėti minusą tuo trazistoriumi nebuvo gera mintis, gal koks „ground loop’as” gaunasi, gal dar kažkas, bet DC/DC keitikliui nepatiko taip veikti, todėl pradėta projektuoti trečioji schemos versija.

Ir vėl, pagrindinė mintis liko ta pati – mažinti nereikalingų komponentų kiekį, mažinti elektros suvartojimą, viską optimizuoti. Čia pagrindinis pasikeitimas yra maitinimo grandinėje. Paanalizuokime. Baterijos U2 pliusas sujungtas su posūkių rankenėle ir mikroschema U5 (TCK106AF), čia toks „protingas” tranzistorius, arba skaitmeninis jungiklis arba… Vienu žodžiu padavus jam pliusą jis pats teisingai sujungia savo Vin su Vout ir užmaitina prie Vout prijungtą schemos dalį. Taigi, kol posūkių rankenėlė atjungta, niekas neveikia, nėra jokio srovės vartojimo – energetinio taupumo tikslas pasiektas, nes energija naudojama tik tada, kai reikia rodyti posūkį. Sujungus rankenėlę, pliusas nubėga pas vieną iš trijų diodų (tas pats loginis ARBA), pasileidžia DC/DC keitiklis ir užmaitina visą schemą (valdikliuką ir siųstuvą). Valdikliukas įsijungia, įmeta loginį 1 į PB4, tuo paleisdamas tą U5 jungiklį, pasitikrina kuris posūkis įjungtas (kontaktai PB1 arba PB2) ir atitinkamus duomenis supučią siųstuvui. Kai posūkis atjungiamas, valdiklis vis dar laiko PB4 išėjime aukštą lygį, kad veiktų jungiklis U5, per kurį maitinimas patenka į vieną iš diodų, tada į DC/DC keitiklį ir visa schema veikia, kol valdiklis išsiunčia paskutines komandas, o tada nustato loginį 0 į PB4, tuo išjungdamas jungiklį U5. Kadangi tuo metu tai būna vienintelis dalykas, laikantis schemą įjungtą – viskas išsijungia iki sekančio posūkio įjungimo. Šitoje vietoje dvejojau, nes posūkių rankenėlė perduoda tiesioginę baterijos įtampą ir kaip ji keisis baterijai išsikraunant ? Maitinimas po DC/DC vis dar būtų 3V, bet baterija tuo matu jau gal bus tik 2V. Čia teko paknisti Attiny85 aprašymą, ir radau tokį dalyką:

\[ U_{AukštasLygis}\geqslant0,6*U_{Maitinimo}\geqslant0,6*3 \geqslant 1,8V\]
\[ U_{ŽemasLygis}\leqslant0,3*U_{Maitinimo}\leqslant0,3*3 \leqslant 0,9V\]

Taigi, įtampos nuo 1,8 V ir daugiau bus tikrai fiksuojamos kaip loginis 1, įtampos žemiau 0,9 V bus tikrai fiksuojamos kaip loginis 0. Taigi, baterija gali išsikrauti net iki 1,8 V, vis tiek schema veiks teisingai, man tokie įtampų lygiai priimtini 🙂.

Schema ir montažinė plokštė braižyta EasyEDA programoje. Kodėl ? Paprastoms schemoms man ji visai patiko. Yra visokių niuansų ar nesklandumų, bet ne kritiški, todėl šalia Autodesk Eagle (gaila, kad ne Cadsoft) naudoju ir EasyEDA.

Plokštė daryta pagal posūkių rankenėlę, kad tilptų viduje. Keletas 3D vaizdelių:

Ir jau pagaminta plokštė:

Reiks dar įkelti EasyEDA projekto failiukus ir valdiklio programą.

O toliau – pabaigti ir aprašyti imtuvo projektą (prototipas irgi jau pagamintas ir išbandytas). Paskutinei, trečiajai, schemos versijai, dar įmanoma padaryti šiokį toki atpiginimą – kadangi per Attiny85 IO kontaktus gali tekėti 40 mA srovė, galima išmesti U5 ir valdyti viską vietoje jo, PB4 tikrai išveš tokias sroves – visa schema, siuntimo metu, vartoja 4,9 mA, t. y. ~8 kartus mažiau. Tam tereikia PB4 prijungti tiesiogiai prie D1 diodų 4 kontakto.

Elektrinės efektyvumas 2024.05.16 at 15:54

Kažkurią dieną, po lietaus ir esant gan vėsiam orui, gaminamos elektros pikas buvo 9820 W. Visai neblogai, turint galvoje, kad sumontuotų panelių maksimali galia – 9890 W, vos ne 100% naudingumas. Sekantis etapas – instaliacinės dėžės keitimas, „smart meter’io” pajungimas.

2024.07.04

Ir truputis realesnės statistikos.

Abiem atvejais graži saulėta diena, panelės karštos, todėl našumas kažkiek pakritęs, bet momentinis generavimas 7,68 kW, per dieną prigeneruoja 65 kWh. Tai realus naudingumas 7680/9890*100 = 77,65 %.

Saeco kavos aparato remontas 2024.03.19 at 11:09

Tiksliai nežinau koks to kavos aparato modelis, nes gavau tik valdymo plokštę su akivaizdžiais degimo požymiais ir svilėsio kvapu:

Kol kas neaišku nei kas sudegė nei kodėl. Svarbiau – kodėl. Šalia DRV8841 mikroschema, kurios išvadai prijungti prie matomos 6 kontaktų jungties, sveikų kondensatoriukų ir svilėsių. Tas DRV8841 – variklio/variklių valdiklis su dviem H tiltais. Iš to darome išvadą, kad prie jungties jungiamas kažkoks varikliukas. Funkcinė schema elementariai paprasta:

O vat norint atsakyti į klausimą kodėl – pradžioje reiktų susirinkti įtariamuosius:

  • Kaltas variklis/varikliai – gal užsikirto, gal apvijos padegę ir viskas užsitrumpino…
  • Kaltas DRV8841, gal užtūrų valdymas H tilto tranzistoriams kažką prasileido ir atidarė porą tranzistorių vienu metu – štai jums ir trumpas jungimas.
  • Didžiausias svilėsis – tantalinis kondensatorius. Jie tokie iš prigimties keistuoliai, gali pridaryti fokusų patys užsitrumpindami.

Kadangi pabandyti surinkti aparatą patikrinimui galimybės neturiu – darysim viską maksimaliai. Bet pradžioje valymas:

Vis tiek nelabai geras priėjimas, bet aiškinamės kokių detalių trūksta ir traukiam lauk tą jungtį, šiaip ar taip pasvilus:

Tuo pačiu „užtaisome” tą skylė plokštėje. Tam gerai tinka epoksidiniai dalykai arba lakas.

Toliau pasinaudojame DRV8841 aprašymu, jame sužymėti kondensatoriai ir jų talpos:

Sveikas liko kondensatorius tas, kuris prijungtas prie CP1 ir CP2 išvadų (C269), VCP kondensatorius (C27) padegęs, šalia jo buvo du kondensatoriai, tantalinis (100 µF) ir keraminis (0,01 µF). Štai ir turime viską ko reikia.

Padegę takeliai „pariebinti” lydmetaliu, kondensatoriai sudėti. Tiesa tie du didesni po 0,01 µF, vienas kaip ir turi būti, o vietoje tantalinio dar vienas toks pat, pačio tantalinio dar nėra. Kodėl ? Todėl, kad taip sugalvojau 😋, bet jeigu rimtai – kaip ir sakiau tantaliniai kartais padaro fokusų, sugalvojau pakeisti jį elektrolitiniu kondensatoriumi, o vietoje tantalinio papildomas keraminis kondensatorius pagelbės ESR mažinimo klausimu. Taigi, su kondensatoriais klausimas kaip ir išspręstas, bet neaišku, ar ta DVR8841 veikia korektiškai, todėl, prieš klijuojant sąlyginai didelį elektrolitinį kondensatorių norėtųsi pakeisti tą mikroschemą. Lupam ir ją:

O aš ir galvoju, ko ji taip lyg sunkiau kaito, štai va jums ir prašom – po mikroschema aušinimo radiatorius, prilituojamas prie metalinio mikroschemos „pilvo”. Matyt ir kaista atitinkamai, gal temperatūra ir sukėlė gedimą. Ok, lituojam naują mikroschemą į vietą:

Dabar jau galima primontuoti ir elektrolitinį kondensatorių:

Toliau jungties eilė. Tos pasvilusios nebemontavau į vietą, „pareguliavo” donorinę plokštę su tokiomis jungtimis nuo kažkokio kito aparato, taigi, į vietą stoja nauja:

Kadangi kondensatorius truputį didesnis nei buvęs tantalinis, jam prilaikyti reikės lašelio termoklijų:

Štai ir rezultatas:

MS-DOS 6.22 2024.02.12 at 10:22

Ne visai retro HW, nes čia ne HW, o SW, bet ne daug kas gali būti labiau retro nei DOS’as. Aš ant jo užsiroviau mokykloje, nes lankiau informatikos būrelį pas mokytoją Svinkūną :). Tuomet dauguma mokyklos kompiuterių buvo sunkūs geležiniai monstrai su DOS operacine sistema ir Turbo Pascal kompiliatoriumi. Taigi, sugalvojau nerti į mokyklinį amžių stačia galva, gal bus minkšta ir galvos neprasiskelsiu 😃 – pabandysiu įdiegti MS-DOS 6.22. Pradžiai, tai kas tas DOS. Tingiu rašyti ir taip visiems geekams ir hakeriams mintinai žinomą informaciją, tai kopijuoju ir Wikipedijos.

MS-DOS (angl. Microsoft Disk Operating System) – Microsoft kompanijos kurta diskų operacinė sistema (DOS). Pirmoji versija išleista 1981 m., paskutinė – 2000 m.

Tai viena iš labiausiai 1980-1990 m. naudotų DOS šeimos operacinių sistemų. Ji buvo naudojama Intel 8086 ir analogiškus procesorius turinčiuose asmeniniuose kompiuteriuose. Šią operacinę sistemą vėliau pakeitė grafinę vartotojo sąsają (angl. GUI – graphical user interface) turinčios operacinės sistemos, daugiausiai įvairios Microsoft Windows operacinės sistemos versijos. Pradžioje ši operacinė sistema buvo žinoma kaip QDOS (angl. Quick and Dirty Operating System) arba 86-DOS.[1]

MS-DOS buvo naudojama suderinamuose su IBM PC kompiuteriuose, o IBM PC kompiuteriuose buvo naudojama pervardinta šios operacinės sistemos versija PC-DOS.

Pradžiai renkuosi, kuria gi DOS versiją instaliuoti:

Turint tokią Wikipedijos lentelę prieš akis labai lengva tą padaryti – paskutinis „tikras grynas” DOS yra 6.22 versija. MS-DOS galima parsisiųsti iš čia: WinWorld: MS-DOS 6.22 (winworldpc.com). Kadangi instaliuosiu DOS į virtualų PC, pasirinkau Microsoft MS-DOS 6.22 [Virtual PC VHD].

Sekantis, o gal labiau lygiagretus, arba net ankstesnis žingsnis – pasiruošti virtualų kompiuterį. Virtualus kompiuteris – tai programinis kompiuteris, kuris veikia realiame kompiuteryje su kokia nors operacine sistema. Taigi, fiziškai viskas sukasi tikrame serveryje, Windows Server 2012 R2 operacinėje. Jos Hyper-V dalis arba, vadinkim, technologija, skirta kurti ir valdyti virtualiems kompiuteriams. Hyper-V, tai Hyper-V Technology Overview | Microsoft Learn. Virtualaus kompiuterio sukūrimui naudojamas vedlys ir ten viskas paprasta, turbūt svarbiausia pasirinkti atminties kiekius. Pvz, DOSui visai nereikia terabaitinio disko ir 64 GB RAM. Abiem daviau po 512 MB, tai atminties daugiau negu reikia. Vedliui taip pat sušėriau ir DOS instaliacinį failą, ten vienas iš vedlio punktų… Konfigūracinis langas atrodo taip:

Taigi, kai jau turime virtualų PC, paleidžiame jį su Connect, po to Start (ieškokite per meniu). Kompiuteris įsijungė, pradėjo instaliuoti MS-DOS 6.22. Tai nėra sudėtinga, principe irgi viską padaro vedlys. Instaliacijai pasibaigus turi tą tradicinį juodą langą su mirksinčiu kursoriumi. Ir tai viskas, dabar jau galima naršyti po virutalų kompiuterio diską, kurti ar redaguoti failus, dar šį bei tą, bet ne tiek jau ir daug. Neįdomu. Pabandykime pakonfigūruoti DOSą. Tai daroma autoexec.bat ir config.sys failiukais, kurie sukuriami DOS instaliavimo metu. Rašome „edit autoexec.bat”, be kabučių žinoma, ir failas atidaromas redagavimui. Pradžiai surašiau tokius parametrus ir konfigūracijas:

Paanalizuokime, ką čia surašiau:

  • @ECHO OFF – išjungia tekto rašymą į langą
  • loadhigh C:\DOS\SMARTDRV.EXE – Smartdrive.exe užkraunam į aukštesnio lygio atmintį, lygis ne kokybėje ar kad atmintis kokia speciali, tiesiog sumeta programėles į atmintį virš 640KB ir iki 1MB. Smartdrive.exe – programėlė paspartinanti duomenų perdavimą, perkeldama dažnai naudojamus duomenis į RAM.
  • @ECHO SMARTDRV loaded to High Memory – @ECHO rašo mūsų norimą tekstą į langą, šiuo atveju SMARTDRV loaded to High Memory
  • loadhigh c:\apps\doskey.com -i – tas pats leadhigh, tik kitai programėlei. Ties šita vieta reiktų pažymėti, kad doskey.com failiukas ne standartinis iš DOS, o Enhanced Doskey.com iš Enhanced DOSKEY.com — with auto-completion Paul Houle. O pats Doskey.com prideda papildomo funkcionalumo DOSui.
  • PROMPT &p&g – komandinės eilutės išvaizda. Šiuo atveju atrodys va taip C:\DOS>, jeigu būsime DOS direktorijoje.
  • PATH – kartu su papkių adresais nustato kur DOSas turi ieškoti išorinių komandų.
  • Vėl parašome, kad PATH komanda sėkminga.
  • set DIRCMD=/o:gne – dažnai naudojamos DOS komandos DIR rezultato išvaizdos nustatymas. „g” – pradžiai rikiuojamos direktorijos, po to failai, „n” – abėcėlinis rikiavimas, „e” – rodoma failo priesaga.
  • Vėl parašome, kad parametras nustatytas.
  • set TEMP=C:\TEMP – ir taip aišku, nustatomas TEMP direktorijos adresas.
  • ir apie tai parašome su @ECHO.
  • C:\DOS\NET\DC.com – paleidžiame DC.com, paketinio siuntimo tvarkyklė, kurios pagalba bendrausime su kitais kompiuteriais tinkle ar Internete.
  • @ECHO: Tuščia eilutė, tiesiog įterpiu, kad gražiau atrodytų.

Apie DC.com truputį plačiau. Pradžioje dėjau Internete rastas tvarkykles:

Bet ką bedaryčiau, niekas neveikė, DOSas keikėsi ir rašė klaidas:

Kad ir ką bedariau, niekaip nepasileido tas reikalas, principe, dėl to, kad „nematė” virtualaus serverio tinklo kortos, o be jos ryšio nebus. Tweak’inau, šamaninau, paaukojau visą megabaitą BIOSo dievams, niekas nepadėjo. Tada truputį pakeičiau serverio konfigūraciją:

Pridėjau tą pažymėta „Legacy Network adapter” ir sumečiau patį elementariausią draiverį:

Pats elementariausias, tai TCP Packet Driver, nors yra ir Microsoft Network Client skirtas DOSui, bet jo kol kas nenaudosiu. O tas TCP Packet Driver toks bazinis draiveris, tinklo API DOSui, beveik mano bendraamžis, sukurtas 1983. Vienintelis parametras, kurį reikėjo nustatyti – pertraukimo numeris, nustačiau 0x60. Taigi, tinklo korta ir šioks toks ryšys jau įmanomas, tik dar nėra programos, kuri vykdytų kokią nors duomenų siuntimo funkciją. Tam einame čia mTCP TCP/IP applications for DOS PCs ir parsitempiame mTCP paketą. Jame yra viskas ko reikia:

Čia ir bus visos funkcijos, kurias MS-DOS galės daryti Internete/tinkle. Pirma komanda, kurią reikia paleisti – DHCP.EXE. Automatiškai pasigauna tinklą, per DHCP pasiima adresus, susikonfigūruoja, susirašo parametrus į nurodytą failiuką ir tiek. Konfigūravimo aprašymas labai geras, atskiram PDF faile mTCP User Documentation. Įkeliu ir į savo serverį, kad nedingtų, abu PDFai vienodi.

Kai užsikrauna MS-DOS, einame ten, kur guli DHCP.EXE, naudojame elementariausias DOS komandas, pavyzdžiui, mano atveju CD – Change Directory:

  • C:\> CD DOS – einam į DOS direktoriją
  • C:\DOS> CD NET – einam į NET direktoriją
  • C:\DOS\NET> CD MTCP – einam į MTCP direktoriją
  • C:\DOS\NET\MTCP>DHCP.EXE – paleidžiam DHCP.EXE

Ir ties šita vieta išmeta klaidos pranešimą, reikia nurodyti failiuką, į kurį turi surašyti nustatymus. Prieš DHCP.EXE paleidimą rašome komandą set MTCPCFG=[kelias_iki_konfigūracijų_failo]. Konfigūracinį faila galima dėti kur nori, todėl aš pasirinkau MTCP direktoriją ir failo pavadinimą „netcfg.cfg”:

set MTCPCFG=C:\DOS\NET\MTCP\netcfg.cfg, o po to DCHP.EXE ir turime:

Viskas suveikė. Tik LEASE_TIME per mažas, 600 sekundžių, tai 10 minučių. Šitą parametrą pasiėmė iš maršrutizatoriaus ir su netcfg.cfg failiuko konfigūravimo man šito parametro pakeisti nepavyko, nors yra tam skirta komanda. Pakeičiau maršrutizatoriuje. Taigi, dabar įjungus virtualų kompiuterį įsijungia MS-DOS, tada rašome komandą, nustatančią netcfg.cfg failiuko vietą, tada DHCP.EXE ir turime ryšį. Nepatogu kiekvieną kartą tą daryti rankiniu būdu, todėl surašome komandas į autoexec.bat, kad paleidimo metu viską padarytų automatiškai. Viskas kaip ir veikia, bet lange lieka visos tos konfigūracijų ataskaitos, taip sakant, prišiukšlintas ekranas. Noriu, kad prajus užkrovimui, pamačius visas tas ataskaitas, kad viskas OK, ekranas išsivalytų tarkim po 5 sekundžių. Ekrano išvalymo komanda „cls” – CLear Screen, kaip ir yra, bet va palaukti 5 sekundas DOSas nemoka, nėra tokios specialios komandos. Bet apeiname tą trūkumą su kitos, „choice” komandos pagalba. Viską surašome į autoexec.bat, jis dabar atrodo va taip:

  • C:\DOS\NET\DC.COM 0X60 – DC.COM paleidimas su 0x60 pertraukimo numeriu
  • set MTCPCFG=…… – konfigūracinio failiuko nustatytmas
  • Paleidžiame DHCP.EXE, jis surašo visą reikimą informaciją ekrane ir į netcfg.cfg
  • @ECHO: tuščia eilutė.
  • choice /N /C:. /T:.,5 – atrodo kosmiškai, bet realiai čia viskas paprasta. Komanda choice skirta įvesti vartotojo pasirinkimui, pavyzdžiui Yes/No, bet ji turi taimerį, po kurio gali automatiškai parinkti nustatytą pasirinkimą. Taigi, komanduojame choice, /N – opcija, nurodanti, kad nerodytų klausimų (antraip ekrane parašys ką nors tipo „pasirinkite” ar panašiai), /C:. – nurodomas standartinis pasirinkimas, t. y. paspaudus tašką „.” vykdys programą toliau, nelauks taimeryje nurodyto laiko, /T:.,5 – komanda, nurodanti, kad jeigu vartotojas nepadarys jokio pasirinkimo, po 5 sekundžių bus pasirinktas standartinis nustatymas, t.y. taškas. Ir turime tokį pseudo taimerį, kuris 5 sekundes lauks įvedimo, tekstas ekrane nesikeis, o po 5 sekundžių automatiškai įves tašką ir programa važiuos toliau. Tašką galima įvesti ir nelaukus 5 sekundžių.
  • cls – sekanti komanda po 5 sekundžių, išvalo ekraną, numeta kursorių į viršutinį kairį ekrano kampą.
  • Tame kampe parašome MS-DOS 6.22 ready.
  • Praleidžiame eilutę.
  • Ir čia jau mirksi įvedimo kursorius.

Taigi, MS-DOS su tinklo palaikymu paleistas. Bet daugumai turbūt vis dar atmintyje išlikęs dviejų mėlynų langų vaizdas, taip, tai Norton Commander programa, grafinis DOS apvalkalas. Jų buvo ir daugiau, netgi pirmieji Windows buvo tik gražūs DOS apvalkalai. Instaliuojame Norton Commander, tas daroma paprastai, vedlio pagalba, tai neaprašinėsiu. Po instaliavimo, komandinėje eilutėje parašius „nc” įsijungia Norton Commander:

Kol kas tiek žaidimų su MS-DOS.

Windows Sandbox konfigūravimas paprastai 2024.01.10 at 09:50

Dažnokai naudoju gimtąjį Windows Sandbox, dar dažniau užtenka standartinės konfigūracijos, bet Sandbox’ą galima susikonfigūruoti pagal savo poreikius. Radau visai gerą automatinio konfigūravimo įrankį, kurio didžiausias pliusas – jis online, nereikia nieko instaliuoti, tiesiog naršyklėje sužymime ko ir kaip reikia ir parsisiunčiame jau pagamintą paleidimo failiuką su nurodytomis konfigūracijomis.

Konfigūratorius – https://leestevetk.github.io/WSBEditor/WSBEditor-Latest.html

Programinės įrangos licenzijavimas 2023.12.21 at 08:37

Kažkada sugalvojau, kad visai norėčiau apsaugoti savo programėles nuo nelegalaus kopijavimo. Ne tam, kad daugiau pinigų ar kažko gauti, bet tiesiog šiaip, dėl tvarkos. Nu ir – nes galiu 😋. Taigi, tikslas – padaryti, kad programėlė veiktų tik tame kompiuteryje, kuriame aš noriu. Reiškia, kad programėlė turi žinoti kuriame kompiuteryje jai galima veikti, o kuriame negalima. Kaip ir paprasta, bet – o tai kaip programėlė tą sužinos ? Yra keletas variantų, bet jeigu, tarkime apsiribotumėme Windows operacine sistema, tada, mano galva, paprasčiausi yra du būdai – rištis prie procesoriaus ID arba MAC adreso. MACas dar kai kada gali būti keičiamas, procesoriaus ID jau taip paprastai nepakeisi. Jo net standartiniai Windows įrankiai nerodo, bent jau man nepavyko aptikti. Todėl rašome nedidelė programėlę su Visual Studio, kuri tą dalyką sužinos ir mums parodys. Tam reikia parašyti dvi paprastas programėles:

        private string Get_MAC_Id()
        {
            foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (nic.OperationalStatus == OperationalStatus.Up)
                {
                    PhysicalAddress mac = nic.GetPhysicalAddress();
                    currentMacAddress = BitConverter.ToString(mac.GetAddressBytes()).Replace("-", "");
                    break;
                }
            }
            return currentMacAddress;
        }

Šita programėlė suranda aktyvios tinklo kortos MAC adresą ir pagražina jį pagrindinei programai.

        private string GetProcessorId()
        {
            ManagementClass managClass = new ManagementClass("win32_processor");
            ManagementObjectCollection managCollec = managClass.GetInstances();

            foreach (ManagementObject managObj in managCollec)
            {
                cpuInfo = managObj.Properties["processorID"].Value.ToString();
                break;
            }
            return cpuInfo;
        }

O šita programėlė tą patį padaro su CPU ID. Po to belieka tik susidėti tuos duomenis ten, kur mums reikia, pavyzdžiui, į programėlės grafinę sąsają (va kaip lietuviškai parašiau 🙃):

Veikimas paprastas, paleidus programėlę ji iš karto prasuka informacijos surinkimą ir parodo jį atitinkamuose laukeliuose. Vienintelis mygtukas tik uždaro programėlę. Paveiksliuke jau matosi ir mano kompiuterio MAC ir CPU ID. O kodėl reikia dviejų dalykų ? Principe, užtektų ir vieno – CPU ID. Logika paprasta – kompiuteryje gali nebūti jokios tinklo kortos, taigi MAC ID nieko nesugeneruos, o procesorius, nori nenori, o visada bus, todėl galima rištis prie jo ID. Savo programėlėse aš tikrinsiu abu ID ir, jeigu bent vienas atitiks, tuomet programėlė veiks. Programėlėse patikra daroma taip:

        private int get_MAC_Id()
        {
            string predefinedMacAddress = "B07D64766C0E";
            

            foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (nic.OperationalStatus == OperationalStatus.Up)
                {
                    PhysicalAddress mac = nic.GetPhysicalAddress();
                    string currentMacAddress = BitConverter.ToString(mac.GetAddressBytes()).Replace("-", "");

                    if (currentMacAddress.Equals(predefinedMacAddress, StringComparison.OrdinalIgnoreCase))
                    {
                        mac_flag = 1;
                        break; // No need to continue checking if we found a match
                    }
                }
            }
            return mac_flag;
        }

        private int getProcessorId()
        {

            string predefinedcpuInfo = "BFEBFBFF000A0652";
            string cpuInfo = string.Empty;

            ManagementClass managClass = new ManagementClass("win32_processor");
            ManagementObjectCollection managCollec = managClass.GetInstances();

            foreach (ManagementObject managObj in managCollec)
            {
                cpuInfo = managObj.Properties["processorID"].Value.ToString();
                break;
            }
            if (cpuInfo.Equals(predefinedcpuInfo, StringComparison.OrdinalIgnoreCase))
            {
                CpuID_flag = 1;
            }
            return CpuID_flag;
        }

Į pagrindinę programą grąžinamos vėliavėlės (flag), jeigu CPU ID arba MAC ID atitinka programėlėje jau įrašytus – tuomet vėliavėlės bus 1. Tuos vienetus pagauna pagrindinė programa ir padaro paprastą patikrą.

Nepamirštam inicializuoti flag’us :

        int mac_flag = 0;
        int CpuID_flag = 0;
Tuomet kažkur kode, ten kur norime patikros:
            get_MAC_Id();
            getProcessorId();
            if (mac_flag == 1 || CpuID_flag == 1)
            {
                // Darome tą, ką reikia, jeigu ID atitinka. Loginis "arba" || leis veikti jeigu bent vienas flag'as = 1, jeigu naudoti loginį "ir" && tuomet leis veikti tik jeigu abu flag'ai bus vienetukai.
            }
            else
            {
                MessageBox.Show("Contact creator of this program.", "Error", MessageBoxButtons.OK);
            }

O čia Visual Studio failiukai, išeitinis kodas, sukompiliuotas exec’as.

Igničio elektros kainos piginimas 2023.12.05 at 08:59

Elektros kainos vis dar „mažėja” 😁. Jau rašiau apie Igničio kainas:

2023.05.03 — 0,263 €/kWh
2023.06.01 — 0,276 €/kWh

Šiandien gaunu laišką, kurio pagrindinė mintis:

Va čia tai kainos mažėjimas 🤤. Ir aišku, tame pat laiške daug pasiteisinimų, kad „čia ne mes kalti, o aplinka”:

Saulės elektrinė 2023.11.10 at 15:41

Šiandien tapau truputį „žalesnis” – įjungiau Saulės elektrinę:

Darbai pradėti 2023 balandžio mėnesį, pirmieji žingsniai – galios didinimas nuo buvusių 6 kW iki 10 kW, daryta per ESO savitarną, lygiagrečiai užregistruotas kompensacijos prašymas pas APVĄ. Toliau gaminančio vartotojo prijungimas, irgi per ESO savitarną. Per tą laiką APVA patvirtino kompensaciją, todėl pradėti realūs montavimo darbai – inverteris Huawei SUN2000-3-10KTL-M1 ir Hyundai HiE-S430-445HG(FB) Saulės panelės. Viskas sumontuota ir šiandien atėjo ESO pranešimas, kad elektros skaitliukas suprogramuotas matavimui į abi puses, todėl galima prijungti elektrinę. Voila 😁.

Dviračio akumuliatoriaus Samsung SDI-3610B remontas 2023.09.17 at 13:18

Šiandien pabandykime pasinagrinėti Samsung SDI-3610B akumuliatorių su gedimu.

Gedimas tame, kad jis neveikia, bet taip visiškai, nei išėjimas yra, nei diagnostiniai įkrovimo indikatoriai šviečia. Pirma mintis žinoma mirę celės, o gal tik išsibalansavę. Bet viltis durnių motina, negali mums čia ant tiek sektis, todėl pradžioje ardome. Pats akumuliatorius visai ne mažas, ir sveria padoriai:

Užmačiau tokio akumuliatoriaus kainą Amazon parduotuvėje, 300-400 €, visai neblogai taip.

Išardžius vaizdelis nenustebimo, kaip visada, krūva celių, BMSas (Battery Management System) su termistoriumi ir viskas. Šiaip pats BMSas gan bukokas, iš Samsungo gal tikėčiausi daugiau.

Abi BMSo pusės. Viršutinė pusė kairėje, atsukus ją nuo korpuso pasimato ir apatinė pusė (dešinėje). Trumpai apie tai, ką mes čia matome. Viršutinėje pusėje du lygiagretinti jėgos tranzistoriai STB140NF75, prijungiantys minusą, kai su baterija viskas gerai, šalia mažiukas tranzistoriukas IRFR540Z – krovimui. Per vidurį komunikacijos jungtis, bet normaliam darbui ji nenaudojama, todėl spėju, kad skirta tik užprogramuoti valdiklius gamybos metu. Galbūt ir diagnostikai, jeigu akumuliatorius patenka į autorizuotą Samsung servisą. Ir visa kita smulkmė, apie kurią kol kas neverta rašyti. Kitoje pusėje didelis juodas blynas OKI L5208, BMS valdiklis. Apie jį daug informacijos neradau, tik forumuose probėgšmais užsimenama, kad jį iš OKI nupirko forma Lapis, iš jos Rohm Semiconductor. Aprašymo neturiu, taigi – nepasidalinsiu… Ok, tada mažesnis juodas blyniukas Renesas R2J24020F020, valdiklis su 16 bitų R8C procesoriumi. Jis, principe, ir turėtų daryti visą darbą, bet, turbūt, jis neturi kur prisijungti 10S tipo baterijų, tarkim, gali prisijungti tik 4S, todėl L5208 atlieka visą darbą su 10S baterija ir raportuoja valdikliui. Pats mažisuias, SOIC-8 aštuonkojis, tai Maxim Integrated MAX5024LASA+ įtampos reguliatorius, valgantis net iki +65VDC ir gaminantis iš jų 3,3V. 5V arba 2,5-11V (su papildomais rezistoriais).

Apie pagrindinius elementus tiek, toliau klausimas kodėl jie neveikia. Matavimai parodė, kad visos celės yra pakrautos ir balansavimas teisingas, bet valdiklių įtampos vis tiek nėra. Bandome prisiknisti prie to MAX5024 reguliatoriaus, jis kaip ir turėtų gaminti reikiamą įtampą visiems valdikliams, logikai ir t.t.

Štai tas MAX reguliatorius, pažymėtas U3. Analizuojam veikimą – takelis, pažymėtas P+ gauna maitinimą per prilituotą laidą, kuris per srovę ribojantį rezistorių R167 (330R) patenką į MAX’o pirmą kontaktą. Ok, žiūrim aprašymą:

Pirmas kontaktas ir yra maitinimo įėjimas – matuojam ir matom čia 40 su trupučių Voltų. Tai maitinimas yra. Kažkaip spėčiau, kad tas OUR prie 8 kontakto turėtų būti maitinimo išėjimas, bet jo nėra. Čia matome tik 0,6V, o tiek yra akivaizdžiai per mažai visai gaujai alkanų mikroschemų. Taigi, maitinimas ateina, bet reguliatorius nieko nereguliuoja, todėl išėjime tokia įtampa. Trumpo išėjime nėra, jei ką, patikrinau 🙂. Nuo šitos vietos galima viską daryti vyriškai (viską su3,14sti, o paskui skaityti datašytą) arba iš karto paskaityti mikroschemos aprašymą. Taigi, pradžiai tipinė jungimo schema:

Ją pamačius kyla natūralus klausimas – o tai kokia ta išėjimo įtampa ? Matuojame varžas ir turime, kad R1=69,5K, o R2=21,38K. Skaičiuojam:

\[ V_{OUT} = V_{SET} ( 1+\frac{R1}{R2}) \]
\[ V_{OUT} = 1,248V ( 1+\frac{69,5K}{21,38K}) = 5,30V\]

Taigi, stabilizatorius turėtų gaminti apie 5V, apie – nes matavimas nėra tikslus, varžos irgi ne 1% tikslumo. Bet mums to užtenka, kad įsitikinti – 0,6V yra per mažai. Tai kodėl jis neveikia ? Galima būtų eiti bandymo keliu ir pakeisti stabilizatorių, tikintis, kad čia jis biškį pasprogo, bet tokio stabilizatoriaus po ranka nėra, o užsakinėti ir laukti užtruks, todėl ir vėl teks įjungti smegenis. Schemoje matome kontaktą, pažymėtą „EN”. Logika jau ne ne kužda, o grynai spardo į kepenis, kad čia įjungimo (ENable) kontaktas. Patikrinkime, kas jame gyvena. Visų prima vėl darome ne vyriškai – skaitome aprašymą. Taigi, mikroschema veikia, kai EN kontakte gyvena daugiau nei 2,4V, o daugiausia ten gali būti įėjimo įtampa ±0,3V, tai mūsų atveju panašiai 40V ±0,3V (šiaip dzin tie 0,3V krypavimai, kai matuojam net 40V). Matuojam – ir nieko nėra. Tai nėra ko stebėtis, kad MAXas neveikia, kai niekas jo nebaksnoja į šoną tai jis ir tinginiauja. OK, teks aiškintis, kas jam tą ENable signalą generuoja. Matuojam, dar biškį matuojam, žiūrim per lupą, pamurmam necenzūrinių burtažodžių, ir finale piešiam va tokią schemą:

Taigi, mūsų ENable signalo nėra, tuščia ir ant specialaus testavimo paduko TP15. O vat matuojant tranzistorių Q11 bazės įtampa 3,3 V, emiterio įtampa irgi 3,3 V. Kas per tranzistorius – neaišku, jokios markiruotės, todėl poliarumą tik spėjau pagal pajungimą. Taigi, jeigu bazės įtampa yra 3,3 V – tranzistorius uždarytas, todėl nėra ENable signalo. Kad tranzistorius atsidarytų, bazei reikia žemo lygio, 0 V. Kodėl jo nėra ? Žemą arba aukštą lygį tranzistoriaus bazei duoda U7 mikroschema. U7 – tai du loginiai NAND elementai viename korpuse:

O dabar matosi, kad reikai dar paanalizuoti schemą, todėl braižome ir matuojame:

Ir tuo pačiu iš schemos matosi, kad iš tų dviejų NAND loginių elementų yra suformuotas SR jungiklis (SR Latch arba SetReset Latch), kurio tipinė schema ir teisingumo lentelė yra tokia*:

Tokio tipo SR jungikliai valdomi žemu lygiu, t. y. didžiąją dalį laiko S ir R yra aukšto lygio, o prireikus atlikti Set arba Reset veiksmą į atitinkamą kontaktą paduodamas žemas lygis. Taigi, jeigu mūsų tranzistorius prijungtas prie Q̄, tuomet visi įtampų matavimai atitinka, ir, kad Q̄ būtų žemo lygio reikia paduoti žemą lygį į R įėjimą arba 2B kontaktą mikroschemoje. Tai kodėl kažkas to žemo lygio nepaduoda? Aiškinamės toliau.

Taigi, tranzistoriaus Q12 (SSM3K01F) atidarymas prijungia žemą lygį 2B įėjimui ir tuo turėtų padaryti žemą lygį Q̄ išėjime. Bet matyt niekas to tranzistoriaus neatidaro ir dėl to nevyksta baterijos įtampos paleidimas. Et, ok, važiuojam toliau, reikia išsiaiškinti, kad tą tranzistorių valdo, nes jis visgi geras – „rankiniu” būdu maktelėjus jo užtūrą į 3,36 V baterija pasileidžia ir išėjime turim 40 V. O valdo jį toks daugiakojis R2J240. Papildome schemą:

Tranzistorius valdomas iš mikroschemos U20 43 kontakto:

Štai ir priėjome liepto, t. y. schemos galą. Valdymas eina iš R2J240 valdiklio, o visa analoginė grandinė yra sveika. Aišku, turint valdiklio aprašymą ir programą (arba bent jau jos aprašymą), būtų galima galvoti, kas tam valdikliui netinka, kad jis nepaleidžia likusios grandinės dalies, o dabar neturiu kaip tikrinti ar išpildomos reikiamos sąlygos paleidimui, jei išpildomos tai blogas valdiklis, jei neišpildomos – kodėl ir ką padaryti, kad jos būtų išpildytos ir valdiklis paleistų likusią schemos dalį.

Taigi, galima būtų daryti išvadą, kad R2J240 valdiklis dėl tik jam vienam žinomų priežasčių užsiblokavo. Ar tai jau pabaiga ? O gal pabandom pažaisti su šitais kontakčiukais:

Ok, visgi užsisakiau tokį žaisliuką: CY3689 – Infineon Technologies. Programuojamas valdiklis, kurio pagalba galima gauti daug visokių komunikacinių galimybių, tame tarpe ir SMBus. Kai atvažiuos pabandysiu, gal pavyks nuresetuoti batareiką 🙂 .

Ličio jonų akumuliatorių remonto taisyklės at 12:28

Dirbdamas vis atrandu naujų taisyklių, kurių reiktų laikytis, remontuojant baterijas arba keičiant Ličio jonų elementus naujais. Bandysiu jas rašyti čia, kad pats ilgainiui nepamirščiau arba būtų kur pasižiūrėti.

  1. Ličio jonų elementus numontuojame / nulituojame nuo galinio pliusinio kontakto ir atjunginėjame paeiliui link galinio minuso kontakto. Sumontuojant / sulituojant elementus jungiame nuo galinio minusinio kontakto ir einame link galinio pliusinio kontakto.
  2. Akumuliatorių valdiklio „pažadinimas” iš budinčio režimo atliekamas trumpam sujungiant akumuliatoriaus paskutinės celės pliusą su baterijos išėjimo pliusiniu kontaktu.