Monthly Archives: December 2018

Postkriptovaliutinis pasaulis

Tikriausiai jau visi pastebėjot, kad kriptovaliutinis vajus nuslobo ir viso to reikalo vertė pasiekė logišką galą. Tačiau męs gyvenam post kriptovaliutiniam pasaulyje ir dar liko visai panaudotinos hardwarės. Vienoje vietoje buvo daug tokio gėrio- iki 70kW elektros imdavo iš elektros įvado. Dabar, kai visa tai nelabai reikalinga, galima įrangą panaudoti eksperimentams. Todėl pasiskolinau vieną komplektą pasižaidimui. Tiesiogine prasme ir nelabai.

RT580 crypto leftovers
Nuotraukoje matosi, kad vienos video plokštės (Radeon RX580 Nitro+ 8G) jau nėra, nes ji įsukta į mano naminį kompą. Nes aš taip ir nenusipirkau naujos video plokštės poto kai sudegė manoji.
Continue reading →

AVR92: Kiniškas rotary encoder

Va kartais internetas nepadeda. Prireikė į vieną projektą sudėti valdymui rotary encoderį. Tą su sukiojama rankenėle. Projekto sąlygos, kad tas enkoderis bus pats prasčiausias kiniškas. Ir jokios papildomos hardwarės. Tingėjau programuoti pats, ir pamaniau, kad tikrai kas nor pridėjo visokiausių pavyzdukų AVR (ir ne tik) kontroleriams. Aha, pridėti kalnai, bet visi kopypaste vienas nuo kito.

Išsiskiria keli variantai:
1. Naudojamas INT ant MCU kojos (LH) ir patikrinama kita enkoderio koja. Ir tas pats su kita koja. Sunaudojami du INT. Galima ir INT nuo vienos kojos, bet reikia tikrinti LH ir HL variantus. Viskas gerai teoriškai arba naudojant optinius enkoderius. Naudojant kiniškus, mechaninius- daugybė trukšmo nuo persijunginėjimų ir rezultate kalnas pertraukimu ir falšyvi suveikimai. Praktikoje- enkoderis pavirsta atsitiktinių skaičių generatorium.
2. Naudojamas main loop amžinas ciklas ir daroma viską softwariškai. Kad apsisaugoti nuo kontaktų kibirkščiavimo dedami programiniai uždelsimai. Kas suėda procesoriaus ciklus.
3. Ir dar yra per taimerį, arduino bibliotekos kurios source supranta tik cpp fanatai ir šiaip vartojantys kokią žolę. Aišku, naudojant aukšto lygio arduino makro programavimą viskas tikriausiai veikia. Bet kai reikia daryti optimizuotą ir eksportuojamą kodą prasideda nesamonės.

Todėl susinervinau ir pasirašiau savo variantą. Veikimas supaprastintas visiškai ir eina per taimerį. Taimerio greitis kažkur 200Hz (0.005s). Toks greitis kaip tink tinka mano naudojamam enkoderiui ir protingam sukimo greičiui. Panaudojus per didelį sukimo greitį enkoderis dažniausiai praleidžia impulsus, gal net ir sustoja ir kartais pavaro ne į tą pusę. Tačiau sukant normaliai arba labai lėtai viskas gerai veikia.

ISR(TIMER1_COMPA_vect)
{
unsigned char d,a,b;

d=PIND & 0b00001100;
if(d != old_d)
{
a=0; b=0;
if(d & 0b00000100) a=1;
if(d & 0b00001000) b=1;

if(inta==0 && a==1) rotar=rotar+b;
if(intb==0 && b==1) rotar=rotar-a;

inta=a;
intb=b;
old_d=d;
}
}


Veikimas paprastas- pirmiausia pasitikrinam, ar kas nors iš esmės pakito (old_d) ir jei nieko nebuvo, tai tepam slides, nes reikia taupyti MCU. O jei jau pasikeitė, tai analizuojamės. Aišku reikėtu nenaudoti to “d & 0b00000100”, bet aš dar nenusprendžiau, kas bus toliau. Ir aišku, kintamieji “rotar”, “old_d”, “inta” ir “intb” yra globalūs ir “volatile”.