O, tai tik dalelė nesąmonių kur taškomas biudžetas:
Mini tesla coil. Tikriausiai veikia radio dažniu. Degina pirštus. Kaina- 1.91€ viso.
Continue reading →
O, tai tik dalelė nesąmonių kur taškomas biudžetas:
Mini tesla coil. Tikriausiai veikia radio dažniu. Degina pirštus. Kaina- 1.91€ viso.
Continue reading →
Tai projektas kuris pilnai užstrigo dėl mano neprofesionalumo ir dėl dokumentacijos trūkumo. Užduotis- konvertuoti vieną iš STM32CubeMX projektų į printerio klasę (Printer Class). Tam reikalui panaudojau CDC klasę ir perdariau pagal savo seną AVR projektą į printerio klasę. Ir jis, rupužė, neveikia taip kaip reikia.
Ką daro publikuotas projektas:
Kad atkartoti projektą, reikia pradėti STM32CubeMX su USB ir CDC klase. Poto, viską CDC pašalinti ir sudėti mano source. Kas svarbu- “midlevares”- klasė “PRINTER”. Pagrindiniam “src”: usbd_princer_if.c – printerio ryšis su USB, usbd_conf ir usb_desc – ne pilnai išvalyti nuo CDC klasės ir kiek pribūrta dėl MS deskriptoriaus.
Tačiau jei laikyti kodą teisingu, tai useriui reikalingas tik vienas failas- printer_hardware.c. Tai pats fizinis spausdinimas. Šiuo metu nuvestas į USARTą. Prisijungus išorinį UART (COM adapterį) galima lengvai debuginti ir monitorinti kas vyksta.
Dėmesio! Nepergeneruokit kubiko kodo, nes nužudys kai kuriuos failus.
Download STM32CubeMX USB PRINTER CLASS demo code (source and compiled hex for bluepill STM32F103C8.
Kodėl tai sunkiai einasi ir kodėl dedu nepilną kodą? Todėl, kad nėra free programų, kurie lengvai analizuotu kas vyksta ant USB. Todėl, kad dokumentacijos labai mažai- daug kas rašo kodą ir daro aparačiukus kurie naudoją printerius, tačiau visiškai niekas nedaro pačių printerių. Todėl, kad USB.ORG tik apibrėžė klasę, o realiam pasaulyje tiek microsoftas, tie obuolys, tie printerių gamintojai prisigalvojo savo “piblūdų ir navarotų” kuriuos mažai kur viešai publikavo. Ir dar aišku, visiškai nėra laiko tokiems žaidimams, o ir šiaip, nėra tiek žinių, kad greitai perprasti svetimą kodą. Ypač kai kodą rašo narkomanai- vien ko vertas STM inžinierių “universalus” metodas bendrauti tarp usb device, usb interface ir userio kodo per pointerius ir pointerių struktūras. Ar pointerių struktūrų pointerius struktūruose per pointerius ar panašiai 🙂 (gi narkomanai rašė).
O postinu, kad kiti gal pasinaudos, o ir pats turėsiu rezervinę kopiją.
Fotkinimas su mobiliu telefonus tai trendas, tačiau fotkinimas su kokiu nors Fuji Instax irgi jau laikyčiau trendu tarp hipsteriu. Tačiau jei hipsteris turi smegenų ir biški pakaupęs elektroninio gėrio… (Nu, yra toks žanras, fantastika vadinasi. Nes kad hipsteris turėtu smegenų… 😛 ).
Taigi, jei netikras hipsteris nori iškristi iš trendo ir daryti tokias “insta” nuotraukas:
Vieni renka markutes, kiti sprendžia kryžiažodžius. O man kartais patinka pajungti kokį nesąmoningą prietaisą ir sužinoti kaip jis veikia. Šį kartą radau Citizen CX-123II kalkuliatorių. Toks kalkuliatorius moka spausdinti skaičiukus ant popieriaus juostos. O kaip gi tokio “printerio” neprijungus prie kokio nors mikrokontrolerio.
Visi kažkaip mano, kad obuoliai visada buvo stilingi ir dizaino pradininkai. Tačiau užtenka pažiūrėti į kitus to meto kompiuterius ir supranti, kad tada dizainas buvo kažkoks drąsesnis. Nelyginus aš super brangius kompiuterius iš SGI serijos. Pažiūrėkim į to meto flagmaną- Atari:
Tai mano turimi eksponatai. Dar kiek žinau vienas specifinis printeris, touchpadas, kasetinis skaitytuvas ir Atari 1200XL. Kolekcija kol kas ne pilna.
Bet tikrai matosi 80′ metų stiliukas, kai viskas buvo drasu.
Deja, abu printeriai neveikia dėl plastiko senėjimo. Tačiau diskasukis puikiausiai veikia ir skaito senus diskelius.
Nežinau ar tie purpuriniai LED kažkiek padeda žaliems augalams. Ir kažkaip nekilo ranka investuoti pinigus tokiom lempom. Tačiau prieš kelias dienas viena Lietuvos firma utilizavo kalną LED produkcijos ir ten buvo keletas tokių prožektorių. Dalis LED šviestuvų suveikdavo, tačiau po kelių minučių pradėdavo mirksėti ar mirgėti. Ir kai taip vyksta, manau visi šio blogo skaitytojai žino kas ten kaltas- kondensatoriai.
Patys žibintai nežinomos galios, pardavėjas deklaruoja 13W (kaina 34€). LED matricoje dviejų rušių- mėlyni ir kažkokie su liuminiforu. Radiatoriai dideli, bet kontaktas tarp LED Al plokštelės ir radiatoriaus minimalus.
Continue reading →
Fazendoje kabinau šviestuvus. O ten, visur kur sena instaliacija, išvedžiota aliumininiais laidais. Per 40 metų tie laidai pasidarė trapūs, o izoliacija sukietėjo iki standaus plastiko. Todėl ten, kur neišvedžioti nauji variniai laidai, naudoju laidų junges. kažkaip nepagalvojau apie jas nieko blogo, tik jungdamas pastebėjau, kad jos nepatogios. O kartais patogios. Pasirodo, jos, nors ir skirtos to pačio storio laidams, turi esminį skirtumą:
Kairėje “blogosios”, tikriausiai pirktos senukuose ar dar kur nors, o dešinėje, “gerosios”- išluptos iš kažkokio prietaiso ar šiaip, trofėjinės.
Atrodo minimalus skirtumas atstume tarp varžtelių, bet kaip viskas iš esmės skiriasi. Šiaip, jei jungi kažkokius vienalyčius laidus, tai laida perkiši per abu varžtelius (jei leidžia storis). O jei staiga jungi skirtingo storio (nebetelpa du laidai) ar net skirtingų metalų laidus? Kiek tvirčiau laikosi dešininis variantas, ypač jei jungę suki pasistiebęs palubėje? Kai jungęs centre nėra “vidurio” ribotuvo? Kai laidą kiek perkiši ir kitas nebe prisisuka?
Kodėl gaminamos blogosios? Pagalvokit, kiek susitaupo metalo gaminant “biliardus” vienetų.
Pilnas internetas “arduininstų” projektų su kiniškais talpuminiais dirvos drėgmės jutikliais (capacitive soil moisture sensor v1.2). Vieniems kaip ir veikia, kitiems neveikia. Kiti gauna randominius parodymus. Eksperimentui nupirkau vieną ir pradėjau analizuotis. Ir jei pavyks, gal patobulinsim.
Tai juodos spalvos PCB, strėlės formos, elektronika visiškai neapsaugoti nuo išorinių poveikių.
Pati schema nėra sudėtinga, aš tingėjau analizuotis, bet spėtinai tokia (internetuose vaikšto biški kogero su klaidom. Rezikas ne toks, sujungimo lygtai vieno nėra):
(schema supaprastinta)
Mano turimas variantas, nestabiliai veikė- osciloskopas parodė, kad taimeris kartais pastringa. Tačiau pagrindinis dažnis buvo kažkur 1.7MHz (prie 5V), prie 3V kažkaip neveikė.
Kaip viskas veikia- AC įtampa, iš taimerio per R1 įtampos/srovės ribotuvą patenką į “jutiklinį” kondensatorių, o diodas D1 nuimą sukauptą DC potencialą nuo jutiklio kur gauta įtampą kaupiama C3 kondensatoriuje ir tolygiai iškraunama per apkrovą R2 (vienas megaomas, sako kartais jo nebūna).
Kokios bėdos- pas mane, taimeris nestabiliai veikė. Todėl nėra stabilumo išėjimo įtampoje. Taip pat neveikia prie 3V.
O pats matavimas visiška nesamonė- tai milžiniškos (megaomas!) varžos įtampos daliklis kuris tiesiogiai jungiasi prie MCU ADC. Ne visi MCU turi vienodus analoginius įėjimus- ADC įėjimo parametrai tai gali būti bet kokie. Megaominis įtampos daliklis nuogas- bet koks užteršimas ir parametrai pavažiuos. Taip pat jungiamieji laidai negali būti ilgi, o kontaktai blogi.
Diodas D1 tikriausiai “generic” silicio, čia nemanau, kad dėjo kokį nors detektorinį, nors negaliu patikrinti.
Ką galima pakeisti- pirmiausia, paleisti nuo 3V (šiuolaikiniai gi MCU), o ir naudojant nuo 5V sistemos, geriau statyti lokalų stabilizatorių (ten numatyta vieta, kur kreivai stovi rezistorius). Iš taimerio turi gautis stabilus meandras. Dažnis neturi plaukioti. Gal net kvarcą prisukti? Nežinau.
Išėjimo grandinę reikia tobulinti: arba statyti mažyti operacinį stiprintuvą (kartotuvą) ir jo žemo impendanso išėjimą jau naudoti su MCU ADC, ar net konvertuoti įtampą į srovę- tada MCU ir jutiklio laidas gali būti bet koks.
Apsaugoti visą PCB laku (gal net epoksidiniu). Papildomas sluoksnis reikalingas prie 555 taimerio, nes čia papildomos talpos gali paveikti generatoriaus dažnį.
O jei daryti rimčiau- visą detektorių, o tiksliau AC voltmetrą daryti su operaciniu stiprintuvų naudojant klasikines schemas. O gal daryti, kad Cx keistu generatoriaus dažnį ir tą dažnį matuoti su MCU?
Turim tokį grieką, kad kai žaidžiam žaidimus, žiūrom kokia pornografiją ar šiaip, ir staiga pastebim, kad jau gili naktis. Aišku kažkur yra laikrodukas lentynoje, bet geriau prisukti palei nosį, kad rodytu tuščiai praleistą laiką. 🙂
Tai DIY RTC laikroduko eksperimentas su pačiais pigiausiai komponentais. Kaip tik susirinkti ir ištestuoti. Kogero sunkiausiai bus padaryti korpusą:
Tai laikrodis, kuris nusistato per USB (jokių mygtukų), rodo laiką ir laiką nuo paskutinio įjungimo (uptime). Kadangi maitinasi iš USB, tai rodo kiek laiko pajungtas kompiuteris.
Schema paprasta- “blue pill” modulis, OLED modulis, du rezistoriai po 4K7 ant I2C buso, vienas rodos 270R nuosekliai 1N4148 diodui- krauti super kondensatorių ir aišku pats kondensatorius.
Laikas nusistato per USB. Reikia sužinoti kokį COM portą emuliuoja laikrodis. Pas mane COM12. Tada į tą portą pasiunčiam laiko tekstą. Su windows darosi su keistoką komandą bat faile (yra archyve):
set /p x=%TIME% <nul >\\.\COM12
Kodėl taip keistai? Klauskit Billo. Realiai ši komanda veikia su “nestandartiniais” COM porto numeriais ir nesiunčią jokių CRLF. Gal su Linux gautusi paprasčiau. Nėra to kubiko USB įrenginys labai stabilus, todėl jei kas, darykite kaip tikri kompiuterastai: išjungiam ir įjungiam.
Aišku visi failai ir CubeMX projektas:
STM32F103 RTC OLED USB source code and hex..
P.S. vietoje super kondiko galima įdėti 3V batareiką.
Tai labai trumpa žinutė, nes ST gudručiai ir kubiko programeriai pasistengė, kad gautusi sudėtingiau. O aš poto užmiršiu jei neužrašysiu.
Kad RTC (realaus laiko laikrodis) veiktu su STM32CubeMX paketu reikia daryti taip:
Susirandam “MX_RTC_Init(void)“, skrolinam iki komentaro “USER CODE BEGIN Check_RTC_BKUP“. Ten nuskaitom vieną iš vartotojui prieinamu “backup” reikšmių ir atidarom “IF”:
/* USER CODE BEGIN Check_RTC_BKUP */
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!= 0x5051)
{
/* USER CODE END Check_RTC_BKUP */
Skaičius “0x5051” gali būtu bet koks, svarbu kad jis nesigautu atsitiktinai sutampantis su tikrai pilno MCU starto skaičium.
Poto paskrolinam daug kodo su RTC inicializacija…
/* USER CODE BEGIN RTC_Init 2 */
} // Kitame user code virsuje yra IF komanda. Čia ji užsidaro.
else
{
// LAIKAS BUVO ISSAUGOTAS, NES USER REGISTRAS TURI MAGIC skaiciu 0x5051
// Čia galima ką nors padaryti iš tos laimės arba pagalvoti apie kalendoriaus atstatymą. Sako kad jis nelabai
}//Čia įrašom tą MAGIC skaičių. Jis po pilno reseto ir RTC mirties turi neišlikti.
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x5051);//Write data to the specified backing area register
/* USER CODE END RTC_Init 2 */
Taip padaryta, kad useris aklai nepasitikėtu RTC veikimu ir tikrintu RAM išlikimą. Kai kuriuose forumuose rekomenduoja paprasčiausiai nutraukti RTC inicializacija su return komanda. Tačiau reikia daryti taip, kaip parašiau- pasitikrinam ar RAM išlaikė realius skaičius ir tik tada sakom, kad RTC korektiškai veikė kol procesorius stovėjo išjungtas. Jei RTC mirė, mirė ir jo RAM. Tada starto metu, žinom, kad laikrodis rodo nesamones.
P.S. Jei norim sekundinio pertraukimo, tai reikia paleisti kur nors RTC init gale šitą makrosą:
__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC);