Samo radni dijagrami!: Projekti na ATMega8. Anatomija ATmega mikrokontrolera Radio sklopovi za dom na atmega8

Mikrokontroleri Atmega8 najpopularniji su predstavnici svoje obitelji. Na mnoge načine to duguju, s jedne strane, jednostavnosti rada i razumljivoj strukturi, as druge, prilično širokoj funkcionalnosti. Ovaj članak će pokriti Atmega8 programiranje za početnike.

opće informacije

Mikrokontroleri su posvuda. Nalaze se u hladnjacima, perilicama rublja, telefonima, tvorničkim strojevima i velikom broju drugih tehničkih uređaja. Mikrokontroleri se kreću od jednostavnih do iznimno složenih. Potonji nude znatno više mogućnosti i funkcionalnosti. Ali nećete moći odmah razumjeti složenu tehnologiju. U početku morate svladati nešto jednostavno. I Atmega8 će se uzeti kao uzorak. Programiranje na njemu nije teško zahvaljujući kompetentnoj arhitekturi i prijateljskom sučelju. Osim toga, ima dostatne performanse za korištenje u većini, štoviše, koriste se čak iu industriji. U slučaju Atmega8, programiranje zahtijeva poznavanje jezika kao što je AVR (C/Assembler). Gdje započeti? Ovladavanje ovom tehnologijom moguće je na tri načina. I svatko za sebe bira gdje će početi raditi s Atmega8:

  1. Programiranje putem Arduina.
  2. Kupnja gotovog uređaja.
  3. Samostalna montaža mikrokontrolera.

Razmotrit ćemo prvu i treću točku.

Arduino

Ovo je praktična platforma dizajnirana u obliku koji je prikladan za brzo stvaranje različitih uređaja. Ploča već ima sve što vam je potrebno u obliku samog mikrokontrolera, njegovog kabelskog svežnja i programatora. Slijedeći ovaj put, osoba će dobiti sljedeće prednosti:

  1. Zahtjevi za niski prag. Za razvoj tehničkih uređaja ne morate imati posebne vještine.
  2. Širok raspon elemenata bit će dostupan za spajanje bez dodatne pripreme.
  3. Brzi početak razvoja. S Arduinom možete odmah skočiti u stvaranje uređaja.
  4. Dostupnost velikog broja materijala za obuku i primjera implementacija različitih dizajna.

Ali postoje i određeni nedostaci. Dakle, Arduino programiranje Atmega8 ne dopušta vam da uronite dublje u svijet mikrokontrolera i razumijete mnoge korisne aspekte. Osim toga, morat ćete naučiti programski jezik, koji se razlikuje od onih koje koristi AVR (C/Assembler). I još nešto: Arduino ima dosta uzak izbor modela. Stoga će se prije ili kasnije pojaviti potreba za korištenjem mikrokontrolera, koji se ne koristi u pločama. Ali općenito, ovo je dobra opcija za rad s Atmega8. Programiranje putem Arduina omogućit će vam siguran početak u svijetu elektronike. A osoba vjerojatno neće odustati zbog neuspjeha i problema.

Samostalna montaža

Zahvaljujući jednostavnom dizajnu, možete ih izraditi sami. Uostalom, to zahtijeva jeftine, pristupačne i jednostavne komponente. To će vam omogućiti da temeljito proučite dizajn mikrokontrolera Atmega8, čije će se programiranje nakon sastavljanja činiti lakšim. Također, ako je potrebno, možete samostalno odabrati druge komponente za određeni zadatak. Istina, ovdje postoji određeni nedostatak - složenost. Nije lako samostalno sastaviti mikrokontroler kada nemate potrebna znanja i vještine. Razmotrit ćemo ovu opciju.

Što je potrebno za montažu?

Prvo morate nabaviti samu Atmega8. Programiranje mikrokontrolera bez njega, znate, nemoguće je. To će koštati nekoliko stotina rubalja - uz pristojnu funkcionalnost. Tu je i pitanje kako će se Atmega8 programirati. USBAsp je dosta dobar uređaj koji se jako dobro pokazao. Ali možete koristiti neki drugi programator. Ili ga sastavite sami. Ali u ovom slučaju postoji rizik da će, ako je loše napravljen, mikrokontroler pretvoriti u nefunkcionalni komad plastike i željeza. Također ne bi škodilo imati matičnu ploču i skakače. Nisu obavezni, ali će vam uštedjeti živce i vrijeme. I na kraju, potrebno vam je napajanje od 5V.

Atmega8 programiranje za početnike na primjeru

Pogledajmo kako, općenito, nastaje uređaj. Dakle, recimo da imamo mikrokontroler, LED, otpornik, programator, spojne žice i napajanje. Prvi korak je pisanje firmvera. Pod njim se podrazumijeva skup naredbi za mikrokontroler koji se prikazuje kao konačna datoteka u posebnom formatu. Potrebno je specificirati povezanost svih elemenata, kao i interakciju s njima. Nakon toga možete početi sastavljati krug. VCC pin bi trebao biti napajan. Na bilo koji drugi, dizajniran za rad s uređajima i elementima, prvo je spojen otpornik, a zatim LED. U ovom slučaju, snaga prvog ovisi o zahtjevima snage drugog. Možete koristiti sljedeću formulu: R=(Up-Ups)/Is. Ovdje je p snaga, a s LED. Zamislimo da imamo LED diodu koja troši 2 V i zahtijeva struju napajanja od 10 mA, pretvorimo je u oblik pogodniji za matematičke operacije i dobijemo 0,01 A. Tada će formula izgledati ovako: R=(5V-2V)/0,01A=3V/0,01A=300 Ohm. Ali u praksi je često nemoguće odabrati idealan element. Stoga se uzima najprikladniji. Ali trebate koristiti otpornik s otporom većim od vrijednosti dobivene matematički. Zahvaljujući ovakvom pristupu, produžit ćemo mu vijek trajanja.

Što je sljedeće?

Dakle, imamo mali dijagram. Sada preostaje samo spojiti programator na mikrokontroler i u njegovu memoriju upisati kreirani firmware. Postoji jedna stvar ovdje! Prilikom izgradnje kruga potrebno ga je izraditi na takav način da se mikrokontroler može bljeskati bez odlemljivanja. To će uštedjeti vrijeme, živce i produžiti vijek trajanja elemenata. Uključujući Atmega8. Programiranje unutar kruga, treba napomenuti, zahtijeva znanje i vještine. Ali također vam omogućuje stvaranje naprednijih dizajna. Uostalom, često se događa da se tijekom odlemljivanja elementi oštete. Nakon toga, dijagram je spreman. Može se primijeniti napon.

Važne točke

Želio bih početnicima dati korisne savjete o programiranju Atmega8. Nemojte mijenjati ugrađene varijable i funkcije! Preporučljivo je bljeskati uređaj stvorenim programom nakon što ga provjerite na odsutnost "vječnih petlji", koje će blokirati sve druge smetnje i korištenje dobrog odašiljača. Ako koristite domaći proizvod za ove svrhe, trebali biste biti psihički spremni da mikrokontroler ne uspije. Kada flešujete uređaj pomoću programatora, trebali biste spojiti odgovarajuće izlaze VCC, GND, SCK, MOSI, RESET, MISO. I nemojte kršiti sigurnosne mjere! Ako tehnički podaci predviđaju da napajanje bude 5V, onda se morate pridržavati upravo tog napona. Čak i korištenje 6V elemenata može negativno utjecati na performanse mikrokontrolera i skratiti njegov vijek trajanja. Naravno, 5V baterije imaju određene razlike, ali, u pravilu, sve je u razumnim granicama. Na primjer, maksimalni napon će se zadržati na 5,3 V.

Osposobljavanje i usavršavanje vještina

Srećom, Atmega8 je vrlo popularan mikrokontroler. Stoga neće biti teško pronaći istomišljenike ili jednostavno obrazovane i vješte ljude. Ako ne želite ponovno izumiti kotač, već samo želite riješiti određeni problem, tada možete potražiti traženu shemu na golemoj svjetskoj mreži. Usput, mali savjet: iako je robotika prilično popularna u segmentu ruskog govornog područja, ako nema odgovora, trebali biste ga potražiti u segmentu engleskog govornog područja - on sadrži red veličine više informacija. Ako postoje određene sumnje u kvalitetu postojećih preporuka, onda možete potražiti knjige koje govore o Atmega8. Srećom, proizvodna tvrtka uzima u obzir popularnost svojih razvoja i opskrbljuje ih specijaliziranom literaturom, gdje iskusni ljudi govore što i kako, a također daju primjere kako uređaj radi.

Je li teško početi stvarati nešto svoje?

Dovoljno je imati 500-2000 rubalja i nekoliko slobodnih večeri. Ovo vrijeme je više nego dovoljno da se upoznate s arhitekturom Atmega8. Nakon malo vježbe, možete jednostavno izraditi vlastite projekte koji obavljaju određene zadatke. Na primjer, robotska ruka. Sama Atmega8 bi trebala biti više nego dovoljna za prenošenje osnovnih motoričkih funkcija prstiju i ruke. Naravno, ovo je prilično težak zadatak, ali je sasvim izvediv. U budućnosti će biti moguće stvarati složene stvari koje će zahtijevati desetke mikrokontrolera. Ali ovo je sve pred vama, prije toga morate dobiti školu dobre prakse na nečem jednostavnom.

Mjerač frekvencije na AT90S2313

Virtualni frekvencijski mjerač je “komplet” koji se sastoji od programa za osobno računalo i jednostavnog mjernog uređaja koji se spaja na COM port računala.Virtualni instrument omogućuje vam mjerenje frekvencije, perioda, vremenskih intervala i brojanje impulsa.

detalji:http://home.skif.net/~yukol/FMrus.htm

Preporučujem sastavljanje jednostavnog dizajna koji ne zahtijeva nikakva podešavanja i što je najvažnije funkcionira! Mikrokontroler programiranprogramator PonyProg - izvrstan programator, jednostavan, veliki izbor programabilnih mikrokontrolera,radi pod Windowsima, rusko sučelje.


Časopis "Radio" N1 2002 Za Ni-Cd baterije. Omogućuje punjenje 4 baterije.



Frekvencijski brojač na slici 16F84A

Tehničke karakteristike frekvencmetra:

Maksimalna izmjerena frekvencija.............30 MHz;

Maksimalna rezolucija mjerene frekvencije je... 10 Hz.

Ulazna osjetljivost...................250 mV;

Napon napajanja ........................8... 12 V:

Potrošnja struje........................35 mA


Detalji, firmware:http://cadcamlab.ru


Stanica za lemljenje na Atmega 8


Lemilo i sušilo za kosu prebacuju se pomoću PC sklopki. Sušilom za kosu upravlja tiristor, jer Sušilo za kosu 110V umjesto R1 diode s katodom na V.6.


Detalji, firmware: http://radiokot.ru/forum


Digitalni mjerač kapaciteta bez odlemljivanja iz kruga

Opis je dan u časopisu "Radio" br. 6, 2009. Dizajn je sastavljen na AT90S2313, Tiny2313 je korišten bez promjena u firmveru. U Ponki sam postavio checkboxove za SUT1, CKSEL1, CKSEL0, ostali su prazni. Nisam instalirao MAX631, to je nešto skupo za nas, odlučio sam ga napajati iz napajanja preko 7805 stabilizatora, R29, R32, R33 je stavljen na napajanje plus. Osim mjerača kapaciteta, u kućište je ugrađena sonda za ispitivanje tranzistora bez odlemljivanja i generator niskofrekventnog visokofrekventnog signala.



Mjerač parametara poluvodiča ATmega8

Uređaj može:

Prepoznati terminale poluvodiča;
- odrediti vrstu i strukturu;
- mjerenje statičkih parametara.
Mjeri diode, bipolarne tranzistore, JFET i MOS tranzistore s efektom polja, otpornike, kondenzatore.


Mjerilo je izrađeno u istom kućištu s FCL mjeračem, indikator se prebacuje između uređaja pomoću PC prekidača.

Mjerač frekvencije, mjerač kapaciteta i induktiviteta - FCL-metar

Dolje opisani uređaj omogućuje vam mjerenje frekvencija električnih oscilacija u širokom rasponu, kao i kapacitet i induktivitet elektroničkih komponenti s visokom točnošću. Dizajn ima minimalne dimenzije, težinu i potrošnju energije.

Tehnički podaci:

Napon napajanja, V: 6…15

Potrošnja struje, mA: 14…17

Granice mjerenja:

F1, MHz 0,01…65**

F2, MHz 10…950

Od 0,01 pF...0,5 µF

L 0,001 µH…5 H


Dijagram udaljene glave


Više detalja: http://ru3ga.qrz.ru/PRIB/fcl.shtml


Minijaturni voltmetar baziran na ATmega8L mikrokontroleru


Ovdje razmatramo dizajn voltmetra koji se temelji samo na ATmega8L mikrokontroleru i indikatoru iz elektroničkog medicinskog termometra. Raspon izmjerenih istosmjernih napona je ±50 V. Kao dodatna funkcija implementiran je način rada zvučne sonde za provjeru ispravnosti žica i žarulja sa žarnom niti. Uređaj automatski prelazi u stanje pripravnosti ako nema mjerenja. Mikrokontroler napajaju dvije minijaturne alkalne ćelije (baterije za ručne satove), 1 element sam postavio na 3V. Neće biti potrebe za čestim mijenjanjem baterija: trenutna potrošnja u aktivnom načinu rada je samo 330 μA, u stanju pripravnosti - manje od 300 nA. Zahvaljujući minijaturnom dizajnu i mogućnostima, uređaj je koristan i praktičan. Moja ploča nije stala u kućište termometra, pa sam je napravio u kućištu od flomastera. Napravio sam vlastitu ploču, instalirao otpornike R5-R7 okomito na sabirnice. VADZZ je pomogao napraviti firmware iz izvora, zahvaljujući njemu. Indikator vodi s lijeva na desno, vodiči su na dnu i okrenuti prema vama.

Dijagram (za dijagram u punoj veličini spremite sliku na svoje računalo).

Za više detalja pogledajte: http://www.rlocman.ru/shem/schematics.html?di=63917

Punjač s funkcijom mjerenja kapaciteta

Htio sam izmjeriti kapacitet baterije; uvozni mjerači su prilično skupi, pa sam pronašao zanimljiv sklop i sastavio ga. Dobro radi, puni, mjeri, ali teško mi je reći s kojom točnošću - standarda nema. Izmjerio sam baterije prilično pristojnih tvrtki 2700 mA/h - ciljao sam na 2000. Baterije iz igračaka 700 mA/h -350, naručio sam kineske BTY baterije na EBAY-u 2500 mA/h - 450 mA/h, ali u isto vrijeme sasvim su pristojne, dobro rade u igračkama, puno jeftinije od baterija.


Uređaj je namijenjen za punjenje NiMH baterija i praćenje njihovog kapaciteta. Prebacivanje između načina punjenja/pražnjenja vrši se tipkom SA1. Način rada prikazuje se LED diodama i decimalnim točkama prve dvije znamenke sedmosegmentnog indikatora.
Odmah nakon uključivanja, uređaj prelazi u način punjenja. Indikator pokazuje vrijeme punjenja. Nakon isteka programiranog vremena, punjenje se zaustavlja. Završetak punjenja (i pražnjenja) označen je upaljenom točkom četvrtog pražnjenja. Struja punjenja definirana je kao C/10, gdje je C kapacitet baterije, podešen trimerom R14.
Načelo rada mjerača temelji se na izračunavanju vremena tijekom kojeg će napon baterije pasti na 1,1 V. Struja pražnjenja treba biti jednaka 450 mA, postavljena na R16. Da biste izmjerili kapacitet, potrebno je umetnuti bateriju u odjeljak za pražnjenje i pokrenuti proces pritiskom na tipku! Uređaj može isprazniti samo jednu bateriju.

Više detalja:http://cxem.net

Univerzalna pećnica za radio amatere

Pećnica za lemljenje SMD dijelova ima 4 programabilna načina rada.

Dijagram upravljačke jedinice (za dijagram u punoj veličini spremite sliku na svoje računalo).


Napajanje i kontrola grijača


Sastavio sam ovaj dizajn za kontrolu IR stanice za lemljenje. Možda ću jednog dana upravljati štednjakom. Došlo je do problema s paljenjem generatora, ugradio sam kondenzatore od 22 pF sa pinova 7 i 8 na masu i normalno je krenuo. Svi modovi rade normalno, opterećen keramičkim grijačem od 250 W.

Više detalja: http://radiokot.ru/lab/hardwork/11/

Dok nema peći napravio sam ovo donje grijanje za male daske:

Grijalica 250 W, promjer 12 cm, poslana iz Engleske, kupljena na EBAY-u.


Digitalna stanica za lemljenje za PIC16F88x/PIC16F87x(a)

Stanica za lemljenje s dva istodobna lemila i sušilom za kosu. Možete koristiti različite MCU (PIC16F886/PIC16F887, PIC16F876/PIC16F877, PIC16F876a/PIC16F877a). Korišten je ekran od Nokie 1100 (1110). Brzina turbine sušila za kosu kontrolira se elektronički, a koristi se i reed prekidač ugrađen u sušilo za kosu. Autorova verzija koristi prekidačko napajanje, ja sam koristio transformatorsko napajanje. Svima se sviđa ova stanica, ali s mojim lemilicom: 60W, 24V, s keramičkim grijačem, ima puno zaleta i kolebanja temperature. Istodobno, lemilice manje snage s nichrome grijačem imaju manje vibracija. U isto vrijeme, moje lemilo, s gore opisanom stanicom za lemljenje iz Mikha-Pskova, s firmwareom iz Volua, održava temperaturu na stupanj. Dakle, potreban vam je dobar algoritam za grijanje i održavanje temperature. Kao eksperiment, napravio sam PWM regulator na tajmeru, primijenio upravljački napon s izlaza pojačala termoelementa, isključio ga, uključio s mikrokontrolera, fluktuacija temperature odmah se smanjila na nekoliko stupnjeva, to potvrđuje da je ispravan potreban je kontrolni algoritam. Vanjski PWM je, naravno, pornografija u prisutnosti mikrokontrolera, ali dobar firmware još nije napisan. Naručio sam drugo lemilo, ako ne pruži dobru stabilizaciju, nastavit ću svoje eksperimente s vanjskom PWM kontrolom i možda će se pojaviti dobar firmware. Stanica je sastavljena na 4 ploče, međusobno povezane konektorima.

Dijagram digitalnog dijela uređaja prikazan je na slici, radi jasnoće prikazana su dva MK: IC1 - PIC16F887, IC1 (*) - PIC16F876. Ostali MK-ovi su spojeni na isti način, na odgovarajuće priključke.

Da biste promijenili kontrast, morate pronaći 67 bajtova, njegova vrijednost je "0x80", za početak možete staviti "0x90". Vrijednosti moraju biti od "0x80" do "0x9F".

Što se tiče zaslona 1110i (tekst se prikazuje zrcalno), ako nije kineski, već original, otvorite EEPROM, potražite 75 bajtova, promijenite ga iz A0 u A1.

Za razmatranje i moguće ponavljanje, vrlo jednostavan sklop, vrlo dobar mjerač vremena. Uz praktičnu navigaciju kroz izbornik, s LCD zaslonom s tekućim kristalima, sa satom u stvarnom vremenu, s minimalnim mogućim brojem detalja, a uz sve to možete programirati čak stotinjak vremenskih razdoblja tijekom dana.

Kompaktne dimenzije

Video testa mjerača vremena

Srce ovog timera je vrlo popularan i više ne skup Atmega8 mikrokontroler. Možete reći da će nam za flash firmware trebati programator kojeg nemamo, ali to nije istina; za flash firmware Atmega dovoljno je samo pet kratkih žica od 10-15 cm povezanih preko otpornika od 150-200 Ohma. izravno na LPT priključak pomoću ove sheme.


Zbog toga su ovi mikrokontroleri postali najpopularniji među radioamaterima.

Na ovoj slici vidite: Pinout dijagram MK nogu za povezivanje i firmware.

Korak 1. Pripremite sve što vam je potrebno za izradu mjerača vremena.

Najpotrebnije radio komponente kruga, ostatak se obično može pokupiti kod kuće, najmanji mikro krug je sat DS1307.

Trebat će nam sljedeći radioelementi:

Integralni sat DS1307
LCD indikator tekućih kristala
Stabilizator 7805
500-1000 Mf - 16 volti.
Relej ili elektronički ključ (ovisno o opterećenju koje se planira spojiti).
otpor 5,1 kohm - 3 kom., promjenjivi otpornik (prema priručniku za LCD zaslon).
Kvarcni sat 32768 Hz.
Momentalni gumbi - 4 kom.
Baterija je tablet od 3 volta.
Tekstolit za ploču.
Mali transformator ~220V. -> ~6-12c.
Razvodna kutija za kućište.
+ Za programera: otpornici 150-200 Ohm. - 4 kom., konektor LPT porta (za praktičnost, nije potrebno).

Obavezni alati za svakog radioamatera:
Lemilo za lemljenje mikro krugova, lemilo za lemljenje pasivnih radio komponenti i žica.
Tester za testiranje staza i provjeru radio komponenti.
Kositar, kolofonij.
+ Laserski pisač (za izradu tiskane ploče ili na neki drugi način).

Točka 2. Počnimo s proizvodnjom.

Napravit ćemo mjerač vremena prema ovoj glavnoj shemi.


Kao što vidite, na njemu nema dijagrama napajanja i izlaznog aktuatora, to je zato što se možda odlučite koristiti vanjsko stabilizirano napajanje, a također ne znate koje opterećenje planirate spojiti, stoga svi moraju sami odabrati aktuator koji odgovara njihovim tehničkim zahtjevima.

Osobno sam koristio ovaj krug napajanja i aktuator na tranzistoru i relej za svoj tajmer.


Ali možda ćete htjeti koristiti trijake, tiristore i trijake kao aktuator; opcije za takve krugove prikazane su u nastavku.



Oni su kompaktniji (bez hladnjaka), ali manje snažni od jednostavnog releja.

U skladu s glavnom shemom sklopa + PSU + IU i analizom montažnih dimenzija vaše kutije za kućište, kao i dimenzija odabranih radijskih elemenata, dizajniramo oblik, veličinu i uzorak staza na ploči. Da biste to učinili, prikladno je koristiti program Sprint Layout.

Za svoj uređaj dobio sam ovu jednostavnu ploču.


Dobiveni crtež prenosimo posebnim markerom ili LUT tehnologijom (pomoću laserskog pisača i glačala) na bakreni sloj PCB-a. Ako imate Brother laserski pisač (kao ja), onda je bolje da odmah odustanete od ideje o LUT-u, zbog vatrostalnog tonera koji se koristi u njemu ~400C umjesto uobičajenih ~200C; usput, jednom sam glupo kupio ovaj pisač posebno za LUT :(. , tako da je kao rezultat moja ploča nacrtana markerom.
Uzorak nanesen na bakar ugraviran je u kupki željeznog klorida ili bilo koje druge posebne otopine.


Dijelove lemimo na gotovu ploču prema shemi, pri čemu posebnu pozornost posvećujemo ugradnji i lemljenju satnog čipa i kvarcnog elementa. Duljina staza između njih trebala bi biti minimalna, ali bolje je koristiti mikro kvarc iz ručnog sata i lemiti ga izravno na MC noge sata. Sav slobodni prostor pored sata i kvarcnog MC-a popunjavamo jastučićima kućišta (GND). Baterija je potrebna kako bi sat radio dok nije priključen na struju. Ako iz nekog razloga niste instalirali ovu bateriju, spojite pozitivnu žicu na kućište, inače sat jednostavno neće raditi.

Mikrokontroler bljesnemo programatorom ili pomoću 5 žica.

*Firmware* (preuzimanja: 1414)

Autor firmvera stvoren je posebno radi praktičnosti (na čemu mu zahvaljujemo) i nije mijenjao tvorničke osigurače, što vrlo lako, bez ikakvih problema, instalira firmver za početnika radio amatera. Ako MK još nije korišten, novi je iz trgovine, tada samo prenesite firmware i to je to, ali ako već postoje promjene u osiguračima, tada ih morate postaviti kao CKSEL=0001. Sve ostalo je jednostavno i ne treba objašnjavati.

Točka 3. Montaža.

Vrlo je prikladno koristiti plastične razvodne kutije za kućište, dolaze u različitim veličinama i oblicima.




Vrućim ljepilom iz pištolja pričvrstimo LCD zaslon na poklopac izrezan nožem, izrežemo rupe za upravljačke gumbe i gumb za uključivanje.



Odrežite ljepilo koje strši.

Projekti na ATMega8.

Jednostavni projekti za proučavanje jednog od najjednostavnijih i najpopularnijih mikrokontrolera.

Za rad će vam trebati najmanje CodeVision AVR2.04.4a i Proteus 7.2 SP6. Ako želite raditi s hardverom, trebat će vam i programer. Preporučujem ovaj - lako se sastavlja i dobro radi. Jedini problem je s početnim firmverom ATMega8, to se može učiniti ili putem LPT priključka - 5-provodov-avr, ili možete kupiti "žičani" mikrokontroler, uzeo sam ga.


Semafor br.1.

Najjednostavniji semafor u jednom smjeru ne zahtijeva puno truda i vještine za izradu. Krug se sastavlja za nekoliko minuta. Otpornici se odabiru na temelju korištenih LED dioda (ocjena 470 Ohma je naznačena za "sovjetski" AL307), treba napomenuti da je u dijagramu AVCC pin spojen na napajanje, ako nije spojen na pravi mikrokontroler, bez obzira na korištenje ugrađenog ADC (analogno-digitalni pretvarač), tada možete oštetiti mikro krug (vrijedi za sve kontrolere serije Mega)!!!

Izvorni kod je toliko jednostavan da ću ga predstaviti upravo ovdje. Našao sam ovaj kod za C na internetu i malo ga ispravio, međutim, svaki programer će vam reći da je ovaj kod glup (kasnije ću opisati kako se točno pišu takvi programi), ali je jednostavan, vizualan i radi.

Vrsta čipa: ATmega8
Vrsta programa: Primjena

Model memorije: Mali
Veličina snopa podataka: 256


#uključi

#uključi

void glavni (praznina)
{
// Inicijalizacija priključka B
PORTB=0x00;
DDRB=0x00;

// Inicijalizacija priključka C
PORTC=0x00;
DDRC=0x00;

// Inicijalizacija priključka D
PORTD=0x00;
DDRD=0x07;

// Inicijalizacija vanjskog prekida(a).
// INT0: Isključeno
// INT1: Isključeno
MCUCR=0x00;


// Analogni komparator: Isključeno

ACSR=0x80;
SFIOR=0x00;

dok (1) (

PORTD.2=1; //zeleno svijetli
kašnjenje_ms(8000); //svijetli 8 sekundi


kašnjenje_ms(500); //Pričekajte pola sekunde


PORTD.2=0; //Isključi zeleno

PORTD.2=1; //Uključi zeleno

/*delay_ms(500);//Pričekajte pola sekunde
PORTD.2=0; //Isključi zeleno
kašnjenje_ms(500); //Pričekajte pola sekunde
PORTD.2=1; //Uključi zeleno
kašnjenje_ms(500); //Pričekajte pola sekunde*/

PORTD.1=1; //Uključi žuto
PORTD.2=0; //Isključi zeleno
kašnjenje_ms(3000); //Pričekajte 3 sekunde

PORTD.0=1; //Upali crveno
PORTD.1=0; //isključi žuto
kašnjenje_ms(9000); //9 sekundi

PORTD.1=1; //pretvoriti žuto u crveno
kašnjenje_ms(3000); //pričekajte 3 sekunde
PORTD.0=0; //Isključi crveno
PORTD.1=0; //i žuto
};
}

Kod se može još malo skratiti ako uzmemo u obzir da su prema zadanim postavkama gotovo svi ATMega8 portovi i registri inicijalizirani na 0. Sada za početnike, neka objašnjenja:

#uključi

#uključi

To su takozvane datoteke zaglavlja, u njima su zapisani postupci koje ćemo primijeniti iz drugih datoteka. Na primjer, proceduru delay_ms(X), koja određuje kašnjenje u milisekundama, napisala je druga osoba i nalazi se u datoteci delay.c (zapravo, sve možda nije baš tako, ili uopće nije - procedura može sadržavati objektnu datoteku tipa *. obj, *.asm), a pravila za njezino korištenje opisana su u datoteci delay.h koju uključujemo.

PORTB=0x00;
DDRB=0x00;

Rezervirana imena koja označavaju registre portova kontrolera (njegovi pinovi su grupirani po bajtovima - svaki 8, svaki bit registra porta odgovara vlastitom pinu) i registre smjera razmjene portova (0-ulaz, 1-izlaz)

Na primjer, pisanje DDRB.5=1 znači da je PB5 pin kontrolera konfiguriran za izlaz, a kada piše PORTB.5=0 ili =1, na ovom pinu dobivamo 0 (0...0,8 V) ili 1 (4...5 Volta). Naravno, portu možete odmah dodijeliti cijelu vrijednost: PORTB=0xFF, tj. svi pinovi PB priključka su 1.

dok(1) (izraz);

je beskonačna petlja jer je 1=TRUE.

Semafor br.2.


Da biste dobili semafor u dva smjera, morate modificirati dijagram semafora br. 1:


i kod semafora br. 1:

/*****************************************************
Vrsta čipa: ATmega8
Vrsta programa: Primjena
Frekvencija AVR jezgre: 1.000000 MHz
Model memorije: Mali
Veličina vanjskog RAM-a: 0
Veličina snopa podataka: 256
*****************************************************/

#uključi
#uključi

void glavni (praznina)
{
// Inicijalizacija priključka B
PORTB=0x00;
DDRB=0x00;

// Inicijalizacija priključka C
PORTC=0x00;
DDRC=0x00;

// Inicijalizacija priključka D
PORTD=0x00;
DDRD=0b00111111;

ACSR=0x80;
SFIOR=0x00;

dok (1)
{
PORTD.2=1; //zeleno1 svijetli Z1
PORTD.3=1; //crveno2 svijetli K2
kašnjenje_ms(8000); //zeleno1 svijetli 8 sekundi

PORTD.2=0; //isključi zeleno1 ZM1
kašnjenje_ms(500); //pričekajte pola sekunde

kašnjenje_ms(500); //pričekajte pola sekunde

kašnjenje_ms(500); //pričekajte pola sekunde
PORTD.2=1; //upali zeleno1
kašnjenje_ms(500); //pričekajte pola sekunde

PORTD.1=1; //upali narančasto1 J1 K2+J2
PORTD.4=1; //upali narančastu2
PORTD.2=0; //isključi zeleno1


PORTD.0=1; //upali crveno1 K1
PORTD.5=1; //upali zeleno2 Z2
PORTD.1=0; //isključi narančasto1
PORTD.4=0; //isključi narančasto2
PORTD.3=0; //isključi crveno2
kašnjenje_ms(8000); //pričekajte 8 sekundi

PORTD.5=0; //isključi zeleno2 ZM2
kašnjenje_ms(500); //pričekajte pola sekunde

kašnjenje_ms(500); //pričekajte pola sekunde

kašnjenje_ms(500); //pričekajte pola sekunde
PORTD.5=1; //upali zeleno2
kašnjenje_ms(500); //pričekajte pola sekunde

PORTD.1=1; //upali narančasto1 na crveno1 K1+J1
PORTD.4=1; //upali narančasto2 J2
PORTD.5=0; //isključi zeleno2
kašnjenje_ms(2000); //pričekajte 2 sekunde
PORTD.0=0; //Isključi crveno1
PORTD.1=0; //i naranča1
PORTD.4=0; //i naranča2
};
}

komentari koda:

DDRD=0b00111111; //0b(b7)(b6)(b5)(b4)(b3)(b2)(b1)(b0)

Desno je bitni (binarni) prikaz broja u kojem je najznačajnija znamenka lijevo, a može se napisati i decimalno (DDRD=63;) ili heksadecimalno (DDRD=0x3F;).

void glavni (praznina)

Main je glavna procedura, s njom počinje izvršavanje programa, void ne znači doslovno ništa (nulti tip), umjesto void možete zamijeniti (signed ili unsigned) int, long; float, double i tako dalje (pa čak i pokazivač na drugu varijablu, o čemu ćemo kasnije govoriti). Štoviše, zamjena void s nekim tipom na prvoj poziciji znači da je ova konstrukcija funkcija, a ne procedura, i može vratiti vrijednost, tj. mora se iznutra dopuniti riječju povratak.

int zabava(void) (
int a=10;
povratak(a);
}

Sve promjene su napravljene prema radnom dijagramu:


Dijagram rada semafora u dva smjera s trepćućim zelenim signalom. Ovaj dijagram je također preuzet s interneta, i po mom mišljenju: trebalo bi biti više trepćućih zelenih signala.



Semafor br.3.


Primjeri br. 1 i br. 2 ukazali su na donekle "jednostavnu" upotrebu koda, što je prihvatljivo za male programe, ali se ne može koristiti zbog rasipanja resursa u velikim aplikacijama.
Kako bi pojednostavili i skratili kod u tehnološkim aplikacijama, programeri obično koriste automate. Automat je pojednostavljen i dovoljan model procesa. Na primjer, cijeli rad semafora može se podijeliti na određeni konačni broj stanja koja će se ponavljati s određenim periodom. Za predstavljanje automata trebat će vam softverski brojač stanja i dekoder stanja. Semafor br. 3, koji se sastoji od transportnog semafora u 4 smjera, 4 pješačka semafora, 1 željezničkog prijelaza, 1 trepćućeg pješačkog, bilo bi problematično izraditi bez automatike.


U nastavku je prikazan kod bez obrade pješačkih i željezničkih semafora. Lako je razumjeti da postupci poput
void SetRedT1(void) //Transportni semafor1 upali crveno D3
{
ptc|=0x01;
}
postavljanje ili brisanje pojedinačnih bitova.

U glavnoj petlji, vrijednost brojača i stalno raste dok ne dosegne 48.
i++;
U tom slučaju, brojač se vraća na nulu.
if (i==48) (i=0;); // 24c=0,5*48

U petlji se vrijednost brojača stalno uspoređuje s konstantama, a radi se s priključcima. Iako je ovaj kod napredniji od prethodna dva, također je pogodniji za preglednost nego za rad. Profesionalci najčešće ne koriste skupove pojedinačnih operacija usporedbe, već koriste operatore za promjenu slučaja ili čak zapisuju unaprijed izračunate podatke u nizove - koristite gotovu tablicu:

flash unsigned char sw[N]=(
//G1Y1R1G2Y2R2 XX
0b10000100, //1 X razdoblja Zeleno1 i Crveno2 svijetle
0b10000100, //2
...
0b00000100, // X razdoblja Zeleno1 treperi,

0b10000100, //
...
0b01001100, //K-1 Zeleno1 se gasi, Žuto1 i Žuto2 svijetle
0b00110000, //K Crveno1 svijetli, Zeleno1 svijetli, Žuto2 i Crveno2 se gase

...
0b01101000 //N
};

dok (1)
{
i++;


PORTC=(sw[i]>>x) | maska;
PORTD=(sw[i]>>x) | maska;
kašnjenje_ms(500);
};
}

