Author Archives: Administrator

Mechaninis flip indikatorius

Senoviškose degalinėse stovėjo kuro kuro kolonėlės su elektromechaniniai indikatoriais. Panašūs indikatoriai buvo ir autobusuose. Keletą prigriebiau, nes pagalvojau, kad laikrodis su tokiu indikatorium gali įdomiai atrodyti. Viena bėda- indikatoriai jau atidirbo savo ir nuo saulės kiek susideformavo. Aišku jie ir “atsiindikavo” savo laiką.

flip display
Indikatoriai (čia 7 segmentų skaičiukai) turi savo magnetinę atmintį- jie atsimena paskutinį rodmenį. Paprasčiausiai nedidelis pastovus magnetas prilimpa prie vienos ar kitos padėties pusės. Kad perjungti rodymą reikia nugalėti to magneto prilipimą, atstumti “vėliavėlę” toliau, kad suveiktu kitos pusės magnetinis pritraukimas.
Bent jau šioje schemoje įtampa turi būti 12V ar kiek daugiau. Prie 12V pradeda veikti, tačiau keletas segmentų nepersijungia.


Video filmuke displėjus dirba self-test režime. Pats displėjus jungiasi prie RS485, tačiau protokolo aš neatbūriau. Tikrai kiek sudėtingesnis protokolas, nes pagal schemą matosi, kad ant to pačio RS485 gali kabėti keli prietaisai.
Jungiasi gana greitai- filmuojant 60 kadrų per sekunde nelabai matosi, bet va su “super slo mo” (rodos 960fps) jau matosi persijungimas.

flip display
Išlituoti displėjau segmentus man nepavyko- plastikas suminkštėja ir išsirauno kojelės su plonyčiais apvijų laideliais. Vienintelis sprendimas- išpjauti su visa PCB.

flip display
Matosi labai daug diodų. Todėl, kad ritėse reikia keisti srovės tekėjimo kryptį ir dar multiplexinti…

Pačių ričių pajungimo schema (su paprastinta) atrodo taip:
schema
Aišku nenupaišiau visos schemos. Indikatorius 7 segmentų- gaunasi 14 laidų per diodus vienam indikatoriui. Šeši indikatoriai sujungti “bendrais segmentais (prieš diodus)”, o kita pusė kiekvienam indikatoriui atskirai. Viso 14+6 laidai išpjautam indikatoriui.
Valdymas šlykštus, o ir labai jau garsiai junginėjasi. Visai praėjo noras daryti laikroduką…

Perforatorius

Kažkada atvežė senoviškų CNC staklių elektronikos dalis. Greičiausiai iš juodo metalo laužyno, nes viskas deformuota ir tepaluota. Iš šios krūvos jau aprašiau du monitorius- žalią ir tarybinį. Su tarybinių monitorium nelabai gavosi- nepavyko gražiai pavaldyti spindulį net su nauju stiprintuvu. Todėl projektą padėjau į lentyną.
Kitos lobis iš tos pačios krūvos- perfojuostų spausdintuvas ir skaitytuvas Ricom NPR-5200.
Plačiau apie perforatorių ir daugiau nuotraukų kolekcijos puslapiuose.

Ricom NPR-5200

Visas įdomumas- nulis informacijos. Viskas buvo daroma bandymų metodu. Bet jei kas netyčia turi tokio prietaiso dokumentaciją (ar darbo patirtį) tai pasidalinkit.
Continue reading →

Skylutė

Vienos skylutės istorija…
skylute

Laikas eina, viskas rūdija. Ir viena tokia detalytė už ~20€ padaryta iš plastiko paprasčiausiai susitraiško dėl rudžių. Pati detalytė galima sakyti yra amžina- plastikinis korpusas, viduje arba mikroschema arba paprasčiausia ritė. Tačiau sukišta į lieto metalo (o gal kalto) gabalą. Aplink detalytę kaupiasi rūdys, o rūdys labai plečiasi palyginant su metalu iš kurio jos formuojasi. Papildomai vanduo, karštis- šaltis, ledas, purvas ir plastikinis detalytės korpusas praskyla ir prasideda nesąmonės su “nekontačija”…
Darbas minimalus, todėl aplinkiniai meistreliai išsisukinėjo visais metodais- daug darbo, gal po savaitės, gal ateik kai nebus klientų… Taip prasiblaškius kelias savaites ir atsibodus užrašams displėjuje, nutariau pakeisti pats. Tačiau neturint tinkamų įrankių lieka tik vienas- ginekologinis metodas. Tikri meistrai tą sutrunijusia plastmasę išgręžia per priekį, nuėmę kelis geležius. Aš negalėjau nuimti geležių, todėl krapščiau iš galo. O ten joks normalus gręžtuvas nelenda…

