Category Archives: MCU

ATMEGA USB 006 (USB+LCD)

Laikas jungti prie USB. Po keletos nesėkmingų bandymų pagaliau susiradau projektėlį kuris veikia. Gal ir kiti projektai veiktų atitinkamai juos pritaikius. Mano “testinė” plokštė yra ganėtinai universali. Kai ją projektavau, aš atsižvelgiau į keletą svetimų projektų ir pajungiau kontrolerio kojeles taip, kad su minimaliai pokyčiais būtų galima pritaikyti svetimo projekto kodą.

AVR USB LCD

Taigis, USB- universal serial bus. Tai ne tik paprastas nuoseklus interfeisas kaip RS232 ar panašūs, bet ir įvairaus lygio protokolų visuma. Dėl to ir vadinasi “universalus”. Dėl šio universalumo, USB nėra labai lengva pritaikyti. USB bibliotekos panaudotos iš http://libusb-win32.sourceforge.net projekto. Šio projekto teisės yra GPL/LGPL. Dar vienas momentas dėl USB- tai pačio įrenginio VIN (vendor identification number)/PIN (poduct identification number). Šie skaičiukai dar vadinami VID/PID pora. Šie skaičiukai nėra laisvai pasirenkami (kad nekiltu chaosas). Pats USB firmware yra panaudotas iš http://www.obdev.at/products/avrusb/index.html.

Kad pratestuoti šį projektą reikia mano testinės plokštelės ir LCD modulio.

Programos archyve yra ir mažytė programa pratestuoti kaip kas veikia. Valdančios programos “source” aš neįdėjau į archyvą, nes kažkodėl mano perkompiliuota programos versija veikė nekorektiškai palyginus su originaliu EXE failu.

20070922.zip.

ATMEGA USB 005 (I2C)

Yra labai daug mikroschemų kurios valdomos per 2 laidų arba I2C grandinę (bussą). I2C tai Philips kūdikis, bet jis naudojamas ir daugybės kitų gamintojų. Pavyzdžiui prie I2C magistralės pajungti beveik visi televizoriaus mazgai. Daugybė navarotnų muzikinių centrų, kompiuterinių kolonėlių taip pat valdomi per I2C (ar panašų) interfeisą. Prie I2C galima jungti nuo paprasčiausio mygtuko ar DTMF imtuvo iki TV tiunerio ar Dolby Digital audio procesoriaus. Pats ATMEL’IS savo ATMEGA procesoriuose turi paruoštas galimybes naudoti I2C interfeisą. Tai taip vadinamas TWI. Mano PCB plokštėje šio protokolo kontaktai stovi prie keturių šviesos diodų, su ~10K pull-up rezistoriais.

FM75

Prie šios vietos mes jungsime I2C temperatūros sensorių. Panaudosim patį populiariausią LM75 arba jo analogą ar kloną. Aš panaudojau mažą PCB plokštelę iš seno plazminio teliko. Ten ji matavo matricos temperatūrą. Ant plokštelės prilituotas FM75 čipukas, keli rezistoriai ir kondikai. FM75 tai Fairchaild gamybos LM75 klonas su išplėstu temperatūros matavimo tikslumu. Originalus LM75 rodos naudoja tik 8 bitus, o štai FM75 turi ir netik pilnai suderinamą su LM75 režimą bet ir du išplėstus režimus. Mano programulka perprogramuoją čipuką į 12 bitų rezoliuciją. Pačioje programoje temperatūros konvertavimas perskaičiuojamas netiksliai- nenorėjau (ir nemokėjau) komplikuoti programos su tikslia matematika. Todėl skaičiukai nėra tikslūs. Rekomenduoju perskaityti LM75 ir FM75 datasheetus. Ir pagalvoti kaip skaičiuoti 1/16 laipsnio ir kai parodyti šias reikšmes dešimtainėje sistemoje. Gal dar pasiskaityti kiek AD7416 mikroschemos aprašymą. Šias mikroschemas kažkada siuntinėjo Analog Devices kaip pavyzdžius.

FM75 ATMEGA16

