Šamanistinis žiedas II

Kažkada rašiau apie varinį žiedą. Kai jį dariau, pirmasis variantas gavosi per didelis- kažką ten blogai nužiūrėjau užrašuose ir padariau per didelį. Tai tas ruošinys ir mėtėsi garaže ant varstoto.
Maždaug prieš savaitę gimė įdėja padaryti ką nors sudėtingesnio. Ir gavosi va toks žiedas:
Varinis ziedas su runomis
(beveik visos nuotraukos išsididina)

Toliau bus daug foto: Continue reading →

ARM:0010 grafinis LCD

Tai palengvinta grafinio displėjau valdymo programa. Ji neturi daugybės opcijų ir šiaip ribota. Tai pagrinde lenko Radosław Kwiecień programa, aš ja kiek adaptavau mano stiliui ir prirašiau minimalistinę paprogramę proporciniam šriftui. Deja, šriftas tik 8 pikselių aukščio ir pozicionuojasi Y ašyje kas 8 pikseliai. X ašyje viskas gerai- galima pastumti per vieną pikselį.
Proporcinis šriftas nupaišytas pagal originalų tekstinių LCD šriftų vaizdelį, tik perdarytas proporciniui variantui. Čia man padėjo java programa iš AVR grafinių LCD paketo. Ten viduje failo yra nuorodos.

ARM SAM7S graphic LCD
Kadangi SAM7 turi daug kojų, tai pajungtas ir grafinis ir tekstinis LCD.

Mano turimas LCD tai pats pigiausias kiniškas LCD su KS0108 kontroleriu. Jo vaizdelis invertuotas, todėl jau ne kartą minėtąpenis harder” paveiksliuką teko invertuoti.

Horse penis harder on small LCD LOL
Kadangi sumažinto teksto neįmanoma perskaityti, šukį be kurio paveiksliukas negalioja perrašiau naudodamas savo teksto rašymo paprogrames. Dar viršuje rodomas laikas nuskaitytas iš RTC mikroschemos.

Šio posto source code ir hexas:
Grafinio LCD ARM SAM7S source code ir hex, hexas sukompiliuotas Atmel AT91SAM7S256AU serijos čipui.

ARM:0009 RTC HT1381

Čia tos keistos Holteko HT1381 mikroschemos, kur prisilupinėjau iš šroto. Viskas tas pats kaip ir AVR versijoje, tik perrašyta taip, kad suprastu SAM7 mikroschema. Nieko stebūklingo.

ARM SAM7 HT1381 RTC

Ten per viduriuką rodo laiką kiek turi savyje holtekas. Čia ką tik įjungta, tai tik 00:01:48.

Source kodas ir kompiliuotas hex failas:
ARM SAM7S ir Holteko RTC HT1381 source code ir hex, hexas sukompiliuotas Atmel AT91SAM7S256AU serijos čipui.

ARM:0008 taimeris

Pagaliau prisikasiau prie taimerio ir pertraukimo pagal taimerį. Tai bene dažniausiai naudoja taimerio funkcija- gi tereikia kas kažkiek laiko apsiklausti visokios periferijas ir apdoroti rezultatus. O kitą laiką kontroleriukas miega ir taupo elektrą. Šiame pavyzdyje MCU elektros dar netaupo, tačiau taimeris veikia.
Programa sulipdyta iš interneto lobių. Tik kiek pakeistos kai kurios vietos, kad man būtų suprantamiau.

ARM SAM7S timer
Čia matosi, kaip softas bando organizuoti 1ms (1000Hz) pertraukimą. Pertraukimo metu invertuojama viena koja ir ją galima pamatuoti su oscilografu. Nežinau kas kaltas, bet gavosi 984.4μs (1016Hz). Kas kaltas dar nežinau- aš nuskaitau vidinį MCU dažnį ir perskaičiuoju automatiškai dalinimo koeficientus. Vartotojui-programuotojui tereikia tik įvesti norimo intervalo dažnį hercais.

Source kodas pasidarė dar labiau modulinis- pertraukimas pagal taimerį faile “timeris.c”, o PIO kojų pertraukimą perkėliau į “pioint.c”. Taip lengviau man bus “klijuoti” būsimas programas.

Viskas kompiliuojasi per GCC toolchainą Yagarto, make failas dar sugeba per J-Linką suprograminti į mikroschemą.

