Tag Archives: AVR

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 →