Programoje panaudotas modulis i2c.c iš interneto. Čia pasinaudojau USB Tenki projektu. Ten buvo labai paprasta ištraukti visas I2C procedūras į nepriklausomą programą. Iš ten pat paimti ir lm75.c failiukai. LCD modulio paprogramės panaudotos iš ankstesnio posto. Jungiant savo LM75 mikroschemą prie I2C protokolo nereikia užmiršti pasitikrinti įrenginio adresą. Programos tekstuose aš pažymėjau “pasitikrinti” adreso vietas. Adresas susideda iš dviejų skaičių- bazinio adreso kurį nustatė gamintojas ir kelių bitų, kuriuos gali pakeisti vartotojas paprasčiausiai atitinkamai pajungdamas mikroschemos kojytes. Taip galima pajungti kelias vienodas mikroschemas ant to pačio laido ir matuoti temperatūrą keliose vietose.

Programa: 20070919.zip.

Su šiais geležėliais jau galima konstruoti kokį termostatą. Tik nepulkite programuoti ATMEGA termostato darbui, nes LM75/FM75 mikroschemos jau turi savyje sukonstruotą termostatą. Užtenka teisingai užprogramuoti mikroschemą ir jos išėjimo kojytė gali valdyti šildytuvą ar šaldytuvą. Lai ATMEGA atlieka tik kontrolės ir indikacijos veiksmus.

ATMEGA USB 004 (ADC)

ATMEGA16 turi savyje ADC (analog digital converter, analoginio signalo keitiklį į skaitmeninį). Su šiuo prietaisu galima išmatuoti kokio nors daviklio ar maitinimo šaltinio įtampą. ATMEGA16 turi 8 kojeles prie kurių galima prijungti skirtingus analoginius signalūs. Pats keitiklis nėra labai greitas, bet pilnai panaudojamas įvairiuose prietaisuose. Labai rekomenduoju perskaityti ATMEGOS datasheetą, nes ADC keitiklis turi daugybę įvairiausių nustatymo parametrų. Kaip pasirinkit atraminę įtampą- išorinis šaltinis, Vcc ar integruotas į kontrolerį atraminės įtampos šaltinis. Taip pat galima pasirinkti įvairiausius stiprinimo koeficientus ar net deferencialinis įėjimas.

Programa labai paprasta. Ji tiktai nuskaito ADC parodymus ir parodo rezultatą LCD modulio ekrane. Pakeitus kelias užkomentuotas eilutes galima nuskaiyti visų ADC kanalų reikšmes.

ATMEGA ADC

“Stepas” tai nieko nereiškiantis žodelis kiles nuo angliško žodelio “step”. Ten idikuojama paprasčiausio vidinio ciklo kintamojo reikšmė. Kiek pakeitus programos kodą ten indikuojasi ADC kanalo numeris. Ir beto, besikaitaliojantys skaičiukai dažnai parodo, kad programa dar veikia. Tai svarbu, kadangi LCD modulis gali rodyti kokius nors senus parodymus or procesorius buti smigęs. 🙂

Beja, kad apsaugoti programą nuo užstrigimo verta susidomėti “watchdog” taimerio panaudojimu. Šioje programoje jis nepanaudotas.

Programa: 20070918.zip.

ATMEGA USB 003 (LCD)

Iš to mirksėjimo nieko gero. Dažnai reikia parodyti kokius nors sudėtingesnius parametrus. Tam lengviausiai naudotis standartinius LCD modulius. Jų galima prisilūpinėti iš visokių senų aparatų, nusipirkti iš manęs 🙂 ar permokėjus didelius pinigus nusipirkti parduotuvėje.
Yra visokių LCD modulių, bet pat papuliairausias yra alfanumerinis modulis su HD44780 kontroleriu. Yra visokiausių LCD modulių modifikacijų. Aš savo eksperimentams panaudojau patį populiariausią- 2×16 simbolių.
Modulis paprastai turi 14 kojų, jei su pašvietimu- tai 16. Tiek daug kojų naudojama kai modulis jungiamas 8 bitų režimu. Žymiai racionaliau jungti naudojant tik 4 bitus- baitas siunciamas per du ciklus. Tačiau prie esamu mikrokontrolerių greičių, nesijaučia jokio suletėjimo. Modulis turi “self-test”- užtenka į jį paduoti maitinimą ir turi pasimatyti juodi kvadratėliai viršutinėje eilutėje. Jei nesimato, kartais reikia pareguliuoti kontrastą su vieninteliu kintamu rezistorium ant PCB.

LCD AVR