Naravno, izrazi (sw[i]>>x) | maske opisuju se uvjetno, sve ovisi o poziciji informacije o signalima u sw konstanti.

/*****************************************************
Vrsta čipa: ATmega8
Vrsta programa: Primjena
Frekvencija AVR jezgre: 1.000000 MHz
Model memorije: Mali
Veličina vanjskog RAM-a: 0
Veličina snopa podataka: 256
*****************************************************/

#uključi
#uključi

unsigned char ptb=0;
nepredpisani char ptc=0;
unsigned char ptd=0;

void SetRedT1() //Transportni semafor1 upali crveno D3
{
ptc|=0x01;
}

void ResetRedT1() //Prometni semafor1 ugasi crveno D3
{
ptc&=~0x01;
}

void SetYelT1() //Prometni semafor1 upali žuto D2
{
ptc|=0x02;
}

void ResetYelT1() //Prometni semafor1 ugasi žuto D2
{
ptc&=~0x02;
}

void SetGrnT1() //Transportni semafor1 svijetli zeleno D1
{
ptc|=0x04;
}

void ResetGrnT1() //Prometni semafor1 ugasi zeleno D1
{
ptc&=~0x04;
}

void SetRedT2() //Prometni semafor2 upali crveno D6
{
ptc|=0x08;
}

void ResetRedT2() //Prometni semafor2 ugasi crveno D6
{
ptc&=~0x08;
}

void SetYelT2() //Prometni semafor2 upali žuto D5
{
ptc|=0x10;
}

void ResetYelT2() //Prometni semafor2 ugasi žuto D5
{
ptc&=~0x10;
}

void SetGrnT2() //Transportni semafor2 svijetli zeleno D4
{
ptc|=0x20;
}

void ResetGrnT2() //Prometni semafor2 ugasi zeleno D4
{
ptc&=~0x20;
}


void SetRedT3() //Transportni semafor3 upali crveno D9
{
ptd|=0x01;
}

void ResetRedT3() //Prometni semafor3 ugasi crveno D9
{
ptd&=~0x01;
}

void SetYelT3() //Prometni semafor3 upali žuto D8
{
ptd|=0x02;
}

void ResetYelT3() //Prometni semafor3 ugasi žuto D8
{
ptd&=~0x02;
}

void SetGrnT3() //Transportni semafor3 svijetli zeleno D7
{
ptd|=0x04;
}

void ResetGrnT3() //Prometni semafor3 ugasi zeleno D7
{
ptd&=~0x04;
}


void SetRedT4() //Transportni semafor2 upali crveno D12
{
ptd|=0x08;
}

void ResetRedT4() //Prometni semafor2 ugasi crveno D12
{
ptd&=~0x08;
}

void SetYelT4() //Prometni semafor2 upali žuto D11
{
ptd|=0x10;
}

void ResetYelT4() //Prometni semafor2 ugasi žuto D11
{
ptd&=~0x10;
}

void SetGrnT4() //Prometni semafor2 svijetli zeleno D10
{
ptd|=0x20;
}

void ResetGrnT4() //Prometni semafor2 ugasi zeleno D10
{
ptd&=~0x20;
}

// Ovdje deklarirajte svoje globalne varijable

void glavni (praznina)
{
unsigned char i=0;

PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ACSR=0x80;

dok (1)
{
if (i==0) (ResetYelT1();ResetRedT1();SetGrnT1();
ResetYelT2();PostaviRedT2();
ResetYelT3();ResetRedT3();PostaviGrnT3();
ResetYelT4();PostaviRedT4();

); //0s
if (i==16) (ResetGrnT1();
ResetGrnT3();

); //8s
if (i==17) (SetGrnT1();
PostaviGrnT3();

};
if (i==18) (ResetGrnT1();
ResetGrnT3();

};
if (i==19) (SetGrnT1();
PostaviGrnT3();

};
if (i==20) (ResetGrnT1();SetYelT1();
PostaviYelT2();
ResetGrnT3();SetYelT3();
PostaviYelT4();

); //10s
if (i==24) (ResetYelT1();SetRedT1();
ResetYelT2();ResetRedT2();PostaviGrnT2();
ResetYelT3();PostaviRedT3();
ResetYelT4();ResetRedT4();PostaviGrnT4();

); //12s
if (i==40) (ResetGrnT2();
ResetGrnT4();

); //20-ih
if (i==41) (SetGrnT2();
PostaviGrnT4();

};
if (i==42) (ResetGrnT2();
ResetGrnT4();

); //21s
if (i==43) (SetGrnT2();
PostaviGrnT4();

};
if (i==44) (SetYelT1();
ResetGrnT2();SetYelT2();
PostaviYelT3();
ResetGrnT4();SetYelT4();

); //22s
i++;
if (i==48) (i=0;); // 24c=0,5*48 - ciklus

//PORTB=ptb;
PORTC=ptc;
PORTD=ptd;
kašnjenje_ms(500);
};
}

Indikator stupca.

Ako su prethodni primjeri koristili digitalne izvore mikrokontrolera, onda se u ovom primjeru koriste analogni - ADC. Analogno-digitalni pretvarač dizajniran je za diskretnu pretvorbu analognog signala u digitalni kod s određenom frekvencijom uzorkovanja. Za početnike mogu samo reći da je maksimalna brzina digitalizacije ograničena.

Trakasti indikator prikazuje ulazni napon u obliku stupca svjetlećih segmenata (ili jednostavno pojedinačnih emitera), što je vrlo korisno za sve vrste indikatora, a primjeri su stupčasti indikatori razine snimanja (RLI).

Ulazni napon ne smije biti veći od napona napajanja, a kao referentni napon koristi se napajanje mikrokontrolera od 5 volti, a kao filter se koristi vanjski kondenzator na pinu AREF.

Programski kod je dat u nastavku:

/*****************************************************
Vrsta čipa: ATmega8
Vrsta programa: Primjena
Frekvencija AVR jezgre: 4.000000 MHz
Model memorije: Mali
Veličina vanjskog RAM-a: 0
Veličina snopa podataka: 256
*****************************************************/

