Germanio sąmokslas

Senais gerais laikais, kai tarybinė technika buvo lempinė (kad išlaikytų atominį sprogimą, tipo) vakaruose jau buvo plačiai naudojami tranzistoriai. Pirmieji tranzistoriai buvo daromi iš germanio, buvo labai netobuli ir dažniausiai pnp tipo. Matyt tokia technologija buvo prieinama. Tarybinėje technikoje irgi pasirodė tranzistoriai, tačiau anie iš viso buvo baisūs, todėl atsirado daugybė “povariančių”: pagaminam tranzą, o poto jau jam sugalvojam modelį po atrušiavimo. Daugiausiai kogero variantų mačiau pas KT315 … internetuose pakrapščiau ir radau: KT315A, KT315Б, KT315В, KT315Г, KT315Д, KT315Е, KT315Ж, KT315И, KT315Н, KT315Р, КТ315А1, КТ315Б1, КТ315В1, КТ315Г1, КТ315Д1, КТ315Е1, КТ315Ж1, КТ315И1, КТ315Н1, КТ315Р1…
Kodėl tiek! Dvidešimt variantų! Tiesa čia silicio ir biški offtopic.

Nebuvo ir standarto tranzų žymėjime. Kaip jums Vengriškas variantas?
uher 4000
T1 tai npn, kiti pnp. O iš pirmo žvilgsnio atrodė kaip kokie laukiniai. Taškiukas prie kondikų reiškia, kad šie kondensatoriai yra tantaliniai.
Kadangi tais laikais tranzistoriai dirbo labai siauram “darbiniam” ruože, todėl schemoje nurodytos įtampos.
Continue reading →

Maxima Gaidelis

O viskas prasidėjo taip prabangiai: “30 metų”, “gimtadienių gimtadienis”, “melionas prizų”. O poto pasidarė “3000 gaidelių” 🙂

Va ir man pasisekė… gal.
maxima gaidelis

Aš kai nelabai žiūrau reklamas, netgi toje info-kasoje sudvejojau kai gavau gaidelį. O poto šyptelėjau ir net gal pusę valandos masčiau apie maksimos marketologus. Tačiau gal žmonėm patinka gauti koki reklaminį lipduką, gaidelį- svarbu dykai.

Liko dar viena paslaptis- pakalikai. Ar jie visi vienodos formos? Ką su jais daryti? Nors vienas proanūkis tai griebė juos, bet tėvai atkalbėjo- matyt stengiasi atriboti nuo to gėrio ir auklėti vaikus.

🙂

P.S. įtariu, kad ten man pardavė negerą silkę vietinio ruošimo. Nes žolines praleidau garbindamas baltojo porceliano dievus.

ARM38: soft PWM pertraukimas

Pratesiant HUB08 temą. Rašiau, kad OE signalo ilgis reguliuoja visos matricos šviesumą. Ir tokiam reguliavimui labai gerai naudoti “single shot” PWM pertraukimą. T.y. paleidžiam taimerį kuris vieną kartą sugeneruoja PWM signalą kurio ilgis nusistato harwariškai. Toliau galimi du variantai- tiesiogiai naudoti PWM signalą OE valdymui arba naudoti PWM signalo pasibaigimo pertraukimą.
Pasinagrinėjam antrą variantą (pirmas variantas skiriasi tik vienu parametru ir laidelio prijungimu prie dedikuotos kojelės).

Čia kubiko ekrano vaizdas. Šiam eksperimentui pasinaudojam laisvu, trečiu taimeriu:
CubeMX
Taimeris dirba nuo 72MHz bazinio clock. Todėl ir tas prescaller toks: 720-1, t.y. 72000kHz/720=100kHz (10μs) žingsniukais reguliuojasi impulso ilgis.
Continue reading →

ARM38: HUB08 ir STM32F1 hardware

Šiais laikais dažnai galima rasti kiniškų LED matricų- ar tai išmestos, ar defektuotos arba nusipirkti pas pačius kinus. Tokias matricas valdo kiniški kontroleriai kurie viską ir atlieka, jei užtenka nervų suprasti kiniško softo kreivumą. Tačiau kartais atsiranda noras sukurti kažką savo ir paaiškėja, kad nelabai yra informacijos apie tas matricas- yra įvairios bibliotekos (gana kreivos) ar šiaip keisti sprendimai, bet pačio aprašymo nėra.
Šiame straipsnelyje pasinagrinėsim vienspalves (vieno ryškumo lygio) LED matricas su HUB08 jungtimi. Šios matricos maitinamos dažniausiai nuo 5V per atskirą jungtį, o informacija perduodama per 16 kontaktų jungtį su užrašu Hub08. Hub08 leidžia jungti matricas į grandinėles (daisy chain) ir kiniški moduliai ir jų softas automatiškai viską sutvarko. Mane domino kiek žemesnio lygio informacija.
hub08 protocol pinout
Kartais vietoje raudonų LED pajungiami ir mėlyni, taip gaunas RGB spalvos ar panašiai.
Continue reading →