LCD valdymui panaudotas modulis iš interneto. Po keletos nesekmingų paieškų, apsistojau ties Peter Fleury programa. Ji leidžia LCD valdymo laidelius jungti prie bet kurių portų ir nėra problemų. Kitos LCD programos turėjo apribojimus. LCD modulio pajungimas aprašomas lcd.h faile. Prie lcd.c failiuko lysti nereikia. Ten galima tik pasiskaityti kokios procedūros ir funkcijos sukurtos.

Programa demostruojanti aparato veikimą yra faile test_lcd.c. Ten dar parašytos mygtuko detektavimo procedūros kurios nėra labai tobulos. Mygtukui naudojamas jumperis kuris schemoje pavadintas “firmware” 🙂

LCD AVR

Beja, jei maitinate šia schemą per USB laidą, nekreipkite dėmesio į windozės priekaištus dėl nežinomo USB įrenginio. Tuo užsiimsime žymiai vėliau. Neužmirškit, kad aš rašydamas šitą bloga pats mokinuosi apie šiuos mikrokontrolerius. Todėl čia visur gali būti kvailų klaidų.

Programos tekstas ir hex failas nekantriems: 20070917.zip.

ATMEGA USB 002 (LED mirksiukas)

Jei jau surinkom schemą, reikia ją pratestuoti. O kad pratestuoti, reikia parašyti kažkokią programą. O kad prašyti programą reikalingas kažkoks softas. Jei neturit softo, tai reikia iš interneto nusikrauti WinAVR paketą: http://winavr.sourceforge.net/
Dar gerai būtų, bet neprivaloma, nusikrauti “Programmer’s Notepad 2”. Tai kiek palengvins darbą.

Pirmoji programa tai paprasčiausias mirksiukas- paeiliui uždeginėjam šviesos diodus ant plokštės. Tai pratestuosim ar veikia procesoriukas ir ar diodai šviečia. Nieko čia stebūklingo ar svarbaus nėra. Nuotrauka daryta su ilgu išlaikymu, todėl atrodo, kad visi diodai dega. Iš tikro, pastoviai dega tik vienas diodas- tas kuris indikuoja maitinimo pajungimą. Kiti diodai skirtingu greičiu mirksi.

mirksiukas
(baisi plokštė. Mano printeriui šakės ir todėl gaunasi “kiauri” takeliai)

Programos archyvas: 20070916.zip

Programėlė labai paprasta- nustatom naudojamas kojeles išėjimui, paleidžiam amžina ciklą ir ciklo duomenis pumpuojam į portus. Realiai tai daryti nereikėtu- nes dabar programa pumpuoja visus bitus, o reikia keisti tik tuos bitus kurių kojeles norime valdyti. Bet čia programa tik ištestuoti ar veikia konstrukcija.

Keletas komentarų. Mano archyvo makefile jums garantuotai neveiks “program” užduočiai. Čia todėl, kad mano LPT1 portas nebegyvas ir aš naudoju papildoma PCI plokštę su papildomom LPT jungtim. Todėl reikia persirašyti “program” sekciją- ten kur parašyta:

program: $(PRG).hex
avreal32 -pBC00 -ab -e +$(AVREALMCU)
avreal32 -pBC00 +$(AVREALMCU) -ab -w -c $(PRG).hex -v

reikia pakeisti -pBC00 į jūsų naudojamo porto parametrus. Daugiau informacijos paleidus “avreal32 -h”. O jei naudojat kitą programatorių, tai šias eilutes reikia pakeisti iš esmės. Arba nenaudoti “make program” funkcijos.

Visiškai žaliam žmogui dar vienas paaiškinimas kurio niekas nerašo, nes tipo “visi tai žino”. Programa kompiliuojasi su komanda “make all” ar iš to Notepado, Tools->[WinAVR] Make All
Kompiuteris turi prirašyti visokių ten užrašų, kuriu dauguma nieko blogo nesako, nes make failas yra universalus. Mums esmė yra pačiam gale: > Process Exit Code: 0 ir kad niekur nebuvo ERROR.
Komanda “make clean” arba Tools->[WinAVR] Make Clean išvalo visus sukompiliuotus ir paruoštus failus. Todėl jei ką nors pakeitėt programoje, neužmirškit paleidinėti “clean”.

Nu ir paskutinė komanda ar užduotis: make program arba Tools->[WinAVR] Program užprogramuoja programą į mikrokontrolerį.

