Kaip gimsta 3D modelis

May 4th, 2021

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

Patikrinus ir pamačius kad skylutės nesutampa buvo pakoreguotos koordinatės. Poto vėl spausdinom ir isitikinom, kad dabar pataikėm. Poto spausdinam pirmą modelį su metalinių kontaktų laikymo skylėm, po to patobulinam dizainą ir kiek pakoreguojam skylutes. O paskutiniam jau ištaisytos klaidos ir padidintas korpusas dangteliui.
(Įdomi mintis, kurią išgirdau kažkur youtubėje: išmatuojam detalę ir žiūrim į skaičius. Jei skaičiai panašus į colinius, pereinam į colius. Jei metrinė, pasiliekam metruose. Tačiau jei išmatuotas dydis 3,9785mm, tai ko gero originalus skaičius bus 4.00mm. Nes žmogus specialiai nedarys kvailų skaičių savo brėžiniuose. Taip reikia “humanizuoti" visus išmatavimus.)

O kaip paišom? Aš paišiau labai iškreiptai, nes nemoku dirbti su rimtom programom. Todėl pradines skylučių koordinates ir gražius korpuso užlenkimus paišiau su 2D programa- Corel Draw. Ji moka labai gražiai paišyti kreives.

Be ja, koordinatės (kad neužmirščiau): x1: 0, 3.5, 7, 10.5; x2: 1.75, 5.25, 8.75. Y: +-1.6.
(jei skylutės išdėstytos lygiakraščiam trikampyje, tai Y:+-1.5155.. bet man 1.6 gerai suėjo. Ir dar klausia žmonės, ar gyvenime panaudojai Pitagoro teoremą).

Iš 2D pereiti į 3D radau tokį kelią- Corelis rašo DWG, o autokadas nuskaito. Poto skylutės- EXTRUDE, korpuso kreivė pradžioje užrREGIONinam, poto EXTRUDE. Poto SUBTRACT vieną iš kito. Kodėl tas šūdinas autokadas nesugeba EXTRUDE kreivės galim tik klausti pačio autokado.
Gautą 3D modelį išeksportuojama į STL.
Poto darom žiaurią degradaciją- užsikraunam senovišką (būtent senovišką, 1.4.3) XYZmaker programą ir su ja pabaigiam darbus. Kodėl senovinę? Todėl, kad naujoje sukeitė viską ką galimą ir padarė beveik neveiksnia.

Aš paklausiau autokadisto-architekto, kaip pakeisti skylės dydį esamam 3D modelyje ir anas atsakė- nu užtaisai skylė ir poto darai naują. Aš nežinau ar tai teisybė, bet tai ne darbas, kai darai kištuką, kai reikia tiuninti 13 skylučių. Todėl laikome modelį kiek kitoje formoje nei galutinis produktas:
3D models during tuning atari sio
Kairėje, mėlynas- eksportuotas “daiGtas" iš autokado. Salotiniai kūgiai- kištuko skylučių prapletėjai (pagal koordinates). Su šiais kūgiais apipjaustom mėlyną detalę.
Žalia-raudona-ir-biški-mėlyna detalė tai “invertuota" skylė skirta laikyti metalinėms detalėm. Kai matosi iš spaudinių, skylės parametrai keitėsi net paskutinėje revizijoje. Jei neturėčiau tokios “detalės", tai norėdamas pakeisti skylės konfiguraciją, turėčiau vos ne viską paišyti iš naujo.

Dešinėje- galutinis “darbinis" modelis. Kad paversti detale, užtenka tik suformuoti skyles (SUBTRACT) ir sumauti visus komponentus vieną ant kito. Visas darba atliekamas pagal globalias koordinates. Poto eksportuojam į STL, konvertuojam į darbinį failą ir spausdinam. Jei reikės pakeisti skylės parametrus, tai jokios problemos- skylės “išmušėjas" padarytas iš stačiakampių primityvų ir juos galima kaitalioti.

O geležis tai iš kiniškų lizdelių, panašūs naudojami kompo CPU ventiliatoriui pajungti:
atari SIO 3D model print metal parts

Norėčiau, kad blogo skaitytojai pasidalytu savo 3D modelio kūrimo metodika.

Pastovus Atari 1088XEL SMD puslapis angliakalbiams

April 25th, 2021

Mano angliakalbiams draugams ir šiaip smalsučiams, sukūriau Anglišką Atari 1088XEL projekto statinį puslapį.

Atari 1088XEL SMD V1.0

Taip atrodo V1.0 versija su nauju bugu.

ARM21: STM32-USB-CDC ir hardware handshake

April 17th, 2021

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]=0×20; //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, 0×82, 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.

