Category Archives: MCU

ATMEGA USB 22: RTC laikrodis

Kažkaip neparašau apie laikrodžių darymą. Kiekvienas bent kiek įvaldęs kontroleriuką kada nors pradeda gaminti laikrodį. Aš irgi 🙂 Labai labai seniai dariau RTC laikrodį su PIC procesorium. Rašiau aš jį asembleryje… ir labai nervinaus, nes buvo sunku ir tas PICas turėjo savo bjauriu niuansu. Šiaip internete pilna laikrodžių- visokiems procesoriams, visokiems ekranams. Pasibandžiau keletą, kai kurie patiko, kai kurie ne. Pagaliau vieną dieną pasakiau- va ateis savaitgalis ir pradėsiu rašyti laikrodį nuo nulio.

Pagrindinės užduotis kurias sau pastačiau:

  • RTC nepriklausantis nuo maitinimo. T.y. atjungiam maitinimą, o laikrodis sau toliau veikia.
  • Hardwarinis laikrodis- tikras nesusipratimas smaukytis su procesoriaus kodu, kad skaičiuoti kiekvieną pirstelėjimą ir apsakaičiuoti laiką. Laika turi skaičiuoti RTC čipas- procesorius užsiima grožiu ir User Interface.
  • Valdymas turi būti aiškus, o ne su vienu nupiepusiu mygtuku. Naudojam kaip minimum 6 klavišus (juolab kad naudojant ADC mygtukus, jų skaičiaus kaitaliojimas nėra nei hardwariškai, nei softwariškai sudėtingas). Mygtukai: kairėn, dešinėn, aukštyn, žemyn, OK ir Cancel. Kaip bet kuriame teliko distanciniam.
  • Jokių asemblerių, advanced dalykėlių (ir atminties taupymo). Turi kompiliuotis su gcc.
  • Laikrodžio variklis (core) turi lengvai persikelti ant kito “displėjaus”. T.y. dabar rašau naudojant LCD ekraniuką, bet su minimaliu pokyčiu, softas turi persikelti kad ir į LED matricą ar kokį rotary clock displėjų.

Konstravimui panaudota esama hardwarė. Tik papildomai, prie I2C porto pajungta RTC mikroschema, kurią man maloniai padovanojo Intersil semiconductors: isl1208.
RTC ATMEGA clock

Čia kiek geriau matosi analoginių mygtukų “matrica” kuri pajungta prie MCU tik trim laidais: Vcc, GND ir analog. Tai pat matosi, kad RTC turi savo rezervinį energijos šaltinį: Ličio batareiką CR2025 (čia iš seno kompo išlupau).
RTC ATMEGA clock

Visas kodas dar neparašytas. Jau galima užprogramuoti laiką ir datą, beveik pabaigtas žadintuvas ir konfiguracinis modulis.
Pats žadintuvas irgi nedaromas su ATMEGA16, o jis tupi RTC mikroschemoje- netgi yra speciali kojytė, kuri gali generuoti žadinimo signalą be MCU pagalbos. Arba paprasčiausiai MCU nuskaito būklės registrą ir pradeda čirškėti. Įdomumas tame, kad žadintuvas gali suveikinėti kiekvienos valandos kažkurią minutę, arba galima nustatyti kad žadintuvas skambėtu tik pirmadieniais, trečią valandą penkiolika minučių ir 27 sekundės, arba kad skambėtu kiekvienos valandos 3 minutę tik balandžio 23 dieną ir jei ta diena išpuola sekmadienį… 🙂 Ten daug navarotų turi tas čipukas. O jei dadėti ir MCU navarotus, tai tikras CRON daemonas gaunasi. Nekalbant apie tai, kad softas pats žino, kelintadienis bus bet kurią 21 amžiaus dieną ir taip pat puikiai susipažinęs su keliamųjų metų skaičiavimais.
Softas turi bent trijų lygių menių sistemą. Meniu sistema automatiškai išsijungia, jei vartotojas ilgai neliečia klavietūros. Su minimaliais pokyčiais si sistema modifikuojasi ir galima konstruoti kokį nors termostatą- juk užtenka pajungti prie to pačio I2C kad ir FM75 mikroschemą. Arba galima valdyti kokią nors periferiją… Čia tik reikia įjungti fantaziją. Šiaip viskas sugrūsta į TIMER0 pertraukimą- visą kitą laiką ATMEGA dinderį muša.

Softas neskirtas “C” kalbos puristams ir specialistams. Aš iškarto pasakau, kad niekada nesimokiau “C” programavimo. Todėl daugelis momentų padaryta kvailai. Tik žinau, kad gerasis gcc nerado nei vienos priekabės prie šios programos- kompiliuojasi be jokių warning…

Štai jis: RTC clock core source code. Dalinamas pagal GNU GPL licenzija- imkit ir naudokit.

ATMEGA USB 21: IR RC5 skaitytuvas

Čia nelabai yra to USB. Tiksliau, netgi pjaunasi šitas projektas su USB 🙂 (kompas puliuoja, kai aparaciukas pagauna IR komandą) Todėl paveiksliukyje atsirado plokštės gabalas su USB kištuku.

Tai grynai C kalboje parašytas infraraudonų spindulių distancinio (pagal standartą RC5) dekoderis. Autorius yra Georg-Johann Lay, kokios rušies licenzija jis paskyrė savo softui aš nežinau. Bent jau jo puslapiuose ir source nieko nėra apie (c).

IR RC5 receiver
IR daviklis išluptas iš sugedusio DVD grotuvo. Prilituotas prie geltonos PCB ir jungiasi 3 laidais prie plokštės: Vcc, GND ir PD2/INT0.

Kad pademonstruoti rezultatus, pajungiau prie LCD modulio. Pats naudojimas labai paprastas, pažiūrėkit main.c failo main procedūrą.
Truputis informacijos apie LCD ekraniuko rodymą: Cod- tai mygtuko kodas, Adr- tai prietaiso adresas (0- tai TV), F- flip/flop rodantis kad paspaustas klavišas. Jis keičiasi kiekvieną kartą paspaudus distancinio mygtuką. Tai galima detektuoti kada nuspaustas tas pats mygtukas dar kartą.
Deja visuose namuose tik Samsung teliko distancinis suderinamas su šiuo standartu…
Kadangi ši programa naudoja tą patį INT0 kaip ir USB, tai kol kas šitas žaisliukas nesuderinamas su USB. Jei bus poreikis ir noras, pabandysiu pakeisti source, kad naudotu INT1. Tada distancinio duomenys bus galima pumpuoti į kompiuterį. O jei tai suderinti su ankstesnio posto HID įrenginiu… Gaunasi kaip ir universalus distancinis kompui.

Projekto source code.

P.S. jei naudojamas NEC IR tipo distancinis, verta pasiskaityti: NEC distancinio protokolas.

ATMEGA USB 20: mini LED matrica iš Sure Electronics

Jau gana senokai esu nusipirkęs mažytę LED diodų matrica per eBay iš Sure Electronics firmelės. Tai kiniečių kompanija kuri gamina įvairiausią šlamštą ir pardavinėja on-line. Kada prie progos pažiūrėkit eBay ar jų pačių puslapiuose.

Tai visiškai nereikalingas prietaisas. Nebent pasistatyti ofise ant stalo ir laikas nuo laiko siusti žinutes kolegom. Kadangi tai vienos dienos projektas, tai visas softas gal ir nekulturingas- biški per daug darbo kad daryti kultūringai. Visgi reikėjo parašyti firmware ATMEGAI (panaudotos turimos bibliotekos), parašytas softas USB valdymui windows XP (iš esmės hackintas pavyzdys) ir parašytas nuo nulio MS Visual BASICe grafinis interfeisas paveiksliukų paišymui… Kai viska gražiai sutvarkysiu, visus source kode sudėsiu čia.

Mini Red LED matrica is Sure Electronics su ATMEGA ir USB

Matrica tai 6 moduliai su 8×8 diodų. Praktiškai, ten įlituota dvispalviai diodai, bet aš nesugebėjau įjungti žalios spalvos. Tuo labiau, kad nei Sure Electronics dokumentacijoje, nei Holtek čipo (HT1632) datašeete neparašyta apie daugiau kaip 384 diodų valdymą. Holtek kontroleris valdosi per 3 laidus, turi savyje 16 lygių PWM visai matricai. Dar yra mirksėjimo režimas, jei reikėtų padaryti kokį pranešimą, labiau atreipiantį dėmesį.

Mano hardwarė pati paprasčiausia ATMEGOS16 testinė plokštė. Viskas maitinasi iš USB, ir kai uždegiu visus diodus, šviesa ryškiai “pasėda”.

Čia windozinė GUI programa, kur galima paišyti vaizdelius. Dar pilna visokiausių DEBUG dalykėlių…
Softas Sure Electronics LED USB image

Nedidelis filmukas kuris bando pademonstruoti kaip greitai pasikeičia vaizdelis. Deja, realybėje jis kogero keičiasi greičiau.

Čia bus source kode, kuri susideda iš šių dalių:
\firmware:

  • holtek_ht1632.c
  • holtek_ht1632.h
  • usbconfig.h ir visas kalnas iš usbdrv kategorijos.

\commandline:

  • hidtool.c
  • hidtool.h
  • ir dar keli papildomi

\GUI:

  • LEDGUI.exe
  • LEDGUI visual basic source

\proteus:

  • Proteus schema protokolo analizavimuisi

Download: Source Code, exe, proteus, firmware, cmd line, visual basic

ATMEGA USB 19: temperatūros daviklis

Tai kelių svetimų projektų kompiliacija. Iš esmės, šitas prietaisiukas nuskaito daviklio FM75 (kiek rimtesnis nei LM75, I2C) informaciją. Šis prietaisas nieko nekaupia savo atmintyje (nors galėtų, paprasčiausiai softas neparašytas), visa informacija nuskaitoma per USB į kompiuterį. Viena iš įpatybių: šis įrenginys nereikalauja jokių draiverių, operacinė sistema (išbandyta su Windows ir Linux Debian) mato jį kaip HID prietaisą. O toliau jau programos reikalas.

ATMEGA16 USB HID temperature sensor

Nuotraukoje matosi V1 veikiantis prietaisiukas, ir V2 PCB plokštelė paruošta litavimui. V1 ir V2 skiriasi tik tuo, kad panaudoti mažesni rezistoriai, pašalinti takelių pralindimai po resistoriu.
Panaudojau ATMEGA16 tik todėl, kad tokių megų turiu daug prisilupinėjęs. MCU stovi pasuktas 45 laipsnių kampu tik tam, kad išbandyti kaip Cadsoft Eagle sugeba sukinėti detales. Šiam projekui teoriškai turi tikti bet koks Atmel firmos procesoriukas veikiantis ant 12MHz ar daugiau. Tinka darbiniai dažniai 12, 15 ar 16MHz. Arba naujieji Atmel MCU su greitu RC vidinių generatorium veikiančiu ant 16.5MHz (yra softas programiniui dažnio kalibravimui). Čia labiausiai tiktu 8 kojų procesoriukas ATTiny45.

Reikalingi PCB, pdf, BMP, Eagle failai.

Source code, PCB, Eagle failai, Win ir Linux softas su source bus greitai įdėtas. Gal ir padarysiu online rezultatus.

Testavimas ant mano USB-AVR serijos plokštės. Firmware modifikacija, kai informacija dar parodama ir ant LCD ekrano. Daviklis prijungtas laidais:

USB + LCD + FM75

(papildymai)
Firmware, source code, command line with source code.
Eagle files (PCB and SCH).
Linux source code, MRTG config example. See comments for live results.

ATMEGA USB 18: Mikro, 2 kanalų, USB oscilografas

Užbridau internete paprastutį projektą susijusi su ATMEGA procesoriukais, USB ir oscilografais.
Štai šis puslapis: http://yveslebrac.blogspot.com/2008/10/cheapest-dual-trace-scope-in-galaxy.html

Autorius naudoja ATTINY45-20, tačiau aš tokių čipukų neturiu ir nenoriu užsakinėti. Man buvo žymiai įdomiau pritaikyti programinę įranga prie mano turimos “hardwarės”.

