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…
Category Archives: MCU
Nixie
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ą.
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 msIOA &= ~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.
Plokštėje numatytos vietos šiai hardwarei:
- RTC -Philips PCF8593 arba analogas. Tikras I2C plius INT0.
- Drėgmės ir temperatūros sensorius DHT11.
- High side switch IPS511G.
- RS485 standartinė mikroschema, SN75176.
- Visos kojos išvestos į 0,1″ jungtis.
- “cominis” kvarcas.
- ISP, 6 pin.
- 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ą.
Continue reading →
DMX testas ir 8 kanalų dimeris
Kažkada užsakiau žalias PCB savo CNC eksperimentams. Jos buvo su aštuoniais mosfetais ir viskas ten veikė. Vėliau patobulėjom iki tiltinių mikroschemų, o PCB liko kaip ir nereikalingos. Nutariau paeksperimentuoti su apšvietimo valdymu, tai šios plokštelės kaip ir atrado savo naują panaudojimą.
Kiek paguglinau ir radau, kad DMX512 standartas lengvai atkartojamas ir padaromas (Digital Multiplex). Ir jam prirašytas kalnas softo. Tiek “masterių” tiek ir “sleivų”. Pradžioje norėjau viską rašyti nuo nulio, bet nusprendžiau, kad reikia pradžiai kažką turėtu kad bent jau teoriškai atitinką standartą. Todėl siuntiką (master) nusipirkau pas kinus. Tau uDMX USB donglas. Fiziniam lygyje tai kažkokio tai lygios nuoseklus išėjimas per EIA-485 diferencialinį busą. Duomenų perdavimas 250000 bitų per sekundę. Start signalas sudarytas iš kiek pailginto nulinio signalo. Naudojant mikrokontrolerį start signalas detektuojamas pagal frame error ir kad priimtas būtent nulis.
Iš pradžių pats rašiau visą priėmimo paprogramę, bet grynai dėl techninių problemų man niekas nesigavo. Tada radau internete ulrichradig.de puslapius, kurių softas … irgi neveikė. Pasirodo, padariau elementarią klaidą- mano naudojamas kvarcas visiškai nesiderino su DMX0 250kbit greičiu. Gal ir mano softas būtų veikęs, bet jis pražuvo redagavimo lavinoje.
Plokštelėje yra aštuoni mosfetai. Visi valdosi nepriklausomai- įrenginys suvartoja 8 DMX kanalus ir priklausomai nuo kanalo vertės daro kiekvieno kanalo dimeriavimą PWM metodais. Tai grynai softwarinis PWMas, todėl didelio dreičio nesitikėkit. Naudojant LEDus netgi kiek matosi šviesos diodų mirgėjimas.
Schema paprasta: SN75176 čipas priima signalus iš DMX (hot, A-, 2; cold, B+, 3) ir konvertuoja į TTL lygio serial. Toliau mažytė atmega viską paskaičiuoja ir per savo kojeles vardo paprastus npn tranzus, kurie savo ruožtu junginėja kiek galingesnius 30V mosfetus iš video plokščių ar nešiojamų kompų. Visa nesamonė su npn tranzais duotu du efektus- aukštesnė įtampa valdomi galios mosfetai. Tai gerai. O štai, kad inveruojasi signalas ir užsidega LEDai kai nuspaustas reset, tai jau blogai.
Softas su minimaliais pakeitimais turi veikti ant bet kokios megos. Svarbu, kad mega važiuotu ant tokio dažnio, kad teisingai susiskaičiuotu serial interfeiso taktinis dažnis. Aš savo eksperimente naudoju 12MHz kvarcą (nors mega važiuoja max 10MHz, tai kaip ir overclockinu).
DMX “lempos” adresas užkoduotas firmware. Teoriškai reikėtu padaryti jį keičiamą…
Ant didelio kompo naudojau FreeStyler softą.
Ir aišku:DMX LED dimmerio softas, source code ir kompiliuotas hex.
Kadangi vėl išvažiuoju į jungtines karalystes, vėl bus savaitė kai net negalvosiu ką čia jums parašyti. Žodžių atostogaukite.
Šrotas MEGA162
Karta paklausė, kodėl naudoji tą ar aną mikroschemą. Atsakau- todėl, kad kur nors jų prilupau ar gavau. Va jums iliustracija, kaip gal būt, pas mane projektai bus ir su ATMEGA162 mikroschema.
Technologija tokia- kai atveža technologinį šrotą, žiūrim ar nėra ko nors tokio ardomo. O jei to ardomo būna vienodo tai dar geriau. O jei tas ardomas dar ir ryškiai raudonas, tai visai gerai, nes bendram žaliam fone jis lengvai išrenkamas. Tada reikia vikriai pririnkti.
Poto gerai išplauti po kranu. Nes dažnai būna labai nešvaru.
Continue reading →
CNC- 4 ašis, rotacinė
Kažkaip nieko naujo nepagaminom, bet šioks toks mechaninis- elektroninis- programinis projektas padarytas. Jau senau rašiau apie savo CNC eksperimentus (kuris prasidėjo taip)- trumpai: hostiniam kompe sukasi softas, kuris per USB/COM/RS485 perėjima jungiasi prie kelių “slave” plokštelių. Šios plokštelės gali valdyti po du steperius (Motorola- Freescale versija turi 4 tiltus, o diskretinių mosfetų versija- 8 kanalai į žemę). Yra šioks toks feedback. Nors viskas padaryta “ant snarglių” bet kaip nekeista- veikia. Dabar pasinaudojau lazeriu, sena akumuliatorine drėle ir dauginimo aparato tonerio sukimo mechanizmu. Taip gimė ketvirta ašis- rotacinė.
AVR55:dar vienas LCD iš telefono
Seniai mėtėsi stalčiuje, niekaip nekilo rankos jį pajungti. Tačiau kažkaip papuolė po ranka. Tai tikriausiai iš kokio senoviško Siemens telefono LCD ekraniukas su kodu “M15SGFNZ07”, spėtinai iš Siemens A65, M55, C60, MC60, S55, A60 ar panašiai.
Jungiasi per 3V logikos, ir toks pats maitinimas. Pinoutas žiūrint nuo siauresnės ekrano dalies, iš kairės (kai ekrano jungtis kairėje apačioje):
1-CS
2-RESET
3-RS
4-SCL
5-SDA
6- +2.9V Vcc
7- GND
8- LED1+
9- LED1, LED2 GND
10- LED2+
Ties SCL ir SDA tik šiaip panašūs į I2C. Ištikruju ten žymiai paprastesnis protokolas.
Kiek paguglinus buvo rasti du šaltiniai- kažkokio lenko kūryba ir vienas Lietuviškas saitas. Lietuviškas buvo Arduino variantas, todėl jo per daug nesinagrinėjau. O lenko kūryba pasinaudojau, kad bent jau kažką rodytu. Poto gana daug perrašiau pats ir optimizavau. Gavosi kaip ir biblioteka kuri dalinai high-level sutampa su kitų ekraniukų valdymu. Todėl nėra problemų perkelti projektą iš vieno ekraniuko į kitą. A, dar, proporcinis šriftas, nes su monospace ant tokio ekraniuko (100*80) nelabai prasisuksi.
Dėl spalvų tai nežinau- ar tas LCD toks prastas, ar blogai sureguliuotas kontrastas. Beja, šis ekraniukas yra žiauriai lėtas. T.y. pats skystas kristalas lėtas.
Šiaip, dar vienas momentas- čia naudojamas softwarinis SPI. Nes eksperimentuojama buvo ten kur SPI naudojamas kitais tikslais. Tačiau nėra didelė problema padaryti per hardwarinį SPI. Tik vienoje vietoje reikia kiek pakeisti kodą.
Nu ir žinoma:
M55 Siemens LCD ekraniuko AVR source code ir kompiliuotas hex failas (ATMEGA16)