Taigi, lifehakas: plastiką prakiaurinam su įkaitinta iki raudonumo vinim. Poto įsukam storą “samariezą”, poto blaškomės. Poto paimam M10 sriegiklį ir padarom netikrus sriegius. Ir tik tada nauja detalytė lenda. Sutepiam viską su “šmara” ir surenkam atbuline tvarka.

Kas žino kas per detalytė? 🙂

FM trukd… stotis

Labai labai senai rašiau apie FM generatorių. Tada dar nebuvo visokių Kinų su jų aliekspresais ir šiaip buvo kitaip. Dabar galima nusipirkti moduliukus ir padaryti tą patį kompaktiškiau ir gal geriau (bent jau taip atrodo).
Istorija tokia- buvo lempinis generatorius, poto kažkoks kastruotas stiprintuvas, poto prie lempinio prisukom kinišką stiprintuvą. O poto paprašė manęs padaryti “campus radio”. Ilgai negalvojau, ir sudėjau kiniškus modulius į vieną dėžutę:
FM moduliatorius ir stiprintuvas
Papildomai stabilizatorius (5V, 7805) moduliatoriui ir reguliuojamas (LM317) galios stiprintuvui. Metalinis korpusas, biški kondensatorių ir feritinių elementų… (grynas analogas, dėl trukdžių).

Prisipažinsiu, kiek galingesnės “radio” technikos nekonstravau. Bet šiokius tokius pagrindus turiu. Bet šis konkretus projektas kiek užkniso, pagrinde dėl kiniškų modulių ir nulio dokumentacijos. Ir aišku dėl … skaitmeninio amžiaus. Ne tik laboratorinis maitblokis, bet ir skaitmeninis multimetras pradeda durniuoti ir rodyti nesamones jei tik kiek padidini galią. Ir ten tikrai ne vatai, o vato dalys. O aš nebeatsimenu, kur turiu dar tarybini multimetrą… nežinau kiek srovės ir kiek įtampos ši dėžutė ima.
Kita bėda- fazendoje (ir kogero šiaip namuose) nėra kiek padoresnės FM radijukės. Kiniškos pigios taip pat, kaip ir skaitmeniniai multimetrai gauna insultą ir neveikia prie siuntiko. Kiek pagelbėjo senovinis sudaužytas JVC boomboxas, ten grynas analogas- tačiau arti stiprintuvo signalą pasigauna gal per penktadalį skalės.
Prie tokių trukdžių, net pats moduliatorius grybavo- nuotraukoje matosi kairėje trys juodi laidai- tai audio įėjimas. Per juos pasigaudavo gliukus- tik bandymų metodų radau poziciją kur netrukdė.

Po keletos valandų eksperimentų pradėjo “švariai” groti ir aš jau pradėjau džiaugtis- pasirodo per anksti. Matyt suknistas kiniškas moduliatorius svaidosi harmonikas į visas puses. Nėra jos tokios stiprios- aš tikrai nepagaunu mano transliacijos “kitoje vietoje” nei nustatyta, bet kažkodėl tikros radio stotys pradeda blogai groti. Per kur “muša” aš nežinau…

Nutariau kiek pristabdyti eksperimentus… kieme gražiai nulijo stiprus lietus, gražus ir gaivus oras… staiga namiškiai sako, vėjas ir lietus “nusuko” anteną- TV neveikia. ¿Qué? Ogi šis siųstuvas užmuša dar ir skaitmeninę televiziją. Nu čia tai tikrai harmonikos. Va dabar dar ir filtrą reikės konstruoti. Ir dar pertvarą tarp moduliatoriaus ir stiprintuvo.

Truputis paranojinės kriptografijos

Kas daroma, kai reikia kriptografijos ir nepasitikima niekuom. Tada statomos visokios kriptografinės geležėlės. Kad ir tokia:
crypto

