Monthly Archives: February 2014

Dzin budizmo maldų mašinėlė

Sveikiname visus dzin-budizmo gerbėjus. Siūlau susikonstruoti šį maldų mechanizmą.

dzin budizmo maldu malunelis

Labai ramina nervus, tiesiog galima sukti rankose ir jūsų ramybės ir dzin koeficientas tik kyla ir kyla. Dėmesio, jei šalia stovi kokie nors ne dzin budizmo pasiekėjai tai tada galimos problemos- mašinėlė kažkaip sugeba ištraukti kantrybę iš aplinkinių. Todėl tie pašaliniai gali jus aprėkti, švelniai primušti ar net atimti kulto priemonę. Būkite saugūs.


Čai filmukas nekokybiškas, kuris rodo, kad visdėlto ji sukasi.

O jei rimčiau, pabaigiau, bent jau kiek man reikėjo, dantračių paišymo softą. Po daugybės metų panaudojau mokyklines žinias apie sinusus, kosinusus ir net arcsinusus. Eiktupeklon!

Lazerio optikos tobulinimas

Kiniškas lazeris padarytas bet kaip. Šita jau žinojau. Šiandien norėjau apžiūrėti kaip padarytas fokusuojantis lęšiukas ir kaip ji ten patobulinti su oro tiekimu. Pakeliui, jei reikia, išplauti galimas nuosėdas. A dar, papildomai nusipirkau atsarginį stikliuką.

CO2 laser bad focusing lens holder
Kita pusė- paprasčiausias lygus aliuminio gabalas su kreivai išgręžta skylute. Jokio idubimo lęšiukui nėra. Kai prisuki, lešiukas grubiai traiškomas tiesiogiai aliuminio.
Continue reading →

AVR55:dar vienas LCD iš telefono

Seniai mėtėsi stalčiuje, niekaip nekilo rankos jį pajungti. Tačiau kažkaip papuolė po ranka. Tai tikriausiai iš kokio senoviško Siemens telefono LCD ekraniukas su kodu “M15SGFNZ07”, spėtinai iš Siemens A65, M55, C60, MC60, S55, A60 ar panašiai.
Jungiasi per 3V logikos, ir toks pats maitinimas. Pinoutas žiūrint nuo siauresnės ekrano dalies, iš kairės (kai ekrano jungtis kairėje apačioje):
1-CS
2-RESET
3-RS
4-SCL
5-SDA
6- +2.9V Vcc
7- GND
8- LED1+
9- LED1, LED2 GND
10- LED2+

Ties SCL ir SDA tik šiaip panašūs į I2C. Ištikruju ten žymiai paprastesnis protokolas.
Kiek paguglinus buvo rasti du šaltiniai- kažkokio lenko kūryba ir vienas Lietuviškas saitas. Lietuviškas buvo Arduino variantas, todėl jo per daug nesinagrinėjau. O lenko kūryba pasinaudojau, kad bent jau kažką rodytu. Poto gana daug perrašiau pats ir optimizavau. Gavosi kaip ir biblioteka kuri dalinai high-level sutampa su kitų ekraniukų valdymu. Todėl nėra problemų perkelti projektą iš vieno ekraniuko į kitą. A, dar, proporcinis šriftas, nes su monospace ant tokio ekraniuko (100*80) nelabai prasisuksi.

LM15SGFNZ07 ATMEGA AVR
Dėl spalvų tai nežinau- ar tas LCD toks prastas, ar blogai sureguliuotas kontrastas. Beja, šis ekraniukas yra žiauriai lėtas. T.y. pats skystas kristalas lėtas.

Šiaip, dar vienas momentas- čia naudojamas softwarinis SPI. Nes eksperimentuojama buvo ten kur SPI naudojamas kitais tikslais. Tačiau nėra didelė problema padaryti per hardwarinį SPI. Tik vienoje vietoje reikia kiek pakeisti kodą.

Nu ir žinoma:
M55 Siemens LCD ekraniuko AVR source code ir kompiliuotas hex failas (ATMEGA16)

Dantračiai, lazeriai ir matematika

Jei turi pjaustanti lazerį, tai reikia būtinai išsipjauti kelis dantračius. 🙂 Čia toks įstatymas tikriausiai.
Tačiau dantratis yra ne šiaip abstraktus piešinys, o griežtas matematinis reiškinys. Todėl rankomis dantračio nenupaišysi… Yra specialus softas paišyti dantračius. Tačiau vienas softas mokamas, o kitas softas neduoda vektorinio paveiksliuko reikalingo lazerio pjovimui. Ką daro tokiu atveju Levas? Aišku iš pradžių stipriai guglina. Poto nervuojasi, poto prisimena, kad kiekvienas CorelDraw softas savyje turi Visual Basic.
Todėl pirmiausia bandoma bet kaip programuoti… poto suprantama, kad dantratis yra siaubingai sudėtingas. Ir kad jam galima pritaikyti daugybę parametrų. Kad kai kurie parametrai kinta nuo dantračio diametro…