Uher report 4000 ir 4200

Tai grynas 1966 metų produktas. Tačiau jau gryni tranzistoriai. Tai Uher Report 4000 serijos reporterių magnetofonai. Blogos būklės tokie magiukai parduodami už metalo laužo kainą, geri- artėja prie 500€. Visi magnetofonai turi vieną nemalonų defektą- greičių perjungimas ir ryšis su capstan’ų atliekamas frikcionu. O per tiek metų guma suakmenėja ir nebėra gero kontakto. O dar papildomai atsiranda visokie ūžesiai ir braškėjimai. Kiti dirželiai perkami internetuose ir lengvai keičiami.

Uher report 4200
Čia “stereo” versija. Tačiau tai ne tas stereo kur visi naudoja, o “vienpusis”, nes magiukas turi galvą tik su dviem takeliais per visą juostą.
“Rankinė greičių dėžė” dešinėje aparato iš tikro ir yra rankinė greičių dėžė, čia persijungia juostos traukimo greitis ir įsijungia motoriukas.

They had four speeds: 7½ inches per second (i.p.s. or in/s), 3¾ i.p.s., 1⅞ i.p.s., and 15/16 i.p.s. [19 cm per second (cm/s), 9.5 cm/s, 4.75 cm/s, and 2.38 cm/s].

Continue reading →

Čipų trūkumas 2

Seniau lupinėdavau iš šroto (Husqvarnos žoliapjovės) STM32F103 čipus. Ne tiek jau daug rasdavau, nes dažniausiai čipai užlakuoti. Dabar vėl parvežė, matau keletą nelakuotu, čiumpu ir namie matau klastą:
STM32F103 clone
Tai kinietiškas analogas- ne toks “ekologiškas”, bet sako kad greitesnis. Čipo viduje yra du kristalai- atskirai ROMas ir atskirai MCU. Čipo paleidimo metu programa perrašoma į RAM ir veikia iš ten. Teoriškai gaunasi lėtesnis boot, bet greitesnis kontroleris.
Lygtai pilnai suderinamas su STM produktu, bet tikriausiai yra savų prigulnybių. Čipas užnumeruotas kaip 303, bet čia tikrai ne trečia serija.
Seniau visi čipai buvo STM. Matyt arba taupo pinigus arba tikrai nėra kur pirkti naujų STM (nereikia barstyti).
Continue reading →

Dar vienas beveik lavonas- topcast

Staiga bac! ir neveikia.
topcast mainboard
Tropinis klimatas Lietuvoje, priverstinis šaldymas ir nelakuota PCB (!). Keli lašai kondensato ir nešvarumai. Ko pasekoje biški neveikia. Nauja kainuoja 1600€ plius siuntimas, tai kaip ir verta nagrinėtis. Juolab, kad technologija antikinė. Svarbiausia, kad procesoriukas (NEC/Renesas H8S/2357) veikia. Veikia ir rodo vėjus, nes analoginėje dalyje atsirado papildomi laidumai.
Continue reading →

ARM37: zuikis ir vėžliukas

Kas nesidomi mikroprocesorių programavimų, gali ir neskaityti. Bus nelabai įdomu… 🙂

Klasikinė bėda- yra du procesai, kurių veikimo greičiai labai skiriasi. Šiam variante: USB ir UART. Kaip suderinti jų bendrą veikimą? Štai imat kokį source code iš interneto platybėse publikuotos pamokėlės, viskas kaip ir veikia kol spaudžiojat duomenis iš klaviatūros, o jei pabandot “copy-paste” ir staiga tekstas pradeda nebepersiduoti, raidės prapuola ir procesoriukas pastringa. Kodėl? Todėl, kad reikia suderinti skirtingo greičio ir veikimo principo procesus:
Pirmas procesas, USB, tai paketinis duomenų perdavimas su galimybe pristabdyti duomenis ar net paprašyti juos pakartoti. Viskas vyksta gana greitai.
Antras procesas, UART, tai nuoseklus, lėtas duomenų perdavimas. Ir pats perdavimas pririštas prie laiko. Jei nenaudojam kontrolinių linijų, procesą negalime sustabdyti. Kai duomenų per daug, jie prarandami.

