Filosofinis stogo betonavimas

Pabambėsim apie stogus, betonavimą ir laiko praleidimą. Priešistorė- mano fazendoje, kurioje pragyvenu pusę metų yra gana didelis balkonas ir kartu verandos stogas. Visą gyvenimą jis buvo užteptas smala ir kažkokiu ruberoidu. Ir nelabai naudojamas, nes smala tepdavo kojas ir šiaip kažkaip nesmagu. Laikas nuo laiko stogas buvo remontuojamas- kai kur patepamas bitumas, kai kur užklijuojamas naujas sluoksniukas. Kai kuriose vietoje aš vėliau suskaičiau virš septynių sluoksnių. Tai po truputi praėjo gana daug metų (40…50) ir žiemos metu pradėjo bėgti juodas vanduo per lubas. Vasaros metu, net ir per didžiausias audras vanduo nebėgo. Tačiau juodas smalingas vanduo terlioja lubas, grindis ir visokius baldus. Todėl šiais metais, stogo remonto projektas užlindo prieš visus kitus. Kanalizacijai ir saulės elementams teko pasitraukti, o stogo lupimas pasidarė pirmaeilis dalykas.

stogas terasa
Continue reading →

Vasara 2023

Vėl vidurvasaris, tai laikas straipsniukui apie bet ką, kas vyksta šiuo metu pas mumi. Pradedam nuo gamtos:

zaltys
Šis gyvačiukas (žaltys) pasiklydo ir pasislėpė darbe, baloje prie laboratorijos. Jis visiškai mažiukas. Pas mus, darbe yra nenaudojamas technologinis prūdas. Jame knibžda gyvybė- žuvys, varlės ir visokia smulkmė. Niekas nežino gylio ir kas ten priskandinta. Ten buvo rąstų mirkymo baseinas. Šalia yra Nemunas, pievos, krūmynai. Žodžiu gamta. Ir kiekvienais metais vietiniai žalčiai prisigamina vaikučių. Dalis vaikučių pasiklysta ir miršta nuo išdžiuvimo ar nuo automobilių. Tačiau laiku surastas gyvačiukas transportuojamas į gamtiškesnę vietą.
Continue reading →

5G skiepai nesuveikė

Mano Fazendoje internetas tik mobilus ir nėra labai geras. Nors technologijos gal ir tobulinamos, bet vistiek manau, kad iki bazinės stoties niekas geresnių optikų nepritempė. O ir bazinių stočių kogero daugiau nepastatė.
Visi čia reklamavo, kad 5G mobilus internetas bus kosTmosas ir viskas bus gerai. Nu, sulaukėm ir toje pat vietoje, su tuom pačiu interneto-mobilaus ryšio tiekėju, ir beveik tuo pat metu padarėm eksperimentą:

Bite 5G lagina

Bite 5G lagina

Prietaisiukai: 4G ryšiui- Samsung S9. 5G ryšiui- Samsung S21. Interneto serveris į kurį matavome – Lietuvoje.

Taigi, daug šnekų, bet internetas pyyyš. Beja, 5G patalpoje buvo dar prastesnis- geležinis stogas kiek ekranavo. Jei matuoti “pagaliukais” tai 5G turėjo 75% pagaliukų! Vadinasi 5G tinkamas tik VAKSERIAMS valdyti. Tik niekšai dar nevaldo…

Labai norėčiau, kad kiti skiepyti ir neskiepyti 5G vartotojai pasidalintu savo interneto pokyčiais.

https://www.speedtest.net/result/a/9357647462
https://www.speedtest.net/result/a/9357648686

Ir vėl projektorius

Turiu aš tokį fetišą- man patinka visokie chromatiniai stikliukai, padidinimo ir mažinimo stiklai. Todėl visada renku projektorius. Dažnai projektoriai būna veikiantys arba beveik veikiantys. Bet man reikia stikliukų…

O dabar jau tikimybė, kad galima išimti stikliukus per daug nesijaudinant, kad gadinamas geras daiGtas.

AM radija vs kompiuteris ir FCC