Truputis informacijos apie “security” bitus. Pas Atmelį tie bitai kiek miglotai paaiškinti, o ir daugelis interneto puslapių tai aiškina kiek kitaip (dažnai teisingai, bet dėl terminalogijos subtilybių būna sunku suprasti). Labai lengva kaitaliojant bitus “užrakinti” mikroschemą taip, kad ji nebeatsiliepinės į serial/jtag programavimą. O tada jau bus problemos, nes cipuką teks lupti lauk. Mano čipukas išluptas iš kažkokio prietaiso ir jo bitai atrodo taip:
Fuses
OSCCAL = AD, AB, A7, A8
BODLEVEL = 0
BODEN = 1
SUT = 2
CKSEL = F
BLB1 = 3
BLB0 = 3
OCDEN = 1
JTAGEN = 1
CKOPT = 1
EESAVE = 0
BOOTSZ = 3
BOOTRST = 1

Aš ju neliečiu, nes kolkas viskas veikia. 🙂 O šiaip rekomenduoju pradžiai pasiskaityti gamintojo datasheetą. Nes gamintojas stengiasi kiek galima mažiau klaidų rašyti savo dokumentacijos. Beja, tie bitai skiriasi pas skirtingus MCU. Todėl kartais perkeliant programą iš vienos šeimynos į kitą, tenka pasukti galvą.

Beja, archyve yra ir HEX failas skirtas mano plokštei. Todėl galima pratestuoti geležius be jokio kompiliavimo.

ATMEGA USB 001 (schema)

Kaip jau minėjau, prisirankiojau aš keliolika ATMEL ATMEGA16 procesoriukų. Nutariau pasinagrinėti šio mikrokontrolerio darbą ir ką nors sukonstruoti. Kadangi šis mikrokontroleris turi kiek daugiau atminties, nutariau surankioti iš interneto C kalbos paprogrames ir pritaikyti savo eksperimentams. Visos programos įdėtos į šiuos interneto puslapius bus ištestuotos ir veikiančios. Bandysim ištaisyti visas galimas klaidas- pvz. vienoje USB programoje ir draiveriuose buvo supainioti vieno baito MSB ir LSB. Tai kainavo man dvi dienas darbo 🙂 kol suradau svetimą klaidą. Kas mėgino programuoti, žino kaip sunku isijausti į svetimą programą.

AVR USB

Kadangi internete prisirankiojau visokių projektų, teko pasidaryti specialią plokštę. Jis šiek tiek universali- todėl daugumas skirtingu projektų veikia ant tos pačios hardwarės.
Projektuose bus nagrinėjama: ADC, USB komunikacija, I2C, LCD modulių pajungimas, IR imtuvas (distancinis valdymas) ir t.t.
Šiam multi projektui reikia įsigyti ATMELio ATMEGA16 (gal ir tiks ir kitos, bet aš naudosiu 16 nes daug turiu), 12MHz kvarcą, USB B lizdą (iš usb imamas ir maitinimas), keletos rezistorių ir kondensatorių ir keletos šviesos diodų ir vieno kintamo resitoriaus. Taip pat reikės kištuko programatoriui ir LCD moduliui (nors modulį galima prilituoti laideliais).
PCB plokštelė padaryta ant vienpusio folguoto tekstolito, todėl PCB lengva pasidaryti namuose. Mano lazerinis printeris višai nupušo, todėl aš stengiuosi daryti plokšteles su kiek galima storesniais takeliais. Plokštė reikalauja 8 laidelių (airwires).
LCD modulis- pats paprasčiausias 2×16 simbolių alphanumerinis indikatorius su populiariausiu HD44780 kontroleriu.

“Aparato” schema:
AVR USB
(spauskit ant paveiksliuko kad pažiūrėti smulkiau)

Spausdintos plokštės eskizas:
AVR USB

Schema ir PCB Eagle formate .

MCU programuojamas su Altera ByteBlaster MV programatorium, su AVREAL programa. Beja, turiu pranešti, kad eksperimentuodamas sudeginau savo kompiuterio motinos LPT1 portą ir dabar naudoju papildomos kortos LPT adapterius.

avreal/WIN32 - AVR controllers LPT programmer by Redchuk Alexandr
v1.25rev5 (Jan 15 2007 20:02:38) http://www.ln.com.ua/~real/avreal
bug-reports, suggestions and so on mail to avreal@real.kiev.ua