Taip atrodo iš žmogaus pusės, iš kontrolerio pusės tai jau keturi procesai: USB TX, USB RX, UART TX, UART RX.

Kad suvaldyti šį chaosą, reikia procesus paleisti nepriklausomai, per pertraukimus. Arba, kai siunčiam, tai galima ir pastabdyti pagrindinį ciklą (bent jau šiame eksperimente). Gaunais taip:

  1. UART RX, per pertraukima ir net DMA. Tačiau nežinom kiek baitų gausim, tai visas mūsų DMA/IRQ tvarko tik vieną baitą.
  2. UART TX, siuntimas blokuojant procesoriaus darbą. Mūsų programa nieko protingo nedaro, tai galima blokuoti.
  3. USB RX, tikriausiai per pertraukimą, naudojam HAL biblioteką.
  4. USB TX, blokuojamas ar tai IRQ, naudojam HAL biblioteką*.

Visi procesai per pertraukimą daro tik vieną darbą- jei gaunam duomenis, įrašom duomenis į buferį (jei yra vietos). Buferis vadinasi “circle” nes tai kaip ir cirkuliarinis buferis**, tik aš jo neperpildau, prarandu duomenis jei buffer overflow. O pats smagumas vyksta pagrindiniam, amžinam cikle:

 while(1)
	{
	HAL_IWDG_Refresh(&hiwdg); //watchdogas

	while(circle_available(&cc)>0) //ar yra duomenu gautu is UART?
		{
		i=circle_available(&cc);
		for(j=0;j<i;j++)
			{
			tmp[j]=circle_pull(&cc); //viska persikopijuojam ir issiunciam
			}
		CDC_Transmit_FS(tmp, i); //siuntimas per USB (blocking?. gal ne)
		}

	while(circle_available(&cu)>0) //ar yra duomenu gautu is USB?
		{
		i=circle_available(&cu);
		for(j=0;j<i;j++)
			{
			tmp[j]=circle_pull(&cu); //viska persikopijuojam ir issiunciam
			}
		send_uart((char *) tmp,i); //siunciam per UART (blocking)
		}
	}
}


Tikriausiai senas Wordpresas nenusiaubė programos teksto.

Iš principo programa veikia taip: yra ką perduoti? perduodam! ir vėl iš naujo.

Tačiau galima dar labiau viską užkomplikuoti- TX padaryti su atskirais buferiais ir siuntimo procesą irgi padaryti asinchroninį. Tada procesoriuje išsilaisvintu dar šiek tiek resursų kokiai nors pagrindinei programai.
Dar viena bėda- nenumatytas atvejis, kai trumpuose momentuose, kol ištraukiami duomenys į buferį, kas nors įrašytu naujus duomenis. Teoriškai circle buferis apsaugo nuo tokių nemalonumų… Praktiškai, buitiniams reikalams viskas veikia.

Šis straipsniukas skirtas man pačiam prisiminti, nes reikėjo ir neatsiminiau. Teko kiek parašinėti.

*) HAL USB biblioteka netikrina ar duomenys išėjo. Jei reikalingi TIKRAI gerai daryti, reikia tikrinti USB būklę. Tada jau geriau nagrinėtis ATARI disko emuliatoriaus kodą (rodos ten padariau viską)
**) circular buffer, cirkuliarinis buferis leidžia rašyti ir skaityti duomenis iš buferio. T.y duomenys kaip gyvatėlė Uroboras, nauji duomenys prisideda prie galvos, o seni nusiima prie uodegos. Viskas gerai, kol galva nepasiekia uodegos ir gyvatėlė neįsikanda. Tada prarandam duomenis.
P.S. source kodas neoptimizuotas dėl aiškesnio vaizdavimo.

ARM36: Burbuliniai LED

Antikvarinis LED indikatorius, tikriausiai iš kokio nors tarybinio kalkuliatoriaus. Žãvi savo netobulumu:

burbulinis LED
АЛС318

Simboliai mažyčiai (todėl ir plastikinės linzės), šviesumas mizernas (prie tausojančių srovių). Bet savotiškai žavingas.
Tokiam indikatoriui pajungti reikia gana daug laidų ir dinaminės indikacijos. Demonstracijai panaudojau breadboard ir “bluepill” plokštę (STM32F103C8t)- mikroschema mažoka, beveik visos kojos sunaudojamos indikatoriui. Prie anodų (pliusinių elektrodų) reikia prikabinti kokius nors rezistorius, kad apriboti srovę per LED, tik 3mA statiniam režime per vieną segmentą. Naudojant dinaminę indikaciją leistina srovė 40mA, bet jei indikacija sustos, tai atia LEDams.
Continue reading →