Grįžtam atgal į tuos laikus, kai maždaug aš gimiau. Buitinis kompiuteris dar tik formavosi, o AM radijos dar karaliavo eteryje. Kas bendro? Ogi senoviški procesoriai dirbo apie 1MHz dažniu, vadinasi duomenų ir adresų šynos veikė bet kokiais dažniais mažesniais už 1MHz, o harmonikos buvo kaip tik didesnės nei 1MHz. Iš esmės, toks kompiuteris buvo chaotiškas siuntikas… Ir neekranuotas kompiuteris pilnai užgoždavo silpnas radijo stotis.
Dabar mintimis persikeliam į JAV ir žiūrom ką daro ponas Vozniakas- jis konstruoja kompiuterį, tačiau jam FCC sertifikacijos nedaro, nes tai “office equipment” ir šiam kompui reikia specialaus monitoriaus. Aišku, galima nueiti pas Vozniako kaimyną, ir ten įsigyti TV moduliatorių. Tačiau Apple tai oficialiai nesijungia prie TV. (Tais laikais net amerikoje televizoriai neturėjo video įėjimo). Jei norėtume parduoti šį prietaisą masėms, reikia TV pajungimo. O čia išlenda seni perdūnai iš FCC ir reikalauja, kad kompas netrukdytu radijom ir televizoriams. Dar baisiau, kad gaminant pirmąjį Atarį, dar niekas nežinojo kas ir kaips bus. Todėl…

aliumas
(CO14015 ar tai C014015)

Tai Atari 400, pirmos laidos ekranuojantis korpusas!
Continue reading →

ARM46: WS2812 RBG LED juostelė kitaip

Prieš septynius metus rašiau apie WS2812 RGB LED juostelę ir kaip ją valdyti su AVR. Naujam projektui kilo mintis panaudoti minėtus diodus pašvietimui. Tingėjau rašyti savo programą LED valdymui, tai pažiūrėjau internetuose kaip rekomenduoja STM32 procikui. Ir pirmieji pavyzdukai buvo su taimeriu, PWM ir pertraukimais. Kažkaip griozdiškai viskas atrodė ir dar mano projekte sunaudoti visi PWM signalai.

RGB LED W2812
(fotkė vogta iš interneto, vėliau pakeisiu)

O gal panaudoti tokius:
LEDas
Turiu visą špūlę tik nežinau kas tai.

Kiek paguglinau giliau ir radau elegantišką sprendimą su SPI. Netgi galimas DMA variantas. Man tereikia valdyti tik 6 diodus, tai DMA nenaudosim. Tiesa, po šio sprendimo lieka SPI CLK koja nepanaudojama. O ir pats SPI sunaudojamas. Principas tame, kad reikiamus signalo intervalus suformuojam su keliais bitais baite. Poto užtenka buferį išpumpuoti per SPI ir WS2812 pilnai viską supranta.
Metodas pilnai vogtas iš interneto, todėl va kopyraitas: “© 2008 – 2022 Martin van der Werff · Groningen, The Netherlands.”. Originalaus puslapio adresas: https://www.newinnovations.nl/post/controlling-ws2812-and-ws2812b-using-only-stm32-spi/.

Failiukai, jei nesinori pačiam spausdinti arba jei originalus puslapis dings: WS2812 SPI gcc C.

ARM45: CAN bus

Iš archyvo ištraukiau “motininę PCB” su nesupjaustytom schemutėm. Tai husqvarnos išmanios žoliapjovės “loop sensor” plokštė. Dabar tas “loop” visiškai nedomina. Prilituojam USB lizdą ir bandom suprogramuoti CAN protokolo siuntėją ir gavėją.
husqvarna loop sensor can usb board

PCB numatytas maitinimas iš CAN jungties, todėl norint maitinti iš USB, reikia pajugti papildomą laidelį. Visą kitą paliekam kaip buvo. Iš aiškių elementų: Texas Instruments TCAN330 čipas ir SPI EEPROM, toliau komparatorius, analoginis multipleksorius ir keletas tranzistorių. Loop ryšiui- ritė laido juodame korpuse.

husqvarna loop sensor can usb board
Perdaryta plokštė jau su ISP jungtimi ir sujungta į grupę per CAN laidus (laidinio telefono kabelis).