Projekto galutinis rezultatas: dviejų kanalų, labai lėtas oscilografas. Jis atnaujina viso ekrano informaciją per kokias 4 sekundes. Įėjimo įtampa iki 2.5V (jei perprogramuoti ADC, galima padidinti jautrumą, jei naudoti direfencialinį įėjimą)
USB 1Ch osciloscope
(tai mano tikro oscilografo skleistinės pjūklas, ~500ms (0.5s) intervalas, per raudoną kanalą. Mėlynas kanalas pajungtas į žemę)

Schema labai paprasta: ATMEGA16 paleista su 12MHz kvarcu. Maitinama iš USB. USB DATA- laidelis per rezistoriųdaliklį pajungtas prie MCU D1 kojos. DATA+ pajungtas prie D2/INT0 kojos. Viskas, daugiau detalių nėra. Rezisotorių reikšmes ir pajungimo subtilybės tokios pat, kai ir kituose ATMEGA USB temos schemose. Tik senoje schemoje panaudotas kitas pinas. Čia labiau priklauso nuo norų ir turimos PCB plokštės. Šiuo atveju panaudoja pre-ATMEGA-USB laikotarpio PCB, kuri yra netobula ir nepublikuota. Tačiau gaila ją išmesti. 🙂

Programinė įranga: source (ATMEGOS source, Windows EXE).

Windowsams USB draiverių nereikia. Tai standartinis HID įrenginys.

O va, kam šitas aparačiukas gali būti panaudotas, aš nežinau. Su tokių skleistinės dažniu tai tik žmogaus pulsą stebėti. Labai gaila, kad nėra Windows programos source code…

ATMEGA USB 17 (Proteus)