ARM SAM7S taimerio pertraukimo source code ir hex failas, hexas sukompiliuotas Atmel AT91SAM7S256AU serijos čipui.

Dar galima pastebėti, kad daug kas persikraustė į pertraukimus.

ARM:0007 I2C ir LM75 ar FM75

Dar vienas atmintinukas- SAM7 ir I2C. Šį kartą visas I2C softas drožtas nuo Sun Microsystems. Jį pasirinkau, nes viskas labai gražiai suprogramuota, yra padaryti avariniai taimautai ir panašiai. Kiti internete prieinami sourcai buvo labai kreivi ir be taimautu- jei I2C sleivas nerastas ar neatsiliepia, tai SAM7 paprasčiausiai užsikemša. Aišku čia viskas labai paprastai padaryta, jokių fancy efektų.

ARM SAM7 I2C
Čia vėl netolygus ekranas dėl per dažno perpaišymo. Dar pastebėjimas- LM75 ir FM75 negalima per dažnai klausinėti apie temperatūrą. Vienas iš jų pradeda visada sakyti tą pačia temperatūrą, kitas išviso prabyla 0xFF skaičiais. Dar negalima labai eksperimentuoti su I2C (TWI) greičiais.

ARM SAM7 I2C debug
Buvau pajungęs defektuotą LM75 mikroschemą, tai ilgai knisausi. Net teko pajungti sniferį ir žiūrėti kas ten dedasi. Ta, ore pakibusi plokštelė yra LM75 slave board nulupta nuo plazminio teliko matricos. Jos ten monitorina ar neperkaito telikas.

Nu ir aišku:
ARM SAM7 I2C source code ir hex, hexas sukompiliuotas Atmel AT91SAM7S256AU serijos čipui.

ARM:0006 SPI ir eprom

Dar vienas atminties rezervas. Šį kartą, prie esamo softo kur buvo pertraukimai dėl kojų pridėtos papildomos paprogramės leidžiančios skaityti-valdyti 25XXXX serijos SPI mikroschemas. Softas tiesiog trauktas dalinai iš interneto, dalinai iš senų mano AVR bibliotekų. Softas išbandytas tik su viena mikroschema ir tik skaitymo režime. Tačiau spėju, kad viskas turi veikti.

Taigi, brain dump, Atmel SAM7 ir SPI.
ARM SAM7 SPI
Eilutė ADR rodo EPROM adresą ir reikšmę tame adrese. Vaizdelis toks pas LCD “brukšniuotas” dėl to, kad LCD per dažnai perpaišomas.
Status ir info eilutės liko iš ankstesnio posto softo.

Nu ir aišku:
ARM SAM7 SPI source code ir sukompiliuotas hexas, hexas aišku sukompiliuotas Atmel AT91SAM7S256AU čipui.

Randominizatorius

Vienoje vietoje prireikė nepriklausomo “randominizatoriaus”. T.y. prietaisiuko, kuris su žinoma matematine tikimybe pasako “True” arba “False”.

Random

Veikia taip- paspaudi mygtuką ir su maždaug 8% tikimybe užsidega raudona spalva, kitu atveju užsidega žalia spalva. Spalva šviečia maždaug 3 sekundes. Dar kas kažkiek sekundžiu 3 milisekundėm mirkteli mėlyna spalva- čia kad priminti, kad prietaisas veikia.
Nežinau kaip bus toliau, bet teoriškai prie randominizatoriaus jungsis kažkokia periferija. Tačiau čia tik prototipas.
Viskas padaryta ant Atmelio minimalistinės mikroschemos – AT90S2343. Panaudojom mano PCB47415.
Softas labai paprastas- pagrindiniam cikle sukasi skaitliukas 0-255. Jis sukasi visada ir ant pilno greičio. Kiek jis ten sukasi nežinau, bet MCU taktinis dažnis artimas 1MHz.
Tuo tarpu kiek letesniu greičiu taimeris tikrina mygtuko būseną. Jei nuspaustas, lygina random skaičių su konstanta. Pagal tai ir sprendžia kokia spalvą užžiebti. Gal ir nėra gerai, dėl atsitiktinių skaičių mygtuko apklausos naudoti taimerį- jis gi susijęs su procesoriuko dažniu ir gal gaunasi kokia matematinė priklausomybė? Tačiau per tą patį pertraukimą dar kartais užžiebiamas mėlynas LEDas ir šiaip. Žodžiu, lygtai skaičiai ir atsitiktiniai gavosi.
Būtent atsitiktimumą apsprendžia žmogus paspaudęs mygtuką.