#uključi
#uključi

#define ADC_VREF_TYPE 0x40 //5V Vcc + C 4,7uF AREF

//PD0 LED1
//PD1 LED2
//PD2 LED3
//PD3 LED4
//PD4 LED5
//PD5 LED6
//PD6 LED7
//PD7 LED8
//PB0 LED9
//PB1 LED10
//PB2 LED11
//PB3 LED12
//PB4 LED13
//PB5 LED14

//PC4 LED15
//PC5 LED16

konst
unsigned char PD=
{
0b00000000, //0
0b00000001, //1
0b00000011, //2
0b00000111, //3
0b00001111, //4
0b00011111, //5
0b00111111, //6
0b01111111, //7
0b11111111, //8
//_____________
0b11111111, //9
0b11111111, //10
0b11111111, //11
0b11111111, //12
0b11111111, //13
0b11111111, //14
0b11111111, //15
0b11111111 //16
};
unsigned char PB=
{
0b00000000, //0
0b00000000, //1
0b00000000, //2
0b00000000, //3
0b00000000, //4
0b00000000, //5
0b00000000, //6
0b00000000, //7
0b00000000, //8
//_____________
0b00000001, //9
0b00000011, //10
0b00000111, //11
0b00001111, //12
0b00011111, //13
0b00111111, //14
//_____________
0b00111111, //15
0b00111111 //16
};

// Čitanje rezultata AD konverzije
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Kašnjenje potrebno za stabilizaciju ulaznog napona ADC-a
kašnjenje_us(10);
// Pokretanje AD konverzije
ADCSRA|=0x40;
// Pričekajte da se AD konverzija završi
dok ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
vratiti ADCW;
}

void ADC_init()
{
// ADC inicijalizacija
//ADC taktna frekvencija: 125.000 kHz
// ADC referentni napon: Vcc, kap. na AREF-u
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
}

void Decode (int signal)
{
PORTD=PD;
PORTB=PB;

if (signal==15) (PORTC |= 0b00010000;PORTC &= 0b11011111;)
inače ako (signal==16) (PORTC |= 0b00110000;)
inače (PORTC &= 0b11001111;)
}

void SetupIO()
{
// Inicijalizacija ulazno/izlaznih portova
PORTB=0b00000000;
DDRB= 0b00111111;

PORTC=0b00001100;
DDRC= 0b00110000; //PC0,PC1 = ADC0,ADC1, PC2,PC3 pinovi za postavljanje s PUP-om

PORTD=0x00;
DDRD=0xFF;
}

void glavni (praznina)
{
// Inicijalizacija analognog komparatora
// Analogni komparator: Isključeno
// Hvatanje ulaza analognog komparatora pomoću mjerača vremena/brojača 1: isključeno
ACSR=0x80;
SFIOR=0x00;

SetupIO();
ADC_init();

dok (1)
{
Dekodiraj(read_adc(0)*0,049*0,32);
kašnjenje_ms(100);
};
}

Gotovo sve tehnike korištene u ovom kodu bile su spomenute gore. Jedina stvar koju bih želio primijetiti je proširena konstrukcija s if naredbom:
if () () //ako je (uvjet ispunjen) then ( )
else if () () //inače ako je (uvjet ispunjen) then ( )
inače () // inače ( )

I izražavanje read_adc(0)*0,049*0,32
činjenica je da ADC proizvodi svoje vrijednosti na skali od 0-1023 (2^10), što odgovara skali od 0-5 volti (budući da je referentni napon 5 volti), i prvo moramo dobiti volta, a zatim ih pretvorite u segmente količina. 1024*0,049*0,32=16 tj. Cijela ADC ljestvica sastoji se od 16 segmenata.
Broj 0,049 uzima se kao višekratnik 5 volti / 1024 odbrojavanja = 0,0048828 (~10 ADC odbrojavanja), a zatim se eksperimentalno množi s 0,32 kako bi se dobilo paljenje zadnjeg segmenta na željenom ulaznom naponu.



Serijski priključak.

A sada predlažem uroniti u svijet sučelja. Najjednostavniji i najrašireniji serijski protokol, RS232, donedavno, iako se smatrao zastarjelim, još uvijek je uključen u proizvodnju suvremenih mikrokontrolera - i to ne samo jedan, u pravilu ih je sada najmanje 4. Također, mnogi uređaji još uvijek koriste ovo sučelje (na primjer, neki NoritakeItron VFD zasloni, uređaji za sporu proizvodnju itd.). Ovaj vam primjer omogućuje procjenu koliko je lako konfigurirati i koristiti RS232 (USART) u mikrokontrolerima.


Ispod je kod koji prenosi znak 0.

/*****************************************************
Vrsta čipa: ATmega8
Vrsta programa: Primjena
Frekvencija AVR jezgre: 1.000000 MHz
Model memorije: Mali
Veličina vanjskog RAM-a: 0
Veličina snopa podataka: 256
*****************************************************/

#uključi

// Standardne ulazno/izlazne funkcije
//#uključi

#definiraj BAUDRATE 57600
#define BaudValue ((11059200UL/(BAUDRATE*16UL))-1)