Todėl aš kiek pakeičiau “make” failą. Tiksliau jo “programavimo” dalį. Pasikoreguokite pagal savo turimą programatorių arba nenaudokit “make program” komandos.

2012.08.05
Ši PCB ir kogero schema paseno. Nuo šios datos naudojama nauja versija. This PCB is absolete, please check new one in this web blog entry.

USB namuose

Tesiu savo kovą su printerio porto nebenaudojimu. Kiek pasiknaisiojes internete ir dėl to, kad viena Lietuvos elektronikos firma pamaitino mane keliolika ATMEGA16 16AI mikroschemų teko pasidaryti eksperimentinę plokštę.

USB- multiport adapter

Tai nieko naujo ar neįprasto- minėta ATMEGA16, 12MHz kvarcas ir keletas rezistorių. Kiek teko pakeisti programos kodą iš interneto ir tarp kompiuterio įrenginių atsirado AVR309: USB to UART protocol converter. Tai aparačiukas kuris prijungia prie kompo ATMEGA per USB ir su softu galima valdyti visas megos kojytes. O tai gana daug kojycių… 🙂

Dabar reikia tik nusikrauti Delfi7 ir pasirašyti savo programinę įrangą, kad per USB pumpuoti duomenis į FPGA konstrukcijas. Gal ir užkrauti FPGA konfiguracija iš pagrindinio kompiuterio. O tada atsiveria plačios lankos visokiems LCD displėjams, skaitmeniniams oscilografams ir šiaip “digital home” sistemom.

device manager

Čia device manager langelis.
Continue reading →

MSP430

Šiaip netaip iš Texas Instruments atsisiunčiau MSP430 komplektėlį. Aišku TI nusiuntė siuntinį į Lichtenšteiną o ne į Lietuvą, nes dar TI galvočiai neatrodo daugybės EU šalių. Visas komplektėlis man kainavo 34 nuinfliavusius dolerius. Už šią sumą pinigų aš gavau:

MSP430

Ant dėžutės parašyta: MSP430 Ultra-Low-Power MCUs eZ430-F2013 Development Tool. Viduje ten kompakčiukas su programine įranga, USB adapteris ir mažyčiukė dukterinė plokštelė su F2013 kontroleriuku.

Kol kas, nieko gero iš šio komplekto neišspaudžiau- tik mažyte programėlą kuri mikčioja šviesos diodą. Ir tiek. Programinė įranga kiek man nelabai suprantama ir nėra labai jau “user friendly”. Gerai, kad yra visokiausiu asemblerio ir C kalbos pavyzdukų, todėl galima aklai eksperimentuoti.

USB “pirštelis” atsidaro ir galima pasikeisti dukterinę plokšelę, ar prilituoti vieną kitą laidą. Windows XP šį stebūklą atpažysta kiek savotiškai, suinstaliuoja draiverius iš kompakto.

WindowsXP device manager

Talpos matuoklis su PIC

Vokiškuose (sprut.de) puslapiuose aš radau mažą schemutę kuri matuoja kondensatorių talpą. Schema skirta testuoti elektrolitinius kondensatorius. Teorinė dalis aprašyta autoriaus puslapiuose- ten paaiškinta, kad matuojama krovimosi ir išsikorvimo greitis. Pagal autorių, schema gali matuoti talpas nuo ~10µF iki ~65 500 µF. Prietaisas nėra labai tikslus, bet visai tinkamas testuoti elektrolitus iš motininių plokščių.

Schemą surinkau ant maketinės plokštės. Tas spalvotas kabelis einantis už paveikslėlio ribų yra ICSP kabelis į mano Willem programuotoja.

Capacitance meter

Schema yra labai paprasta. Procesorius tai Microchip PIC16LF876A-I/SP (išbandžiau būtent tokį) ar PIC16F876A.

Circuit diagram- matuoklio schema
Didesnė schema spausdinimui.

ICSP jungties aprašymas: DATA-RB7(pin 28), CLCK-RB6(pin 27), Vpp-MCLR(pin 1), Vcc-Vdd(pin 20), GND-GND(pins 8 & 19).

Dėmesio! Prieš jungiant kondensatorių prie schemos, jį reikia iškrauti. O kitaip supliaškinsit PICą.

Programinė įranga (ASM ir HEX).