Softo source code ir kompiuliuotas failas:
Source code and hex for Atmel MCU.

Beveik Midsomeris ir biški dar

Nu jo, ir dar biški iš to pačio. Tikriausiai kai kurie žino tokį filmą serialą- Midsomerio žmogžudystės. Nu va toks va toks:
Littledean = Misomer?
Nepanašu? Nu šiandien mano fotošopas blogai dirba. Bet sekanti foto tikrai suteiks tą reikiamą atmosferą:
cattle and graveyard
Nu jau pajutot? Čia buvau 3 dienas- dvi su reikalu, vieną tik kad lėktuvėlio bilietuko neturėjau. O poto, traukinukais ir autobusais į Čiukotkos sostinę. Čia pagal planą manęs laukė vienas muziejukas.
O dabar prasidės bambesiai ir kritika. 🙂
A tiesa, dar vienas gadgetas kuris kiek sudomino. Tiesa nelabai žinau kas tai per vienas, tačiau logiškai išmasčiau, kad čia lazerinio atstumo matuoklio atšvaistas. Gal.
laser reflector
Tikriausiai matuoja sienos poslinkį. Gal netgi labai preciziškai- bijo, kad metro tunelis neužsikimštu.
Taigi, šio straipsnio muziejus- Natural History Museum. Prieš savaitę žiūrinėjau kitą muziejų toje pačioje gatvėje, Science Museum, tai gal kiek paveikė mano nuomonę. Beja apie mokslo muziejų kažkodėl ir neparašiau. Gal parašysiu vėliau- paprasčiausiai nespėjau parašyti ir teko išvykti. Taigi, trumpas verdiktas anot vieno žmogaus- “kažkoks naivus”. O mano nuomonė kiek piktesnė- kaip pastatė ekspoziciją kokiais 84 metais, tai taip ir liko su nedideliais pakeitimais. Netgi dulkes nelabai valė, o “čiučelos” visai išbluko ir nušiuro. Čia tos, kurios ne iš gipso ar plastiko. Žymiai gražesnes aš mačiau Tado Ivanausko muziejuje. Tiesa jame buvau… tarybiniais laikais. Tai gal ir musiškes kandis suėdė? Gal buvot, matėt?
Bent jau mano atmintim, tai musiškiam tikrų eksponatų žymiai daugiau nei angliškam… Tiesa, mūsų specializuojasi gyvuliukuose, o ten visko po truputi. Kad ir mineralais visokiais pripildytos lentynos. Tiesa, lempas reikia perdegusias pakeisti, dulkes nušluostyti ir dar kur maži vaikai stiklus nučiulpė.
gamtos muziejus
O dabar pabambėsiu kaip tikras mizantropas– gerbiami tėveliai ir mamytės. Kol jūsų atžala dar tebėra lervos stadijoje, nafig tempti jį į muziejų. Jis dar tik cypia ir varto akis. Ir jam dzin tas muziejus. Kai jūsų atžala jau išmoksta vaikščioti ir kiek mąstyti, paaiškinkite, kad interaktyvius eksponatus reikia naudoti pagal instrukcijas, kad suprasti kokį nors reiškinį ar efektą. O ne beprasmiškai daužyti iš visų jėgų. Ir dar pažiūrėkit- gal jūsų atžala nėra labai protinga ir papildys paprastų TV žiūrėtojų minią. Ir jiems vistiek nesuprantama kuom skiriasi “digitigrade” nuo “plantigrade” ar “ungulates”. Ir koks ryšis tarp “Digitus” ir “Digital” 🙂
Taip pat nereikia tempti į tokius muziejus paauglių kurie tuom nesidomi- nes jie tik šliaužia lėtu tempu akis įbedę į savo mobilius telefonus.
Pagrindiniai tokių muziejų tikri lankytojai tai jauni ir nelabai jauni tėveliai (t.y. vyrai) kurie gana smalsiai studijuoja eksponatus. 🙂
Dar kiek nustebino siuvenyrų kainų logika- onikso akmens bliūdelis kainuoja £4, o plastikinis kiniškas puodelis- £7.
Daugiau kaip ir nėra ką pasakoti. Gal kiek nustebino žalių papūgų gausa Haid parke…

