Tag Archives: AVR

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 →

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.

DMX LED dimmer
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.
ATMEGA162
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ė.

CNC rotational axis
Continue reading →

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.

LM15SGFNZ07 ATMEGA AVR
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)

AVR49: kitas grafinis LCD ILI9341

Šio LCD ekraniuko paleidimas užtrūko. Ir dėl kinų kaltės. Aprašyme buvo parašyta- maitinimas 5 arba 3V. Apžiūrėjau PCB- tikrai, stovi nedidelis reguliatorius, pajungus maitinimą viskas gerai- 3.3V stabilizuotas. Panašiai kaip ir mažesniam ekranėlyje kurį jau aprašiau. Tačiau viena subtilybė- kai gamino mažesnį ekraną, duomenų laiduose sumontavo rezistorius, todėl jungiant prie 5V MCU signalų lygiai daugmaž susitvarko. Ant didesnio ekrano PCB tų rezistorių nėra, todėl per duomenų šyną ir apsauginius diodus, ekrano kontroleris “užsimaitina” iki maždaug 5V. Kas baisiausia, kontroleris veikia- iš jo galima nuskaityti registrus. Netgi mano surastas softas nuskaito kontrolerio modelį ir programa praeina check-point. Bet taigi vaizdo tai nėra! Gal atitinkamai perprogramavus kontrolerį koks nors vaizdas ir atsirastu, bet datašytas sako- 5V niu-niu. Teko sudeginti milijardą nervinių ląstelių ir staiga ekranas pradėjo dirbti:

color LCD SPI ILI9341 AVR
Tas didesnis ekranas, su raudona plokštele tai 320×240 pix SPI ekraniukas su ILI9341 kontroleriu. Palyginkit seno straipsnio nuotrauką ir šią nuotrauką. Iškarto matosi, kad rezoliucija šio ekraniuko žymiai geresnė.

Aišku source kodas AVR šeimos procesoriukams, ir sukompiliuotas HEX skirtas mano universaliai PCB ir ATMEGA16 @12MHz. SPI dažnis maksimalus- 6MHz (Kiek parodė vėlesnis eksperimentas SPI dažnis galimas ir didesnis, LCD ekraniukas dirba ir su ~24MHz CLK dažniu. Todėl čia dažnis maksimalus kokį išspjauna mano ATMEGA16 plokštė). Naudojamas hardwarinis SPI.
ILI9341 LCD SPI source code AVR-ATMEGA16 ir hex.

AVR48B: lietingas savaitgalis

Biški lijo, biški tingėjau… O ir buvo knietulys pažaisti su spalvotu LCD ekraniuku. Todėl, prisimindamas savo seną kompiuterį ATARI, nutariau pasidaryti nedidelį Arkanoid (アルカノイド Arukanoido) kloną.
Kadangi tai nepilnos dienos kūryba, tai pilnas bugų ir klaidų. Bet šiaip sušildė širdį. 🙂

Kai kurie bugai priminė originalų atari variantą, tai gal juos reikės palikti. Jei pabaigsiu ir bus poreikis pas skaitytojus, paviešinsiu source kodą.

AVR 48: ST7735 grafinis LCD

Pajungsim prie mano universalios ATMEGA16 plokštės grafinį LCD ekraniuką iš eBayjaus.
LCD ST7735 with AVR ATMEGA16
Paprastas, pigus spalvotas 1.8″ TFT ekraniukas jungiamas per SPI. Pilnas eBay tokių ekraniukų. Kontroleris ST7735.
Internete pilna visokiausio softo, bet jis skirtas arba kitiems procesoriams, arba su arduino anstatu. O man reikėjo gryno paprasto GNU C. Tai teko kiek pavargti kol suklijavau iš kelių gabaliukų.
Navarotai tokie:
proporcinis ar monospace šriftas (tiesa, fonto duomenys 8 bitų aukščio), proporcinis šriftas tas pats kaip ir ant ARM eksperimento. Tiesa yra galimybė grubiai didinti šriftą. Ką ir rodo iliustracija.
Paišo grafinius primityvus: taškas, užtušuotas stačiakampis, stačiakampis, apskritimas, užtušuotas apskritimas, H ir V linija.
Priima duomenis (blob tipo) ir deda ant ekrano- galima įkelti paveikslėlius. Reikės kiek pavargti ir padaryti “penis harder” paveiksliuko iliustraciją. Priima “nekompresuotą” RGB (24bit) arba supaprastintą RGB (16bit).

Ir aišku source code bei kompiliuotas hex.

ST7735 LCD driver for AVR ATMEGA16, source code.