Category Archives: MCU

Dvigubas maitinimo šaltinis

Kaip sakoma, geriau vieną kartą pamatyti, o ne šimtą kartų išgirsti. Taigi va, daug fotkių. Komentarai bus vėliau. Fotkės pasididina. Tai dvigubas izoliuotas maitinimo šaltinis. Jis man nelabai patinka dėl visokių klaidų ir nepribaigimų. Kitą darysiu geresni. Tačiau kiek pasimokėm apie ADC, srovės ir įtampos matavimą, apie izoliuota procesorių bendravimą, apie AVR ir ARM darbo subtilybes. Jis man net vieną kartą nukrito nuo stalo, todėl patariu, naudokit gumines kojytes savo konstrukcijai.
Šiaip aparatas kaip ir veikia, tačiau voltmetrai-ampermetrai netikslūs ir reikia stabilumo, pats aparatas perkaista dėl kiniškų trafų kokybės…

Parametrai 2x apie 13V max, gal amperas. Prie žemesnių įtampų keli amperai. Pilnai izoliuoti, galima jungti nuosekliai, tada įtampa kažkur apie 24V.

Vėliаu surašysiu viską po nuotraukom ir gale sudėsiu softą tiek AVR, tiek ARM procesoriukams. Gal kam prireiks.
Continue reading →

Darbo laiko apskaitos laikrodis

Jo. Pažiūrėjus į šią nuotrauką, blogo skaitytojai pasakys- jo, jau toks buvo. Ir jie bus biški teisūs ir biški ne. Nes pats VFD laikrodukas jau buvo.

VFD darbo laikrodis
Čia jau kitoks principas ir užduotys. Šis laikrodis skaičiuoja darbo laiką, kiek liko iki pietų ar darbo pabaigos, dar rodos kiek liko iki “perekūro” ir kiek laiko iki perekūro pabaigos.
Nuo seniau aprašyto modelio šis laikrodis skiriasi tuom, kad jis neturi nei vieno valdymo mygtuko. Viskas valdosi per originaliai displėjuje stovinti RS232. Valdyti terminalo programa, ypač, kai serial portas išnaudotas ir displėjui sunkoka. Nes nėra atbulinio ryšio- pas panaudota ATMEGA8 tik vienas UARTas ir jis priima valdymo komandas ir pats valdo ekraną.
Continue reading →

CYPRESS 001: softwarinis USB pasišnekėjimas

Pirmiausia- disclaimer: nieko dar nesuprantu, todėl čia milionas klaidų. Šiaip tai užrašai, kad neužmirsčiau kaip dariau.

Darom naują folderį, jame naują uVision projektą: usbsoft, pasirenkam čipą. Pakeičiam projekto pavadinimą į USBIS.
Į naują folderį kopijuojam failus iš pavyzdinio projekto “bulkloop”:

fw.c – usb firmware.
dscr.a51 – usb įrenginio aprašymas.

folderį inc, kuriame yra: Fx2.h, fx2regs.h, fx2regs.inc, fx2sdly.h, syncdly.h. Šiaip jie visi nereikalingi, ir šiaip galima susikonfiguruoti, kad imtu iš inkludų bibliotekos. Tačiau dar nemoku.
folderį lib, kuriame yra: EZUSB.LIB, USBJmpTb.a51, USBJmpTb.OBJ (tas pats komentaras kaip ir su inc).

Kopijuojam failą “bulkloop.c” ir jį persivardinam kaip savo, sakysim “pimpis.c”.
Failą pimpis.c, fw.c, EZUSB.LIB, USBJmpTb.OBJ, dscr.a51 prikabinam prie projekto.

Kaip ir senesnėje žinutė modifikuojam projekto nustatymus (Options for Target ‘USBIS’): output->create hex, “BL51 Locate” nuimam varnelę, o grafoje “Code Range:” rašom “0×80-0×0FFF”, o “Xdata Range:” rašom “0×1000″.

Failuose “fw.c”, “pimpis.c” … reikia pataisyti nuorodą į inc folderį, nes pas mus jis biški kitaip stovi. Arba folderius iškelti aukščiau. Kol kas, kad nesigadinti, ir kad būtų pilnai “portable” pakeičiam:

#include "inc\fx2.h"
#include "inc\fx2regs.h"
#include "inc\syncdly.h"

Dabar viskas turėtu susikompiliuoti be klaidų ir ispėjimų. Pradedam modifikuoti “pimpis.c” kodą:

Mūsų pradinėm reikmėm yra dvi paprogramės:
Tai inicializacijos TD_Init(void) kurioje surašoma viską ką reikia inicializuoti įjungiant mašinėlę. O kita mums labiausiai dominanti funkcija- TD_Poll(void) kuri visada sukasi, kai tik būna laisvas procesoriukas.

Ten pavyzduke yra zonos kurios prasideda if(!(EP2468STAT & bmEP2EMPTY))… ir if(!(EP2468STAT & bmEP4EMPTY))… va jas pilnai perdarom į nepriklausomas:

if(!(EP2468STAT & bmEP2EMPTY)) { ... } // bulk endpoint 0x02
if(!(EP2468STAT & bmEP6FULL)) { ... } //bulk endpoint 0x86
if(!(EP2468STAT & bmEP4EMPTY)) { ... } //bulk endpoint 0x04
if(!(EP2468STAT & bmEP8FULL)) { ... } //bulk endpoint 0x88

Šios zonos iškviečiamos kai gaunamas užklausimas iš hosto kaip “Bulk in endpoint” ir “Bulk out endpoint” su atitinkamai numeriais. Tie patys endpoint aprašyti “dscr.a51” faile. Bet kol kas neliečiai nei VID/PID nei USB aprašymo.

Kitų paprogramių kol kas neliečiam. Dar į pimpis.c įmečiau kelis globalius kintamuosius, kad persinešinėti informaciją.

Programos veikimo principas toks, kad pagal išorines užklausas atliekam veiksmus su buferiais EP2, EP4, EP6 ir EP8. Dėmesio yra dvigubas buferizavinas, todėl nereikia stebėtis, kad kai kurie informacijos pokyčiai atsiranda “pavėluotai”, tik po antro užklausimo. Nugi dvigubas buferis.

Eksperimentinė programa daro tai:
Host rašymo užklausa 0x02 papračiausiai pasiima vieną baitą iš USB paketo ir paruošia buferį naujam darbui. Aš nesu tikras, ar tik nereikia du kartus pakartoti “rearm” komandos?
Host rašymo užklausa 0x04 irgi protingo nieko nedaro- bando nusiskaityti siustų duomenų ilgį ir šiaip skaičiuoja užklausų kiekį. Informacija pasideda į globalius kintamuosius.
Host skaitymo užklausa 0x86 paprasčiausiai kopijuoja tekstą į USB buferį ir jį persiunčia į hostą.
Host skaitymo užklausa 0x88 paprasčiausiai išspjauna “XXX” seriją, tik keli baitai pakeisti į įvairius seniau surinktus globalius kintamuosius.

Tai tik tiek. Bendravimas su hardware daromas su Cypress USB Control Center
Cypress USB control center

Dabar galima pagal USB užklausas atlikti kokius nors primityvius paskaičiavimus. Tačiau tai softwarinis sprendimas, čia nėra atliekamas tiesioginis GPIO valdymas (Ports mode). Visgi tik antra- pirma pamokėlė. 🙂

Cypress FX2LP soft USB source code.

SIAscope

Kažkada ieškojau žmonių kurie padėtu suremontuoti apgamų mikroskopą SIAscope. Ten kartu su ASTRON Clinica softu toks šūdinas USB mikroskopas su R, G, B, W, IR LED pašvietimu. Viskas padaryta ant Cypress EZ – USB FX2LP čipo ir dar stove ATMEGA48 kuri gal valdo LEDus… o gal užsiima kenkėjiška veikla.
SIAscope vibratorius
Dabar kai daug kas paaiškėjo, norėtusi biški pabambėti ir gal kam nors bus sutaupyti pinigai. Nes šito prietaiso esmė- pinigai.
Continue reading →

VFD ir PT6315 kontroleris

Taip imat, konstruojat kažką, konstruojat ir staiga tik pyst, prisireikia pajungti daugiau nei kokius trys LEDus, arba kokius nors aštuonsegmenčius displėjus, o dar mygtukai… ir nebeliko kontrolerio kojyčių. Galima paimti kokią 128-koją atmegą (ARMą), naudoti sudėtingas dinamines indikacijas, charliplexingus… nu ir kam to reikia? Vietoje to, kad sutelkti dėmesį į projekto bugų naikinimą, jo naudojimosi patogumus, didžiają dalį savo programinimo laiko praleidi programindamas taimerius-dinaminę indikaciją, kovodamas su lempučių mirgėjimu ir su CPU time trukumu. Dar plius kovoti su mygtukų kontaktų “drebėjimo” problemom. O ką daryti?! Atsakymas paprastas- lituoti dar vieną mikroschemą. Pasakysit jos brangios, sunkiai gaunamos? Taip, visokios brandinės tai tikrai. Tačiau pažiūrėkit po stalu (šiukšlyne). Tikrai rasit kokį nusibaigusi DVD grotuvą. Arba kokį kitokį kinišką “širpotrebą” su indikatorium…