void USART_Transmit(unsigned char podaci)
{
//(dok (!(UCSRA & (1<
UDR = podaci;
dok(!(UCSRA & (1<
//UDR = podaci; //Pokreni prijenos podataka
}

void USART_init(void)
{
UBRRH = BaudValue >> 8;
UBRRL = BaudValue & 0xFF;
//
UCSRB=(1<
DDRD=0x02;
UCSRC = (1<
//UCSRA = (1<
}

void glavni (praznina)
{
ACSR=0x80;
SFIOR=0x00;
USART_init();
dok (1){ USART_prijenos(0x30);};
}


Imajte na umu da Proteus ne podržava emulaciju UCSRC (podešavanje parametara komunikacije porta), pa postavite frekvenciju oscilatora na 3500000, au terminalu postavite sljedeće parametre:




Sat, sastavljen na mikrokontroleru ATtiny2313 i LED matrici, pokazuje vrijeme u 6 različitih načina.

LED matrica 8 * 8 kontrolira se metodom multipleksiranja. Otpornici za ograničavanje struje izostavljeni su iz strujnog kruga kako bi se izbjeglo kvarenje dizajna, a budući da pojedinačne LED diode nisu stalno pokretane, neće se oštetiti.

Postoji samo jedan gumb za kontrolu, dugi pritisak na gumb (pritisnite i držite) za rotiranje izbornika i normalan pritisak na gumb za odabir izbornika.

Ovo je projekt iz hobija, tako da točnost sata ovisi samo o kalibraciji unutarnjeg oscilatora kontrolera. Nisam koristio kvarc u ovom projektu jer bi zauzeo dva ATtiny2313 pina koja su mi bila potrebna. Kvarc se može koristiti za poboljšanje preciznosti u alternativnom (PCB) dizajnu.

Brojač frekvencija do 500MHz na Attiny48 i MB501

Ovoga puta predstavit ću jednostavan frekvencijomjer malih dimenzija s mjernim područjem od 1 do 500 MHz i rezolucijom od 100 Hz.

Danas, bez obzira na proizvođača, gotovo svi mikrokontroleri imaju tzv. brojačke ulaze, koji su posebno dizajnirani za brojanje vanjskih impulsa. Koristeći ovaj ulaz, relativno je lako dizajnirati brojač frekvencija.

Međutim, ovaj ulaz brojača također ima dva svojstva koja sprječavaju izravnu upotrebu brojača frekvencije za veće potrebe. Jedan od njih je da u praksi u većini slučajeva mjerimo signal amplitude nekoliko stotina mV, koji ne može pomaknuti brojač mikrokontrolera. Ovisno o vrsti, za ispravno funkcioniranje ulaza potreban je signal od najmanje 1-2 V. Drugo je da je maksimalna mjerljiva frekvencija na ulazu mikrokontrolera samo nekoliko MHz, što ovisi o arhitekturi brojača kao io radni takt procesora.

Termostat za kuhalo za vodu na ATmega8 (Termopot)

Ovaj uređaj omogućuje kontrolu temperature vode u kuhalu za vodu, ima funkciju održavanja temperature vode na određenoj razini, kao i uključivanje prisilnog kuhanja vode.

Uređaj se temelji na mikrokontroleru ATmega8, koji taktira kvarcni rezonator frekvencije 8 MHz. Senzor temperature – analogni LM35. Sedmosegmentni indikator sa zajedničkom anodom.

Novogodišnja zvijezda na Attiny44 i WS2812

Ova ukrasna zvijezda sastoji se od 50 posebnih RGB LED dioda, koje se kontroliraju ATtiny44A. Sve LED diode kontinuirano mijenjaju boju i svjetlinu na slučajan način. Također postoji nekoliko vrsta efekata koji se također aktiviraju nasumično. Tri potenciometra mogu promijeniti intenzitet primarnih boja. Položaj potenciometra označavaju LED diode kada se pritisne tipka, a promjena boje i brzina efekta mogu se mijenjati u tri stupnja. Ovaj je projekt u potpunosti izgrađen na SMD komponentama zbog posebnog oblika PCB-a. Unatoč jednostavnom dizajnu, struktura ploče je prilično složena i malo je vjerojatno da će biti prikladna za početnike.

Frekvencijski pretvarač za asinkroni motor na AVR

Ovaj članak opisuje univerzalni trofazni pretvarač frekvencije temeljen na mikrokontroleru (MK) ATmega 88/168/328P. ATmega preuzima punu kontrolu nad kontrolama, LCD zaslonom i trofaznom generacijom. Projekt je trebao raditi na gotovim pločama kao što su Arduino 2009 ili Uno, ali to se nije ostvarilo. Za razliku od drugih rješenja, sinusoida se ovdje ne izračunava, već se izvodi iz tablice. Ovo štedi resurse, memorijski prostor i omogućuje MCU-u da obrađuje i nadzire sve kontrole. Izračuni s pomičnim zarezom ne izvode se u programu.

Frekvencija i amplituda izlaznih signala podešavaju se pomoću 3 tipke i mogu se spremiti u EEPROM memoriju MK. Vanjska kontrola preko 2 analogna ulaza je na sličan način. Smjer vrtnje motora određuje se premosnikom ili sklopkom.

Podesiva V/f karakteristika omogućuje prilagodbu mnogim motorima i drugim potrošačima. Također je korišten integrirani PID regulator za analogne ulaze, parametri PID regulatora mogu se pohraniti u EEPROM. Vrijeme pauze između prekidača tipki (Dead-Time) može se promijeniti i pohraniti.

Frekvencomjer III iz DANYK-a

Ovaj mjerač frekvencije s AVR mikrokontrolerom omogućuje vam mjerenje frekvencije od 0,45 Hz do 10 MHz i perioda od 0,1 do 2,2 μs u 7 automatski odabranih raspona. Podaci se prikazuju na LED displeju sa sedam znamenki. Projekt se temelji na mikrokontroleru Atmel AVR ATmega88/88A/88P/88PA; program za preuzimanje možete pronaći ispod. Postavke konfiguracijskih bitova prikazane su u Slika 2.

Princip mjerenja je drugačiji od prethodna dva mjerača frekvencije. Jednostavna metoda brojanja impulsa nakon 1 sekunde, korištena u dva prethodna mjerača frekvencije (frekvencometar I, frekvencijometar II), ne dopušta mjerenje frakcija Hertza. Zato sam odabrao drugačiji princip mjerenja za svoj novi Frekventni mjerač III. Ova metoda je puno složenija, ali omogućuje mjerenje frekvencije s rezolucijom do 0,000001 Hz.

Frekvencijski brojač II iz DANYK-a

Ovo je vrlo jednostavan mjerač frekvencije na AVR mikrokontroleru. Omogućuje vam mjerenje frekvencija do 10 MHz u 2 automatski odabrana raspona. Temelji se na prethodnom dizajnu mjerača frekvencije I, ali ima 6 znamenki indikatora umjesto 4. Niži raspon mjerenja ima rezoluciju od 1 Hz i radi do 1 MHz. Viši raspon ima rezoluciju od 10 Hz i radi do 10 MHz. Za prikaz izmjerene frekvencije koristi se 6-znamenkasti LED zaslon. Uređaj se temelji na mikrokontroleru Atmel AVR ATtiny2313A ili ATTiny2313

Mikrokontroler se taktira iz kvarcnog rezonatora s frekvencijom od 20 MHz (najveća dopuštena frekvencija takta). Točnost mjerenja određena je točnošću ovog kristala, kao i kondenzatora C1 i C2. Minimalna duljina poluciklusa mjerenog signala mora biti veća od frekvencijskog perioda kvarcnog oscilatora (ograničenje AVR arhitekture). Tako se pri 50% radnog ciklusa mogu mjeriti frekvencije do 10 MHz.

Frekvencmetar I od DANYK

Ovo je vjerojatno najjednostavniji brojač frekvencija na AVR mikrokontroleru. Omogućuje vam mjerenje frekvencija do 10 MHz u 4 automatski odabrana raspona. Najniži raspon ima rezoluciju od 1 Hz. Za prikaz izmjerene frekvencije koristi se 4-znamenkasti LED zaslon. Uređaj se temelji na mikrokontroleru Atmel AVR ATtiny2313A ili ATtiny2313. Postavke konfiguracijskih bitova možete pronaći u nastavku.

Mikrokontroler se taktira iz kvarcnog rezonatora s frekvencijom od 20 MHz (najveća dopuštena frekvencija takta). Točnost mjerenja određena je točnošću ovog kristala. Minimalna duljina poluciklusa mjerenog signala mora biti veća od frekvencijskog perioda kristalnog oscilatora (ograničenje MCU arhitekture). Tako se pri 50% radnog ciklusa mogu mjeriti frekvencije do 10 MHz.



Učitavam...Učitavam...