Jei nenorite lituoti mano konstrukciją, bet norit pakritikuoti ar patobulinti softą, siūlau nusikrauti Proteus programą (ISIS, http://www.labcenter.co.uk ) ir išbandyti kas ir kaip. Didžioji dalis softo veikia ir nieko nereikia keisti. Deja nėra nei USB, nei FM75 mikroschemos, nei akseleratoriaus modelio. Termodaviklis ant I2C kažkos yra, bet reikės pakeisti bazinį adresą programoje. Accelerometro modelį gal kas nors sukurs. Bet va USB emuliacija nelabai galima, nes dar reikėtu emuliuoti ir klientinį kompiuterį ir priedo, reikėtų labai jau galingo kompo.

Proteus

O štai čia pati schema Proteus ISIS formate: Zip archyvas.

ATMEGA USB 15. (Nors čia ir ne mega)

Iš senų stacionarių NMT-450 Nokia telefonų prisilupinėjau mažiukų AT90LS2343 kontroleriukų. Tiesa, tik per atsitiktinumą sužinojau kad tai būtent šitas modelis, nes ant mikroschemos užrašyta “ATMEL 4370405”. Gal tai koks palengvintas variantas ar koks specifinis kontroleris. Paprasčiausiai buvo keletas telefonų, kur toje vietoje stovėjo čipukai su normaliais užrašais “AT90LS2343”.

Jau seniau rašiau apie RGB LEDus iš skanerio, kaip jie gražiai šviečia valdomi MCU ATMEGA16. Užsinorėjau padaryti tą patį, tik su šiuo MCU. Deja jis silpnesnis ir neturi hardware PWM.

Teko prasisukti su programiniu PWM (software PWM). Procesoriuko taktinis dažnis 1MHz, tai pagrindinis ciklas ir skirtas tam PWM generavimui, tuo tarpu pertraukimas skirtas spalvų reikšmių generavimui. Programinis generatorius leidžią neribotą kiekį skirtingai valdomų išėjimų, kad tik užtektu MCU našumo.

Software PWM ATTiny

Visa konstrukcija telpa ant skanerio elemento. Ta “mikroschema” ant geltonų laidelių tai tik programavimo kištukas. Gavosi toks kaip ir nereikalingas “gadget”- galima kur nors pakabinti ir stebėti kaip kaitaliojasi visos vaivorykštės (ir ne tik) spalvos. Pakeitus TCCR0 registro reikšmes, galima keisti spalvų kaitaliojimosi greitį. RGB diodai pajungti per 330 omų rezistorius prie PB0, PB1 ir PB2. Spalvą paskirsto skanerio optika.

Tikriausiai nesupratote kas čia per skaneris? Tai Canon skanerio vaikščiojantis daviklis. Jis pas pigius skanerius padarytas be lemputės ir optinis elementas yra monochromatinis. Kaip skanuoja spalvotą vaizdą? Ogi paprasčiausiai originalą apšviečia paeiliui su raudonu, žaliu ir mėlynu šviesos diodu ir registruoja vaizdą. Šie skaneriai nepasižymi gera vaizdo kokybę. Ypač tai matosi skanuojant juodai baltą tekstą spalvotame režime. Pasižiūrėjus į nuskanuotą paveiksliuką matosi, kad apie raides atsiranda spalvoti šešėliai…

Tamsoje, “hipnotinis prietaisas” visai gražiai šviečia. Dabar maitinu iš Liion akumuliatoriaus (3.7V), bet schemą galima maitinti ir nuo 5V šaltinio (šviečia žymiai geriau). Prie tos pačios plokštės prilitavau LM2937-5 (7805 variantas), tai dabar schemą galima maitinti ir kad nuo 12V automobilio akumuliatoriaus. Toks “mirksiukas” automobilyje turėtu atrodyti “rimčiau” nei paprastas signalizacijos diodas 🙂

Source code software PWM .

Nixie laikrodis

Prisireikė čia mums Nixie laikrodžio. Nixie tai kapitalistiškas indikatorinių dujų išlydžio lempų pavadinimas. Šiaip prikaupiau aš gana daug tokių lempučių, bet savo konstrucijai panaudojau neperdidžiausias ИН-12A arba ИН-12Б lemputes. Jos jungiasi į kištukus, todėl galima lemputes pakaitalioti…

Nixie clock

Ir panaudoti kiek retesnes ИН-15 serijos lemputes. Tada gaunam kiek užkoduotą laikrodį:

Nixie clock

Šiam laikrodžiui panaudotas rinkinukas iš interneto ir komercinė programinė įranga. Šiaip rinkinukas labai brangus. Už tuos pinigus gaunam kokybišką dvisluoksnę spausdintą plokštę (PCB) ir jau užprogramuotą PIC16F876 mikroprocesorių.

Softas turi savo prigulnybių. Viena iš jų- fading digits efektas. Kai skaičiukai vietoj to, kad paprasčiausiai persijungtu, pradžiai vienas prigęsta, o kitas paryškėja.

Laikrodis maitinamas nuo žemos įtampos. Jam reikia kintamos srovės, 9…15V šaltinio. Aš panaudojau adapteriuką nuo seno išorinio modemo. Schemoje esantis keitiklis užkelia įtampą iki 170… 180V. Bet kadangi šaltinis nėra galingas, tai pats laikrodis tik švelniai purto, jei pačiupini ne už reikiamos vietos. Beja, šis įtampos užkeliklis jau yra aprašytas mano puslapiuose.

Schema: komercinis Nixie laikrodis.

Kynar laidelių betvarkė

Gerai, kad yra išrasti Kynar laideliai… Adaptavau čia vieną schemutę kitokiam procesoriukui ir beskubėdamas supainiojau portus. O plokštė jau kaip ir pagaminta. Teko panaudoti pusmetrį laidelio ir “pertrasuoti” plokštę:

betvarke

Ir dar priedo nepadariau programavimo jungties- paprasčiausiai užmiršau. Šiaip schema dalinai veikia, bet kai kuriais matavimo momentais užstringa. Šiaip čia talpos matruoklis, tik ganėtinai plataus diapazono ir turi veikti su ilgais laidas- veikia ne kaip ankstesnis matuoklis su LC generatorium, bet kaip dar senesnis projektas. Tik šitas turi rodyti nuo pikofaradų iki dešimčių tūkstančių mikrofaradų…

MCU: AVR ATMEGA8, aš konvertavau į savo ATMEGA16 ir kažką negerai padariau…

Projektas “skolintas” iš http://pontoppidan.info/lars/index.php?proj=capmeter
Toliau: Continue reading →