Tai hardwarinis kriptografinis modulis, kuris tikriausiai savyje saugo “private key” ir kartu koduoja ir pasirašo dokumentus. Be “private key” ištraukimo iš dėžutės. Įdedi į savo https serverį ir per jį pumpuoji visus duomenis (rodos viena iš opcijų), arba pumpuoji slaptus dokumentus iš LAN, o per kitą WAN skylutę jau išteka į internetą grynas koduotas srautas. Žodžiu paranoja. Teoriškai, jei blogiečiai įsibraus į serverinę ar kažkas ras šiukšlyne šį modulį, negalės pasinaudoti.
Continue reading →

Kaip gimsta 3D modelis

Papasakosiu kaip gimsta 3D modelis. Atari kompiuteriai naudoja specifinį kištuką ir tie kištukai jau negaminami. Yra pirkti naujadarų iš Lenkų, bet pirmiausia laukti, o antriausia- iš Lenkų. Dar yra kažkoks 3D STL failas, bet jis kažkiek kainuoja ir neaišku ar veiks su mano geležėlėm.
Kilo mintis pasidaryti savo. O ir kartu parodyti kaip tai darosi.
Pirmiausia bandom rasti internete brėžinius su tikrais išmatavimais. Greitai neradom, tai su kreivu kinišku “štangelcirkuliu” kiek pamatavom ir atspausdinom testinę “tarpinę”:
Atari SIO connector 3D model stl file print
Continue reading →

ARM21: STM32-USB-CDC ir hardware handshake

Bežaidžiant su savadarbiu Atari kilo mintis iki galo iššifruoti kaip visdėlto persiduoda senoviniai RS232 būklės signalai į host kompiuterį. O pasirodo, čia didelė bėda. Daugelis interneto puslapių dažniausiai sako, kad tie visi RI, CTS, DSR, CD, DTR ir RTS jums nebus reikalingi “ir esamo straipsnio lygyje nebus padaryti”. Šūdeliai tie autoriai. Todėl, kiek pavargau ir po gabaliuką surinkau informaciją apie tai. Pakeliui STM32CubeMX gamintojai įpaišė eilinį sisteminį atnaujinimą ir su 1.8.0 versija viskas veikia, o su 1.8.3 kažkai biški neveikia ir biški veikia. Todėl pavyzdukinis softas kompiliuojasi su 1.8.0 firmwarės biblioteka.
Visi linijos kontrolės signalai iš įrenginio (device) į host eina per atskirą IN✻ endpointą (interrupt). Jis pagal nutylėjimą sukuriamas CDC pavyzdyje, bet nenaudojamas. Signalai iš host į įrenginį eina per standartinį komandinį (0 – nulinį) endpointą. Standartiniam kubo softe ten biški net padaryta.
Vienintelis signalas CTS niekaip negaminamas per USB, jo būklę nusprendžia host draiveris pagal esamą situaciją. Beja, net keli interneto šaltiniai rašo, kad windows standartiniai draiveriai to nemoka daryti ir iš viso ten bėda. Todėl visokie “hardwariniai” USB-COM adapteriai turi savo draiverius.

Biški prirašiau miglos? 🙂 Gerai- paprasčiau. RS232 būklė perduodama 7 bitais, per CDC status, per dedikuotą IN interrupt endpointą:

// 7 reserved 0.
// 6 bOverRun - received data has been discarded due to overrun in the device.
// 5 bParity - parity klaida, parity error
// 4 bFraming - framing error
// 3 BRingSignal =RI - ring signalas, vienas iš nepriklausomu RS232 signalų
// 2 bBreak - tai BREAK komandos statusas. Kai siunčiama BREAK komanda, RS232 siuntimas stabdomas, o duomenų linija užkeliama high.
// 1 bTxCarrier =DSR, data sender ready ar panašiai. Šitie du signalai užsikeldavo, kai modemas susijungdavo su kitu modemu.
// 0 bRxCarrier =DCD

Tokia informacija eina iš įrenginio. Tuo tarpu host gali siuntinėti daugiau komandų (nes CDC standartas tai ne tik COM portas). RS232 aišku naudoja greičio, stop bitų, parity valdymo signalus. Tai puikiausiai padaryta demonstraciniam kubo softe (komandos CDC_SET_LINE_CODING ir CDC_GET_LINE_CODING). Komanda sukurianti BREAK irgi lengvai randama (CDC_SEND_BREAK).
Lieka valdymo komanda CDC_SET_CONTROL_LINE_STATE, kurios paleisti aš ilgai negalėjau. Ten iš esmės tik du bitai iš 16:

//bitai: 15:2 - 0.
//bitas 1- carrier control. 0- deactivate carrier, 1- activate.
//bitas 0- DTR bukle, 0-not present, 1- present.

Tik kur tie bitai paslėpti? Pasirodo, kad USB CDC standarto kurėjai nutarė juos paslėpti kiek kitoje vietoje- wValue, o ne duomenų bloke. Kodėl? Tikriausiai, kad užsiknistum. Kubo kūrėjai irgi pasistengė viską paslėpti toje procedūroje kur viskas labai elegantiškai surašyta. Tačiau jei pakrutintume vienos struktūros prikabinta substruktūrą, tai joje ir rastume tą reikšmę. Aš tikrai nesuprantu struktūrų ir kaip iš jų traukiami duomenys, tai padariau taip, kaip nei vienam source kode nemačiau:

wValue=hUsbDeviceFS.request.wValue;

Ir čia randam tuos du bitus, kurie konkrečiam projekte nereikalingi.

Einam atgal prie būklės siuntimo per INT IN endpoitą. Kubo softo kūrėjai nenumatė duomenų perdavimą vartotojui per endpointus. Nu gal numatė, bet per žemesnio lygio procedūrą:
USBD_LL_Transmit(&hUsbDeviceFS, endpointo numeris, duomenų buferis, ilgis duomenų);
Alia, ką ten reikia siuntinėti nelabai ir rašo. Vargom vargom ir radom paketo aprašą:

buf[0]=0b10100001; //request type (0xA1). Nu tokis skaičius rodo, kad męs norim kažką pranešti CDC.
buf[1]=0x20; //notification SERIAL STATE, o čia kad pranešam COM porto būseną.
buf[2]=0; //wValue
buf[3]=0; //wValue
buf[4]=0; //wIndex - interface number, 16 bit, LSB
buf[5]=0; //wIndex - nes gali būti keli COM portai ant to pačio USB. MSB.
buf[6]=2; // Čia pranešimo ilgis. Ne paketo ilgis, o "svarbių" duomenų. LSB.
buf[7]=0; // Čia irgi ilgis. Viso du baitai. MSB.
buf[8]=status; // Šitie svarbūs. LSB pirmiau
buf[9]=0; // o šitie visada nuliai.

Šitą masyvą išsiunčiam:

USBD_LL_Transmit(&hUsbDeviceFS, 0x82, buf,10);

..ir? Nifiga neveikia. Tiksliau veikia dalinai. Kodėl? Ogi todėl, kad kubo softo kūrėjai nusprendė, kad “control endpointui” užtenka aštuonių (8) baitų. O šio paketo ilgis- 10. USB Shark ir parodo, kad eina 8 baitai mūsų, ir du randominiai. Todėl einam į “usbd_cdc.h” failą ir taisom:

#define CDC_CMD_PACKET_SIZE 10U /* Control Endpoint Packet size */

Va dabar, jau kažkas pradeda veikti. Paleidžiam softą skirta Atari diskų emuliacijai ir … neveikia. Be “flow control” veikia, su bet kokiu “flow control” trukinėja ryšis. Kol kas nežinau kur bėda. Vienas svarbus momentas, kad USB labai jau “asinchroniškai” nusiskaito būklę. Kartais labai vėluoja. Nes principas toks- “ei! Kompiuteriau, pasikeitė laidų būklė. O kompas po kažkiek laiko- gerai, gerai, jau supratau”. Ar tai MS draiverio bėda, ar mano, aš dar nežinau.

Nu ir pats pilnas softas:
ATARI 1088XEL SMD on board USB firmware for STM32F103, full source code and compiled hex and binary.

Ir kam buvo neįdomu ar nesupratot, va viena iliustracija:
Atari disk emulator with STM32F103
Tikrai veikia.

✻) USB endpointų kryptis visada rašoma iš kompiuterio, hosto pusės. Visi signalai iš kompo yra “OUT”, visi signalai į kompą yra “IN”. Ir nesvarbu kas iššaukia perdavimą. Taip padaryta todėl, kad USB yra vienkryptis (pagal hierarchiją) protokolas. Tuo tarpu senovinis COM yra lygiavertis. Kartais susibalamutinasi protas, kai duomenys iš MCU eina į IN endpointą, o gaunami per OUT. Pas COM dažnai susipainioja laidai, nes TX sujungtas su RX. Pas kokį modemą RX pavadintas TX ir laide sujungta RX-RX. Taip darosi painiava.