Taigi, kaip paišyti dantračius Corelyje:

Spaudžiam čia:
coreldraw draw gears cogs
Continue reading →

ARM:0016 pertraukimai WTF?

Kartas nuo karto, kai būna laiko vis paknibinėju ARM procesoriuką. Bet kuo toliau, tuo labiau jis mane nervuoja. Šį kartą pašnekėsim apie pertraukimus dėl PIO kojų lygio pasikeitimo…

Biški veikia ir biški veikia keistai…

Susikonfiguruoji koją kaip input:

AT91F_PIO_CfgInput( AT91C_BASE_PIOA, RTC_INT );

Pagalvoji, kad kojai reikėtu pull-up:

AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, RTC_INT );

… pyst neveikia iškarto. Nebereaguoja. Tai šitą eilutę užkomentuojam.

Dėl šito nežinau ar reikia, bet eksperimente panaudojau:

AT91F_PIO_CfgInputFilter( AT91C_BASE_PIOA, RTC_INT );

Dabar konfiguruojam pačio pertraukimo valdymą:

//* configure PIO interrupt and handler
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC,
AT91C_ID_PIOA,	// pertraukimo tipas.
INT_LEVEL,	// pertraukimo lygis
//AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL , 	// nesuprantu kas sukelia pertraukima
AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE , // nes visi sitie veikia vienodai
//AT91C_AIC_SRCTYPE_POSITIVE_EDGE, // visiskai. Nesamone.
ISR_PIO_handler); // paprograme atliekanti INT apdorojimą

Ir kaip parašyta komentaruose, visiškai pofig ką ten konfiguruoji- ar low_level ar external negative edge ar positive edge pertraukimas iššauna visada. Į RTC_INT koją padaviau 1Hz signalą kuris ateina iš nepriklausomo šaltinio. Taigis pertraukimas šaudo ir kai būna LH ir HL perjungimas. Ir visiškai dzin ką ten rašai.

Kita pastebėta nesamonė- nesugebu išjungti pertraukimo. Pas AVR procesoriuką, vieną asemblerio komanda ir pertraukimai išjungti. Čia jau ne. Tačiau yra “makro” komandos:

//AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);
//AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);

Atrodo kaip tik tas- išjungia pertraukimus pagal PIO. Praktiškai viskas žymiai blogiau. Ta išjungimo komanda susideda iš kelių komandų. O procesorius taigi dirba “asinchroniškai” (pipeline). Ir taip gaunasi, kad kažkuriuo momentu kažkas susimaišo protelyje pas ARMą ir pertraukimas nebeveikia.
Programa tokia: sukasi amžinas ciklas kuris ant spalvoto LCD ekranėlio paišo mažus kvadratėlius ar linijas (tai ne žaidimas), o pertraukimas, kas 1 sekundę parašo- atnaujiną laiką ant to pačio ekrano. Grafinio ekrano paišymo subtilybė- kad nupaišyti primityva atliekamos kelios komandos. Ir jų seka svarbi. Todėl, teoriškai grafinio paišymo metu pertraukimas turi būti išjungtas. Išjungia pertraukimą, nupaiš0 kvadratėlį, įjungia pertraukimą. Ir kai pertraukimas suveikia, ant to pačio ekrano parašo laiką. Ką jus manot? Ogi figuški- per mažiausiai 10 sekundžių, daugiausiai per porą minučių pertraukimas sugenda. Jei nejungti pertraukimo blokavimo, viskas veikia ilgai, tik ant ekrano atsiranda artefaktų dėl nekorektiško valdymo. Programėlę reikia rašyti kitaip, nei įprasta pas ATMEGAs…

Laukių komentarų žmonių kurie žaidė su SAM7 čipu.

Beja, int handleris:

__ramfunc void ISR_PIO_handler(void)
{
volatile unsigned int pin_mask = AT91C_BASE_PIOA->PIO_ISR;
// Int patvirtinimas-isvalymas. Be jo neveikia.

	if(pin_mask & RTC_INT)
	{
	if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & RTC_INT) == 0 )
		{
			AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, _BV(15));
			AT91F_PIO_SetOutput( AT91C_BASE_PIOA,_BV(15));
		}
	}
AT91F_AIC_ClearIt(AT91C_BASE_AIC,AT91C_ID_PIOA); // clear interrupt
AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);	// acknowledge interrupt
}

gal čia kažką neteisingai parašiau?