HDMI (DVI) Testeris arba mano pirma ketursluoksnė

April 2nd, 2021

Buvo nuo senų laikų prikaupto Cikloninio šroto. Viena bėda- BGA korpusas. Tačiau laikai keičiasi, ketursluoksnės PCB jau pigios ir iš garažo buvo ištrauktos mikroshemos. Plokštė gavosi su viena rimta klaida, bet šiaip viskas veikia. Reikia pagirti Alteros mikroschemos tvirtumą. Ji buvo lituota fabrike, poto aš nulupau. Poto bandžiau reballinti, poto dar bandžiau, poto dar bandžiau. Poto prilitavau, bet ne iki galo. Poto dar kaitinau ir tapšnojau, kad rutuliukai susijungtu su PCB. Ir mikroschema išlaikė šiuos išbandymus.
Šis ciklonas turi PLL ir turi LVDS išėjimus. Kaip tik išbandyti HDMI (DVI) interfeisui:
HDMI test generator on single FPGA chip
Čia mano kiniško monitoriaus ekrano nuotrauka. Signalas eina tiesiai per HDMI iš FPGA. Matosi viena problema- eilutėje su vertikaliais brūkšneliais, pats kairinis turi būti irgi dryžuotas. Dabar neaišku, ar čia kaltas mano projektas arba visdėlto kiniškas upscaller. Mano “generatorius" išduoda VGA (640×480@60Hz, 25MHz pixel clock) vaizdą, o kiniškas žaislinis monitorius lygtai FullHD.
Read the rest of this entry »

Atari 1088XEL SMD Rev.0.0

March 27th, 2021

Jau seniau rašiau, kad buvo nupušimas ir paišiau SMD versiją svetimo projekto- Atari 1088 XEL (Mini-ITX Atari 8 ). Kinai pagamino pirmą PCB ir kol kas lygtai kompiuteriukas veikia. Nežinau ar kam Lietuvoje tai domina, bet Rev.0.0 likusias 4 PCB galiu padovanoti. Jei užsieniečiai jų nepaims, tikrai atiduosiu, nes jau paišau Rev.1.0, su pataisymais ir mano fantazijom. Ši revizija buvo skirta tik patikrinti ar svetima schema teisinga ir ar veikia. Šiandien pabaigiau (dalinai) ir schema veikia. Ji 99% suderinama su originalia versija, tik vietoje super brangaus USB-RS232(TTL) keitiklio aš padėjau į PCB STM32F103. Dar pašalinau vieną labai kvailą lizdą, kuris buvo tik dėl kosmetinio suderinimo su kažkokiu moduliu (Audio).