ARM:0005 arba paprastas PIO kojų pertraukimas

Gali kas nors paklausti, kam aš rašau šituos trumpus straipsnius. Ogi pirmiausia, čia yra mano “brain dump” -papildoma atmintis. O antriausia, pilnas internetas tų pačių straisnių apie šitą reikalą… bet visi arba rašo apie tą patį pavyzdį nuo atmelio arba jau šneka apie labai advanced versijas.
Ir net pavyzdys nagrinėja iškarto keletą pertraukimų, o norisi suprasti kur kas eina kiekvienam atskirai. Taigi pertraukimas (interrup) pagal PIO. Nu tipo pagal kojas bendrai.

PIO Int handling in ARM MCU
Viskas iš pradžių pasirodė paprasta, bet neveikė :). Todėl ilgai ir nuobodžiai guglinau ir bandžiau. LCD ekraniukas rodo minimalistinę informaciją: pirmoje eilutėje šiaip pavadinimas. Antroja, kur “STATUS”, rodo kintamojo reikšmę kuri keičiasi tik pertraukime. Trečioje eilutėje- širdelė. Tai pagrindiniam cikle, po įvairiausiu skaičiavimu paišomos mažesnės ir didesnės širdelės. Jei širdelė pulsuoja, reiškia, kad pagrindinis ciklas dar dirba ir softas neužstrigo.
Ir paskutinė eilutė, kur “INFO”. Čia paprasčiausiai nuskaitoma informacija iš visų MCU kojų ir parodoma. Kaip diagnostika.

Softas paprastas- pagrindiniam cikle sukasi daug pauzių, pulsuojama širdelė, nuskaitoma porto būklė ir parodoma per LCD ekraniuką, ir rodoma kintamojo reikšmė.
Tuo tarpu, trys kontrolerio kojos suprogramuotos kaip mygtukai į žemę kai nuspausta. Normalioje būklėje daroma pull-up. SW0 didina skaičiaus reikšmę, SW1 mažina reikšmę, o SW3 nulina.
Nuspaudus bet kurį iš SW mygtukų, iššaukiamas pertraukimas kuris ir atlieką darbą. Puikiausiai skaičiuoja kontaktų drebėjimo skaičių. Todėl nenustebkit, kad paspaudus mygtuką skaičius pasikeičia keliais vienetais ar šimtais- čia taip turi būti.

Pagrindiniai atradimai šioje programoje- kad negalima pasirinkti bet kokio pertraukimo tipo. Nes nuo “edge” trigerių kažkodėl pertraukimo softas užspringsta.
Ir dar sužinota, kad LCD paprogrames reikia patobulinti… ir jos patobulintos. Dabar teoriškai lygtai LCD veikimas nebeiškraipo kitų MCU kojų konfiguracijų. Čia ypač liečia “direct drive” ir “pull-up”.

ARM PIO INT testo source code ir hex failas, hexas aišku sukompiliuotas Atmel AT91SAM7S256AU čipui.

ARM:0004 arba paprastas serial

Trumpas papildymas- kiek pataisyta LCD biblioteka (ir senam poste pataisyta: pakeista pauzės formavimas, kai kurie parametrai, inicializacija. Dabar LCD ekranas pasileidžia iš karto).
O šiaip šitas postas apie patį primityviausią serial duomenų perdavimą naudojant UARTą. Čia nenaudojami jokie interuptai ir panašiai. Paprasčiausiai tiesiogiai surašomi duomenys į reikiamus portus, ir jei reikia nuskaitomi.

ARM serial testas LCD
Visa informacija rodoma per LCD ekraniuką. Antroje eilutėje matosi ką tik išsiustas baitas, kiek dešiniau paskutinis priimtas baitas. Užtenka pirštu sujungti IN su OUT ir atsikartoja informacija- gaunasi kaip ir loop-back testas.

Ta CPU clock eilutė grynai informacinė. Kažkur radau internete, kad taip galima sužinoti esamą CPU taktinį dažnį. Tai va kažką ir rodo. Tiesa dažnis kartais keičiasi.

ARM serial test ir LCD source code ir hex, hexas aišku sukompiliuotas Atmel AT91SAM7S256AU čipui.