USB CAN schema STM32F
Procesoriukas (STM32F302CCT6) turi “hardwarinį” CAN, tai dar ir panaudojus CubeMX sukurtą skeletą darbo nelieka daug. Ryšiui su išoriniu pasauliu nutariau panaudoti USB CDC (serial) įrenginį. Kad viskas veiktu, procesoriaus CLK turi būti kiek aukštesnis nei pagal nutylėjimą sugeneruoja kubikas. Aš pasirinkau 72MHz, maksimumą. Dar, kad nesipjautų pertraukimai, CAN RX1 kiek pažeminau prioritetuose iki “1”.

Apie softą:
CAN siuntimui naudojam HAL paprogramę HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox). TxHeaderyje nurodom kam siunčia ir kokio tipo paketas. TxData- tai max 8 baitai duomenų. TxMailbox- nežinau kas tai, teoriškai “pašto dėžutė” kurioje kabo paketas, kol nėra pristatytas. Kaip jis veikia nežinau ir nesvarbu.

CAN paketo priėmimas kiek įdomesnis. MCU turi kažkiek “hardwarinio” spartinimo, todėl paketų filtrą ir priėmimą galima automatizuoti. Pats priėmimas geriausiai veikia per pertraukimą- gaunam paketą, jį priima ir pakelia vėliavėlę. O toliau jau softas rūpinasi kas bus toliau.
Todėl pirma reikia sukonfiguruoti paketų filtrą:

void can_filter(void) //CAN filtas- tai hardwarinis (softwarinis) paketu filtras, kad duomenys eitu tik reikalingi.
{
CAN_FilterTypeDef canfilterconfig;

canfilterconfig.FilterActivation = CAN_FILTER_ENABLE;
canfilterconfig.FilterBank = 10; // which filter bank to use from the assigned ones??? Kodėl?
//canfilterconfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; //Ziureti kuris yra. Šits kažko neveikė
canfilterconfig.FilterFIFOAssignment = CAN_FILTER_FIFO1; //O šitas jau veikia.
canfilterconfig.FilterIdHigh = CAN_ID_RX << 5;
canfilterconfig.FilterIdLow = 0;
canfilterconfig.FilterMaskIdHigh = CAN_ID_RX << 5;
canfilterconfig.FilterMaskIdLow = 0x0000;
canfilterconfig.FilterMode = CAN_FILTERMODE_IDMASK;
canfilterconfig.FilterScale = CAN_FILTERSCALE_32BIT;
canfilterconfig.SlaveStartFilterBank = 0; // how many filters to assign to the CAN1 (master can)
// doesn't matter in single can controllers
HAL_CAN_ConfigFilter(&hcan, &canfilterconfig);
}

Čia yra niuansų- CAN_FILTER_FIFO0 ir FIFO1.

Ir kitas niuansas RX pertraukimo Call-back:

void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) //RX interrupto callbackas. Gali buti "Fifo0", zr. filtrą ir galimus int.
{
HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData);
CAN_MSG_R=1;
}

Matot “CAN_RX_FIFO1” ir “HAL_CAN_RxFifo1MsgPendingCallback”? Fifo0 ar Fifo1 nėra taip paprastai pasirenkamas, o nuo ko priklauso aš pilnai ir nesupratau. Kažkodėl FIFO0 neveikė. Gal buvo per vėlus vakaras ar panašiai. Bet su FIFO1 viskas veikia.

Kitas momentas- pirma sukonfiguruoji, poto paleidi. Jei reikia perkonfiguruoti- pirma stabdom, poto perkonfiguruojam ir poto paleidžiam:

can_filter(); //pirma filtras, poto start
HAL_CAN_Start(&hcan );
HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO1_MSG_PENDING);

Visas veikiantis demo source kodas: STM32F302 USB CAN writer reader source code.
Ten dar yra windows console programėlė filtro konfiguracijos testavimui (su source code, ne mano).

ARM44: Netikras flešiukas

Norim imituoti USB Flash diskelį? Jokių problemų su STM32F103.
STM CubeMX programoje pasirenkam turimą procesoriuką, įjungiam USB DeviceFS, middleware sekcijoje pasirenkam USB-DEVICE-Mass Storage Class. Sugeneruojam kodą.

Eima į aplanką “\USB_DEVICE\App” ir redaguojam failą “usbd_storage_if.c”:


#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 0x28000 / 0x200 //Čia mūsų disko dydis padalintas iš sektorių dydžio. Tai mažas diskelis.
#define STORAGE_BLK_SIZ 0x200 //Čia sektoriaus dydis, 512 baitų

kiek žemiau ieškom skaitymo iš disko procedūros:

int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
memcpy(buf, disk + blk_addr * STORAGE_BLK_SIZ, blk_len * STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 6 */
}

Tai netikras diskas, todėl skaitysim iš MCU flash atminties, o rašymus į diską ignoruosim. Šioje vietoje paprasčiausiai “memcopy” iš flaš atminties į skaitymo buferį. Atmintis adresuojama baitais, o procedūra užklausinėja sektoriais (blokais). Todėl reikia dauginti iš bloko dydžio.

Toliau reikia sugeneruoti 8″ disketės image. Kodėl? Todėl, kad ji maža ir jos imidžo generatorių galima lengvai rasti internete. Kadangi nemoku su linkeriu prijungti tiesiogiai binarinių failų, tai su savo programa skirta šriftams sugeneruojam C kodą su imidžu.
Diskas tikrai netilps į mažo MCU atmintį, tai reikia kiek pataisyti:


const unsigned char disk[163840]={
0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x57, 0x49, 0x4E, // 00
0x34, 0x2E, 0x31, 0x00, 0x02, 0x01, 0x01, 0x00, // 01
0x02, 0x40, 0x00, 0x40, 0x01, 0xFE, 0x01, 0x00, // 02
...

Sukompiliuojam, supumpuojam į procesoriuką ir:

usb flash disk on STM32F103
Gaunam “Read Only” USB diską. Visus rašymus diskas ignoruoja, todėl Windows per daug nepyksta, nes jai vaidenasi, kad viskas OK. Netgi matom, kad “System Volume Information” susikūrė.

Visas source code (su įžymiuoju penis.jpg):STM32F103 source code for USB mass storage (flash disk)

Kam visą tai naudingą? Ogi, galima prijungti SD diskelį ar SPI flash mikroschemą. Kokius nors duomenis loginti per fatfs į mikroschemą, o kai prisijungiam prie kompo per USB, visi duomenys matosi kaip failai.
O jei mokate gerai programuoti, galima “on the fly” generuoti FAT failų sistemą ir skaityti ar rašyti informaciją. Nereikia jokio softo hoste- visi duomenys matosi kaip virtualūs failai.

Griekas 2

Buvo straipsnis apie Grieką.

Dabar naujas, didesnės rezoliucijos…
Pekino antis griekas

Receptas: viena pekino antis, viena elektrinė orkaitė, viena moteris kuri aptrina prieskoniais tą antį.

Kepimas: Tai riebi antis. Todėl kepti reikia ilgiau. Antis sukišama į kepimo rankovę jau apiprieskoniuota. Ir papūdoma šaldytuve 24…48 valandas. Orkaitė įkaitinama iki 200…220℃ temperatūros. Antis kišama į karštą orkaitę ir kepama apie valandą laiko (skaičiuojant nuo inkišimo). Jei tai maža šaldyta antis, šis etapas kiek trumpesnis. Šio etapo metu nutirpdomi riebalai ir pageltoninama škūra.
Toliau sumažinam temperatūra iki 150…120℃ ir kepama dar apie valandą (mažesnėm trumpiau). Jau galima valgyti, bet kol visi maisto valgytojai susirinks, antį palikti orkaitėje ir kaitinti iki 100℃ (70℃) temperatūroje (hipsterinis lėtas kepimas).
Kol antis kepa, rekomenduojama pakeisti virtuvės čiaupą ir kanalizacijos vamzdžius. Taip greičiau praeis laikas.

Kai susirenka visi prie stalo, ir ypač tie, kurie vėluoja, tada išimam blėką su antim ir atsargiai išimam antį iš kepimo maišelio. Kodėl atsargiai- nes antis linkus subyrėti į gabalėlius. Valgyti karštą ir su mažiau balasto (daržovių).

Rekomenduoja kepti antį krutine į apačią- taip krutinėlė gausis minkšta. Visus riebalus gali išsaugoti ir kepti ant jų visokias bulvytes. O galima ir išpilti į krosnį ir sudeginti.

Mėsai valgyti nereikia peilio- visos dalys išsiardo pačios.