Atari 1088XEL Rev0.0
Testavimas. Nėra klavietūros kištuko (PS/2, reikia išlupti iš seno kompo). Čia minimumas, kad paleisti ir pažiūrėti. Dar nėra PAL generatoriaus, joystikų lizdų, PELĖS(!), SIO ir kažkokių prabangių išplėtimų. Kad paleisti reikia dviejų papildomų PCB- ROM lizdeliui ir MMU- PAL/GAL čipui iš originalaus kompiuterio (fuse failus ir “formules" turim, galim suprogramuoti).
Read the rest of this entry »

Optimizavimas

March 14th, 2021

O, tikras bambesys parėjo. Kalbėjau sau su žmonėm ir jie pastebėjo mano automobilyje voką su “Mano Kaunas" voku. Sako- “tu gauni popierines sąskaitas? Kos atsilikimas- yra gi www". Pradėjau aiškinti ir staiga supratau, kad tai nėra paprasta. Todėl bambesį pradėsiu nuo svetimos istorijos, apie pašto dėžučių optimizavimą. Kažkur per TV girdėjau, o TV kalbėtojas tikriausiai iškopijavo iš kur nors dar… Sakmė prasideda:

Seniai seniai, paštas buvo nešiojamas paštininkų net du kartus per dieną, todėl knygose ar filmuose galima išgirsti tokią frazę- rytinis paštas, vakarinis laikraštis. Tačiau laikai keitėsi- pašto korespondencijos kiekiai kiek padidėjo, ir paštą pradėjo nešioti tik iš ryto.
Seniau namai buvo mažesni, bet ir 19 amžiuje buvo daugiabučiai. Paštininkai nešdavo laiškus ir kitą korespondenciją iki buto ir dažnai paduodavo adresatui, net kartais reikėdavo pasirašyti.
Pastatom mintyse modernų daugiabutį, kokiu dešimties aukštų. Visi gyventojai užsisako kokį laikraštį (taip, paštininkai nešiodavo laikraščius) ir šiaip gauna laišką. Ateina iš ryto paštininkas į tokį namą ir pereiną per visus aukštus, jei yra liftas, tai užkyla iki viršaus ir leidamasis žemyn išdaliną korespondenciją ar inkiša į pašto dėžutę (ar net po durim) visiems žmonėms. Taip, tai užtrunka kažkiek laiko.
Ateina modernesni laikai ir vadyba nutaria optimizuoti paštininko darbą- pastatom pašto dėžutes pirma aukšte ar netgi kieme. Dabar paštininkas tik prieina prie namo ir greitai greitai išmėto visą korespondenciją. Fantastika- darbas optimizuotas.
Tai teisybė tik iš pašto pusės, nes aplamai pats procesas pasidarė ypač neefektyvus- dabar namo gyventojai randomiškai išeina iš savo buto ir eina tikrinti pašto dėžutės. Net jei jie 100% sėkmingai nueina iki pašto dėžutės, jie visi vaikšto aukštyn žemyn arba važinėjasi liftu. Korespondencijos pristatymo efektyvumas krito daugiau nei dešimt kartų. Tačiau jei teisingai prareklamuota ir kažkas duodama nemokamai (pvz. pašto dėžutės apačioje), tai tūlas žmogus nesusigalvoja apie tai…

optimizavimas
Va to popierinio laiško dalis. Vadyba sako “Saugu- nebus virusų", “visi mokėjimai kartu", svarbiausiai- “atsiskaitysit nemokamai" (o kur čia mokamas atsiskaitymas?). Jūsų prisijungimo duomenys čia pat…

O dabar klausimas. Ar atsimenat, Kauno vandenys įsivedė 0.79EUR mokesti už “sąskaitas ir dokumentų tvarkymą" kuris dabar pavadintas “Pastovioji dalis"? Aš jau moku už šį popierinį voką. Ar man pašalins tą mokestį jei prisijungsiu? Nežinau, bet manau kad jis liks. Tai deja dar viena “optimizacija"- durnas useris su kompiuteriu suves visus parodymus, apmokės ir dar prisimins apie mokėjima laiku. Paprasčiausiai tai tik perkraunama dalis darbo iš apmokamų darbuotojų (ar printerio- siuntėjo) į nemokamus userius.

Kažkada klausiau, kuom gerai šiais laikais “viena sąskaita"? Duomenų rodmenis ta paslauga pati surašo? Ne, reikia useriui viską suvesti. Vieni sako, kad reikia daryti vieną pavedimą- taip, seniau pavedimai buvo mokami tai buvo svarbu. Dabar pavedimai pasidarė kaip ir nemokami- todėl kai darai pavedimą už paslaugas, vienu metu deklaruoji rodmenis. Kaip ir mažiau mygtukų nuspaudi. Nebent nori pasidaryti, kad anie tau pinigus automatiškai nurašytu. Tačiau tikrai bus variantas, kai nebus pinigėlių sąskaitoje, susiformuos skola arba kur nors kaimo degalinėje liksi be degalų, nes kažkas kažko neprisimins…

O kodėl geriau kitas variantas. Bent jau man tas popiergalis primina, kad reikia apmokėti sąskaitas. Yra popierėlis- vadinasi kažkada, kai bus nuotaika, apmokėsiu. Kai apmokėsiu, popieriuką padėsiu į dėžutę. O kai mokėsiu už popieriuką, pakeliui apmokėsiu ir kitas sąskaitas. Ir jei sakysim tikrai striuka su pinigais (visko gi būna), tai galiu kažkiek pastrateguoti su sumomis ir ne viską sumokėti. Tikrai žinau keletą žmonių, kuriems sunku, ir jie mokesčius už dujas sumoka iki vasaros pabaigos.

O dar, kad man nepatinka optimizacija už mano pinigus. Aš norėčiau normalaus pašto, norėčiau pienininko kuris atneštu šviežią pieną į namus (sakė, kad buvo tokia paslauga netgi tarybiniais laikais) ir dar norėčiau, kad uždraustu abonentinį mokestį be prekių (t.y. jei yra abonentas, tai kažkiek minučių, kubinių metrų ar kilovatų būtų nemokamai).

Gerai aš čia seniokiškai pabambėjau?

Nupušimas - 1088 XEL rev SMD

March 10th, 2021

Vieną open-source projektą nupaišiau. Dabar reikia tik palaukti, peržiūrėti, nupaišyti silk screen ir rasti kinus kurie pagamins.

atari

Rankutėmis viskas, rankutėmis.

Antra dalis- jau surinkta.

Antireklama ir LED remontas

March 3rd, 2021

Nėra paslaptis, kad prieinu prie utilizuojamos elektronikos. Pastebėjau gana daug vienodų LED prožektorių- Osram Ledvance 50W. Labai jau smulkus korpusas kaip 50W šviestuvui. Todėl vieną paėmiau skrodimui- švietė vos keli LED.
Skrosti buvo sunku- stiklas priklijuotas silikonu. Bet biški manipuliacijų peiliu ir atsidarė.

osram ledvance 50w crap LED
Read the rest of this entry »

TI-99/4A mygtuko remontas su 3D printeriu

March 1st, 2021

Tobulėjant 3D spausdinimo technologijom, atsirado galimybė pakeisti kai kurias sulūžusias plastikines detales. Mano senoviškam TI-99/4A kompiuteriui pašto ir kurjerių tarnybos darbuotojai (ne be nemokančio pakuoti pardavėjo pagalbos) nulaužė 3 klavietūros mygtukus.

3D printed replacement key for TI-99/4A computer
(nuotrauka pasididina)

Baltos spalvos- originalas, permatomi- šiuolaikinis pakaitalas. Kairėje pusėje matosi brokas- ne iš pirmo karto pavyko “nulipdyti" tinkamą detalę, kuri atitiktu visus dydžius. Pačios detalės 3D modelis idiotiškai sudėtingas. tačiau pavyko ko gero iš 4 karto.

Jei kam reikia, 3D modelį, STL formate galima nusikrauti čia:
3D model in STL format for TI-99/4A keyboard key.

Dėmesio! Šis modelis yra dešimt kartų (x10) didesnis nei reikia. Paprasčiausiai, su mano turima 3D programa taip lengviau paišyti. Spausdinant užtenka sumažinti dešimt kartų ir viskas kaip ir gavosi.

P.S. Arklys irgi brokuotas. Kol kas mažiau nei savaitę turiu šį printerį ir dar nelabai žinau visas prigulnybes.

Vectrex

February 18th, 2021

Kol gaminausi vektorinį displėjų, pavyko eBay nupirkti neveikianti originalų Vectrex kompiuteriuką:
Vectrex

Remontas buvo labai trumpas- išsiurbliuoti dulkes ir pašalinti susvilusį power mygtuką.

Daugiau nuotraukų kolekcijos puslapiuose.

Trumpai- tai vienintelis buitinis vektorinis žaidimų kompiuteris. Atari asteroids buvo arcade tipo žaidimų automatas.

Unhappy Tikbalang