princeton technology corp. VFD LED drivers Continue reading →

CYPRESS 000: Kiparisas

Atnešė kažkada man prietaisiuką padaryta su Cypress Semiconductor mikroschema. Tai buvo cy7c68013a-128axc šimtasdvidešimtaštunkojis. Aš apie juos nė bum-bum, tik žinau, kad mano loginis analizatorius padarytas su tos pačios šeimos čipuku. Ir dar žinojau, kad softas gali būti serial eprome arba užkraunamas per USB iš kompo. Po nesėkmingo remonto (beja tai buvo labai gaidiškas moleview mikroskopas) nutariau kiek prasiplatinti savo žinias. Ir iš kinų užsakiau paprastesnę versiją- CY7C68013a-56VXC devboarduką.

Cypress CY7C68013a
Kiek suprantu “all included”.

Softą kroviausi iš Cypreso saito. Nusikroviau kelis failus, ko pasekoje turiu savo kompe “GPIF designer” -tai makrosu generatorius kuris padeda sukurti I/Okojyčių veikimą (kurio dar nesupratau), “Keil uVision2” – tai kompiliatorius/linkeris ir (kraunasi atskirai) Cypress Suite kur yra programa firmwarės užkrovimui- “control center”.
Iš “C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Drivers\Win7\x64” suinstaliuojam plokštelei draiverius. Ji turi pasimatyti kaip “Cypress FX2LP no EEPROM Device”, čia jei epromas nesuprogramintas arba jumperis išjungia tą mikroschemą.

Besinagrinėdamas šitą čipuką pastebėjau, kad nėra standartinio “Hello World” mirksiuko projekto! (nu gal neradau greitai). Todėl, kad pramušti savo smegenyse ledus, kiek pasinagrinėjus gavosi taip:

1. Pasileidžiam uVison ir darom naują projektą. Ten rašom nauja failą-projektą “betkas.uv2”. Pasirenkam čipuką.
2. Susikuriam naują C failą, “mainas.c”. Ji pridedam prie projekto “add files to group…”.
3. Į tą patį folderį persikopijuojam trys failus “fx2.h”, “fx2regs.h” ir “EZUSB.LIB”. Pastarąją biblioteką irgi pridedam prie projekto. Tikrai rasim failus kažkur tarp pavyzdukų.
4. Jei norėsim programuoti serial eprom, persikopijuojam failą “Hex2bix.exe”.
5. Į failą “mainas.c” parašom tokią programą:

#include “fx2.h”
#include “fx2regs.h”

void main(void)
{
IFCONFIG = 0x00; // set the ports as general-purpose I/O
OEA |= 0xFF; // set PORT A as outputs
for(;;)
{
IOA |= 0x01; // set PA0 high
EZUSB_Delay(200); // delay for ~200 ms

IOA &= ~0x01; // set PA0 low
EZUSB_Delay(200); // delay for ~200 ms
}
}

6. Einam į “options for Target…” ir ten prie OUTPUT pažymim, kad norim “HEX” failo.
7. Einam į “options for Target…” ir ten prie “BL51 Locate” nuimam varnelę, o grafoje “Code Range:” rašom “0x80-0x0FFF”, o “Xdata Range:” rašom “0x1000”.
8. Sukompiliuojam programą su “Build target” arba “Rebuild all”. Gaunam hex failą:

Build target ‘Target 1’
compiling mainas.c…
linking…
Program Size: data=11.0 xdata=4473 code=132
creating hex file from “betkas”…
“betkas” – 0 Error(s), 0 Warning(s).

9. Dabar su Cypress USB Control Center galime įkelti hex failą į kontrolerio RAM. Turi pradėti mirksėti vienas LED1 (arba PA0 keisti savo lygį).
10. Jei norim šį programinį šedevrą įrašyti į epromą, reikia dar pasidaryti automatinį hex konvertavimą. Tai pasidaro tuose pačiuose “options for target”, skyrelyje “output”, skyrelyje “run user program” rašom “hex2bix -i -f 0xC2 -o betkas.iic betkas.hex”
Susikompiliuoja ir gaunasi kitas failas:

Build target ‘Target 1’
compiling mainas.c…
linking…
Program Size: data=11.0 xdata=4473 code=132
creating hex file from “betkas”…
User command #1: hex2bix -i -f 0xC2 -o betkas.iic betkas.hex
Intel Hex file to EZ-USB Binary file conversion utility
Copyright (c) 2012-2013, Cypress Semiconductor Inc.
153 Bytes written.
Total Code Bytes = 132
Conversion completed successfully.
“betkas” – 0 Error(s), 0 Warning(s).

11. Dabar su tuo pačiu “usb control” galima užprogramuoti ROMą. Neužmirškit jumperio ir programuojam su komanda “program 64kb eeprom”.

Štai jums ir “Hello World” ir padarytas!

AVR62: išsamiau

Buvo toks komentaras:

Būtų labai šaunu jeigu šitą straipsnį išplėstum ir padarytum kažką panašaus į “Levas for dummies’. T.y. nieko arba mažai ‘raukiantiems’ paaiškintum daugiau apie jungtis, kaip sąveikauja plokštės elementai vienas su kitu, koks ten softas naudojamas, kodėl būtent jungi tą su anuo ir t.t.

Net nežinau nuo ko pradėti. Gal pradesiu nuo ideologijos. 🙂 Man nepatinka Arduino mintis- kad ‘dummiai’ pasiima kažkokią overpriced plokšte ir net nežinodami kaip kas veikia pradeda programuoti kažkokia iškreitpta makrosais kalba. AVR serijos mikroschemos yra labai jau low-level, todėl reikia programuoti viską nuo pradžių arba bent išsinagrinėti kaip kas veikia, kad netyčia nesigautu hardwarinių konfliktų. Continue reading →

AVR62: Atmega8 universali plokštė su pribambasais

Prasidėjo nuo to, kad prisilupau kažkokios elektronikos su ATMEGA8-16 čipukais. Todėl buvo nelabai skubant padaryta žalia PCB. kurioje kažkodėl pamišau I2C pull-up.
nixie atmega8 RTC dynamic indication
Plokštėje numatytos vietos šiai hardwarei:

  1. RTC -Philips PCF8593 arba analogas. Tikras I2C plius INT0.
  2. Drėgmės ir temperatūros sensorius DHT11.
  3. High side switch IPS511G.
  4. RS485 standartinė mikroschema, SN75176.
  5. Visos kojos išvestos į 0,1″ jungtis.
  6. “cominis” kvarcas.
  7. ISP, 6 pin.
  8. Plokštę galima pjauti ir visa periferija pasišalina.

Per savaitės laiko skirtumą padaryta dar viena PCB. Specialiai skirta NIXIE lempom. T.y. yra katodų ir anodų raktai ir aukštos įtampos šaltinis. Palaiko iki 6 lempų, dinaminė indikacija. PCB’e viena esminė klaida, kuri atsikartoja 6 kartus, todėl naudojamas kiek gudresnis supaprastintas jungimas- izoliacija per kondikus. Kaip šito straipsnio komentaruose. Naudojami 6 aukštavolčiai (MPSA92) tranzai ir К155ИД1 (74141) mikroschema. Beja čekiška mikroschema man testavimo metu susvilo…

Ir aišku: RTC nixie clock with moisture DHT11 (sourcecode for AVR and compiled version for mega8).
Softas aišku testinis, ne galutinis produktas. Iš įdomumu: visa dinaminė indikacija padaryta per taimerio pertraukimą. Ten biškį kažką sumaliau su simbolio vietos skaičiavimu ir gavosi nelabai elegantiškai. INT0 gauna signalą iš RTC taimerio. Ar tai 1Hz dažniu ar suveikia du kartus per sekundę… tik tada nuskaitomas laikrodis. Kas 4 tickus iškviečiamas “lėtas softwarinis pertraukimas”- paprasčiausiai skaitymas iš DHT11 labai lėtas ir jei jį atlikinėti indivualiais, tai mirga neoninės lempos. Dabar DHT11 skaitymas tikriausiai pertraukiamas kelis kartus tikrais pertraukimais. Tačiau viskas veikia ir neoninės lemputės visiškai nemirga.

Dabar turėdamas desietką PCB manau kiek apmažinsių nixių atsargas.

VFD laikrodukas

Tai mano VERBARIUS laikrodžio versija. Verbarius tai Lebedevo brandneimas, o šiaip, tai paprasčiausias laikrodis, kuris laiką rodo ne tik skaičiukais, bet ir tekstu. Kaip tik į rankas papuolė VFD ekraniukas kuris stovėjo prie kažkokio kasos aparato. Jis papuolė nelabai išdegęs ir dar buvo su žinomu modeliu. Todėl internete greitai radau jo datašytą.
VFD laikrodis
Continue reading →