Scheme de do-it-yourself pe attiny2313. Conectam butonul la microcontrolerul ATtiny2313, un program simplu. Compilarea și flashingul programului în MK

Cum să asamblați un circuit simplu, cum să conectați un programator la un microcontroler ATtiny2313, cum să scrieți cel mai simplu programîn limbajul C și cum să flashați microcontrolerul ATtiny2313 cu programul nostru, veți găsi toate acestea în acest articol.

În primul rând, avem nevoie de un programator, există multe varietăți de programatori, ce programator să alegem?
Există programatori obișnuiți în care trebuie să introduceți un microcontroler, să-l flash, să scoateți microcontrolerul și apoi să îl introduceți în placa noastră pentru a vedea rezultatul și această secvență va trebui făcută de sute de ori la început, această opțiune nu este convenabil dupa parerea mea.
Microcontrolerul nostru ATtiny2313 acceptă funcția ISP (programare în sistem) prin portul SPI, acest caz de utilizare pentru programarea în circuit ISP dupa parerea mea cel mai comod si mai rapid, pentru ca. microcontrolerul de pe placa noastră nu trebuie să fie îndepărtat după fiecare firmware, puteți programa microcontrolerul de sute de ori și imediat fără a deconecta programatorul de la computer și de la placă, vedeți rezultatul după flash-ul microcontrolerului, procesul de depanare software dispozitivul radioamator este simplificat considerabil și timpul petrecut cu aceasta este redus.
Puteți face singur un programator ISP în circuit, sunt multe pe Internet circuite simple cum se face prin LPT, Port COM de exemplu, programator PonyProg Pe Internet puteți găsi diagrame despre cum să faceți acest lucru.

Acest articol va lua în considerare lucrul cu un programator ISP în circuit pentru microcontrolere AVR (PX-400) funcționează prin portul COM.
Dacă nu aveți un port COM pe computer, veți avea nevoie și de un adaptor cu port USB la portul COM, există și multe varietăți de astfel de adaptoare, recomand adaptorul cu care am lucrat: Placă de conversie USB la port serial UCON-232S
Programator foto PX-400, adaptor UCON-232S USB , Fișă tehnică ATTiny2313

Să aruncăm o privire mai atentă la toate detaliile acestei scheme:
(Pentru orice eventualitate, am cumpărat toate detaliile, programator, adaptor (de la USB la portul COM) de pe chipdip.ru)

1 - PBD-20 mufă de placă 2,54 mm 2x10 drept- Am făcut acest lucru pentru comoditate, pentru a fi mai ușor să verificați semnalele de la pinii microcontrolerului, acest lucru nu a putut fi făcut.
2 - Panou SCS-20 DIP 20 pini- panoul este lipit pe placă, astfel încât să fie posibil să înlocuiți microcontrolerul din placă dacă este necesar,
ATtiny2313-20PU, DIP20, MCU, 5V, 1K-Bliț, 12MHz- Microcontrolerul este introdus în panoul DIP.
3 - Rezonator cuarț 4.000 MHz (trunchiat) HC-49S- Rezonator de cuarț 4 MHz
4 - Condensator ceramic K10-17B imp. 22pF NPO,5%,0805- Două condensatoare ceramice de 22pF
5 - 78M05 (+5V, 0,5A) TO220- Stabilizator de tensiune 5V, furnizează putere stabilizată microcontrolerului nu mai mult de + 5V, în acest caz am primit 4,4V, este suficient.
6 - NP-116 mufa de alimentare 1,3x3,4x9,5mm MP-331 (7-0026c)- Ștecherul de alimentare lipit pe cel vechi încărcător din telefon mobil DC 5,7 V/800 mA
7 - Priză DS-213 de pe placă- Unde este priza de alimentare pentru ștecherul NP-116, pentru o conexiune ușoară la alimentare
8 - IDC-10MS (BH-10), mufă dreaptă- Mufă pentru conectarea unui programator ISP în circuit
9 - Rezistor constant 0.25W 150 Ohm- Trei rezistențe de 150 Ohm pentru pini MISO, SCK, MOSI
10 - Rezistor constant 0.25W 47 Ohm- Un rezistor de 47 ohmi pe pin RESET
11 - Buton tact h=5mm, TC-0103 (TS-A2PS-130)- Buton RESET, dupa apasarea butonului, programul din microcontroler incepe de la inceput, butonul nu a putut fi facut.
12 - LED verde d = 3mm, 2.5V, 2mA - Actioneaza ca un indicator, acest lucru nu a putut fi realizat.
13 - Rezistor constant 0.25W 110 Ohm- Rezistor pentru LED, astfel încât LED-ul să aibă 2V, acest lucru nu a putut fi realizat
14 - Două fire conectate la LED, pentru a verifica semnalele de la pinii microcontrolerului, acest lucru nu a putut fi făcut
15 - Placa imprimata Dip-Rm 100x100mm

Pașii 3 și 4 funcționează ca o unitate, ca un generator de ceas extern, acești pași pot fi omiși dacă nu puneți cerințe mari asupra preciziei și stabilității oscilatorului RC intern, oscilatorul RC intern are o eroare de aproximativ 10% și precizia poate fi afectată de o modificare a temperaturii.

Deci ați descărcat și instalat Atmel Studio:
Lansăm Atmel Studioși scrieți un program simplu C pentru a clipi LED-ul:
Faceți clic pe: Proiect nou... \ AVR GCC \ C \ C Proiect executabil
Specificați folderul în care să salvați proiectul și numele proiectului, de exemplu Test1 și faceți clic pe OK.
Din listă, selectați microcontrolerul nostru ATtiny2313 și faceți clic pe OK.
Ștergem tot ce a apărut în fereastră și lipim codul programului nostru, care este mai jos:

#define F_CPU 4000000L // Specificați frecvența quartzului nostru extern de 4 MHz
#include
#include
int main(void)
{
//Setați toți pinii PORTB ca ieșiri
DDRB=0xFF;//Registrul de direcție de transfer de informații (1-ieșire, 0-intrare)
în timp ce (1)
{
//Registrul de date PORTB (utilizat pentru afișarea informațiilor)
PORTB=0b00000001;//Alimentați 1 la portul 12 al MK PB0 - porniți LED-ul
PORTB=0b00000000;//Trimiteți 0 la portul 12 al MK PB0 - opriți LED-ul
_delay_ms(1000);//Delay 1 sec.
}
}

Mergem la meniu Build\Manager de configurare\Configurație soluție activă\
Alege Eliberare, presa închide
Am făcut asta astfel încât să avem un folder în proiect Eliberare, despre care voi discuta mai jos.

Clic F7, gata, aplicația noastră a fost compilată!
Pentru a flash microcontrolerul ATtiny2313, avem nevoie de un singur fișier cu extensia HEX
Se află în folderul nostru de proiect:...
Vă rugăm să rețineți fișierul Test1.hex nu o ia din folder Eliberare !
Nu confunda, pentru că pliant depanare exista si un dosar Test1.hex, dar acest fișier conține și informații de depanareși din această cauză nu veți putea să flashați acest fișier. se întâmplă de obicei marime mareși nu va încadra în memoria MK.

A fost găsit fișierul .hex, acum avem nevoie de un program pentru flash-ul microcontrolerului ATtiny2313, există multe astfel de programe, dar vom folosi programul: Avr-Osp II
Descarca:

Conectăm programatorul la circuitul nostru, trebuie să furnizăm curent circuitului!

Începem programul Avr-Osp II, specificați calea către fișier în secțiunea FLASH... \Test1\Test1\Release\Test1.hex, setați casetele de selectare din program și apăsați butonul program asta e, microcontroler ATtiny2313 a fulgerat!

Care este avantajul programatorilor ISP în circuit, acum, fără a deconecta firele de la circuitul nostru, puteți face modificări în program și, așa cum este descris mai sus, să flashați microcontrolerul și să vedeți imediat rezultatul.

Vă rugăm să lăsați întrebări și comentarii pe forumul nostru

Arhitectura AVR RISC:

RISC (Computer cu set de instrucțiuni redus). Această arhitectură are set mare instrucțiuni, dintre care majoritatea sunt executate într-un singur ciclu de mașină. Rezultă că, în comparație cu microcontrolerele anterioare bazate pe CISC (de exemplu, MCS51), microcontrolerele bazate pe RISC sunt de 12 ori mai rapide.

Sau dacă luăm ca bază un anumit nivel de performanță, atunci să performam condiție dată Microcontrolerele bazate pe RISC (Attiny2313) au nevoie de o frecvență de ceas a oscilatorului de 12 ori mai mică, ceea ce duce la o reducere semnificativă a consumului de energie. Ca rezultat, devine posibilă proiectarea diverse dispozitive pe un Attiny2313 care utilizează bateria.

Memoria operațională (RAM) și memorie nevolatilă pentru date și programe:

  • 2 kB de memorie de program flash autoprogramabilă care poate oferi 10.000 de reîncercări de scriere/ștergere.
  • 128 de octeți de memorie de date EEPROM care poate oferi 100.000 de reîncercări de scriere/ștergere.
  • 128 de octeți de memorie SRAM (Read Only Memory).
  • Este posibil să utilizați funcția pentru a proteja datele codului programului și EEPROM.

Proprietăți periferice:

  1. microcontroler Attiny2313 echipat cu un cronometru cu opt cifre cu un prescaler setat separat cu un factor maxim de 256.
  2. Există, de asemenea, un cronometru/contor pe 16 biți cu circuite separat de prescaler, captură și comparare. Cronometrul este cronometrat - contorul poate de la ambele sursă externă semnal, și din interior.
  3. Două canale. Există un mod de funcționare de modulare PWM rapidă și PWM cu corecție de fază.
  4. Comparator analog intern.
  5. Timer Watchdog (programabil) cu oscilator intern.
  6. Interfață serial universală (USI).

Specificații speciale Attiny2313:


  • Inactiv- Modul inactiv. În acest caz, doar procesorul central își oprește funcționarea. Idle nu afectează funcționarea SPI, comparatorul analogic, convertorul analog-digital, temporizatorul/contorul, temporizatorul watchdog și sistemul de întrerupere. De fapt, oprește doar sincronizarea nucleului CPUși memorie flash. Revenirea la modul normal de funcționare a microcontrolerului Attiny2313 din modul Idle are loc printr-o întrerupere externă sau internă.
  • putere scazuta- Cel mai economic mod, în care microcontrolerul Attiny2313 este de fapt oprit de la consumul de energie. În această stare, generatorul de ceas se oprește, toate perifericele sunt oprite. Numai modulul de gestionare a întreruperilor de la o sursă externă rămâne activ. Când este detectată o întrerupere, microcontrolerul Attiny2313 iese din oprire și revine la funcționarea normală.
  • Așteptare- microcontrolerul trece la acest mod standby de consum de energie prin comanda SLEE. Acest lucru este similar cu închiderea, singura diferență fiind că generatorul de ceas continuă să funcționeze.

Porturi I/O ale microcontrolerului Attiny2313:

Microcontrolerul este dotat cu 18 pini I/O care pot fi programați în funcție de nevoile care apar în timpul proiectării dispozitiv specific. Bufferele de date de ieșire ale porturilor pot suporta o încărcare relativ mare.

  • Port A (PA2 - PA0) - 3 biți. Port I/O bidirecțional cu rezistențe de tracțiune programabile.
  • Port B (PB7 - PB0) - 8 biți. Port I/O bidirecțional cu rezistențe de tracțiune programabile.
  • Port D (PD6 - PD0) - 7 biți. Port I/O bidirecțional cu rezistențe de tracțiune programabile.

Gama tensiunii de alimentare:

Microcontrolerul funcționează cu succes la o tensiune de alimentare de 1,8 până la 5,5 volți. Consumul de curent depinde de modul de funcționare al controlerului:

Mod activ:

  • 20 µA la o frecvență de ceas de 32 kHz și o tensiune de alimentare de 1,8 volți.
  • 300 µA la ceas de 1 MHz și tensiune de alimentare de 1,8 volți.

Modul de economisire a energiei:

  • 0,5 μA la o tensiune de alimentare de 1,8 volți.

(3,6 Mb, descărcat: 5 934)

Dispozitivul din acest articol funcționează cu carduri SD. Subiectul este vechi și destul de dezgustător, dar utilizarea cardurilor SD merită să scriem din nou despre el.
În general, cardurile SD (SDC, SD Card) au multe avantaje și sunt foarte ușor și convenabil de utilizat în proiecte mici încorporate. O serie de factori contribuie la aceasta:
- o interfață foarte simplă pentru interacțiunea cu cardul (implementată prin SPI);
- viteza mare (microcontrolerul este capabil sa transfere date de pe cardul SD la o viteza apropiata de 10 Mbps);
- consum redus de energie (literal câțiva miliamperi - nu mai mult);
- mărime mică;
- Disponibilitate si cost redus.
Cardurile SD nu au practic niciun dezavantaj (cu excepția, poate, a procedurilor lor de inițializare :)).

1. Introducere.

Am numit dispozitivul descris în acest articol SD Card Talking Device. Cam pretențios;), dar după nume este clar că acesta este un dispozitiv vorbitor. Este destinat să vă exprimați proiectele. Pe scurt, funcționează după cum urmează: fișierele de sunet numerotate sunt înregistrate pe cardul SD, pe care dispozitivul îl redă la comanda dumneavoastră. Domeniul de aplicare este destul de larg - sisteme de avertizare, jucării, roboți, casă inteligentă etc. Dimensiunile dispozitivului sunt destul de modeste (s-ar putea să fie mai mic, dar am ales în mod intenționat microcontrolerul ATtiny2313, care este mai ieftin și mai ușor de obținut). Am încercat să mă concentrez pe simplitate și funcționalitate maximă.
Privind în viitor, să vedem ce ar trebui să se întâmple până la urmă:

Ar funcționa un astfel de dispozitiv? Atunci colectăm!

2 Card de memorie.

Dispozitivul folosește un card de memorie SD. Am scris deja despre motivele alegerii, voi adăuga doar că cardurile SD devin aproape standardul pentru cardurile de memorie pt. dispozitive mobile. Chiar și producătorii care au promovat/promovează fanatic tipul lor de carduri de memorie încep încet să folosească carduri SD. Motivul pentru o astfel de popularitate a fost probabil prețul scăzut al acestor carduri. Pentru dispozitivele de amatori, cardul SD este, de fapt, singurul card utilizabil și motivul este interfața simplă pentru a lucra cu el.

Cardul SD a parcurs un drum lung de evoluție și are mai multe opțiuni pentru implementarea sa (MMC - ca variantă a cardului SD, SD ver1, SD ver2, SDHC, SDXC). Procedura de comunicare cu cardul este simplă și universală pentru toate tipurile de carduri, dar lansarea (inițializarea cardului) este un proces destul de ambiguu și confuz, cu „jonglare” rituală a cardului, trimiterea de comenzi „fachinte” goale și alte de neînțeles. lucruri (pe scurt, se cere dansul cu tamburine:)). Specificația pentru protocolul SDC în sine descrie procesul de inițializare destul de extins, este de înțeles, există o mulțime de producători de carduri, fiecare are propriul hardware, cu propriile caracteristici... Despre ce vorbesc? - Am încercat să fac procedura de inițializare cât mai universală, dar fiți pregătiți pentru faptul că unele carduri nu vor funcționa. Prin urmare, dacă ceva nu merge bine cu dispozitivul dvs., încercați un alt card de memorie - acesta poate fi motivul.

ÎN acest aparat Cardurile SD de până la 2 GB inclusiv sunt acceptate. Orice lucru de mai sus (SDHC și SDXC) nu este acceptat.
Pentru dispozitiv, nu există nicio diferență în ceea ce privește formatul cardului (SD, MiniSD sau MicroSD), dar trebuie să îl conectați corect, în funcție de pinout-ul cardului.

3 Sistem de fișiere.

Dispozitivul funcționează cu carduri care au sistemul de fișiere FAT16. Acest sistem este cel mai potrivit pentru dispozitive precum al nostru, deoarece este simplu și ușor de implementat (FAT12 și FAT32, în principiu, nu sunt, de asemenea, greu de implementat, dar acest lucru este impracticabil, din cauza lipsei oricăror avantaje în comparație cu FAT16) .

Nu există cerințe speciale de formatare pentru card - acesta poate fi formatat pe orice dispozitiv disponibil. Standard Formatarea Windows destul de potrivite pentru aceste scopuri.

Pentru funcționarea corectă a dispozitivului, fișierele de sunet aflate pe cardul SD trebuie să îndeplinească anumite cerințe:
a) Formatul fișierului trebuie să fie - WAV necomprimat.
Parametrii fișierului sunt după cum urmează:
- Bitrate - frecvența de eșantionare (Frecvență) - 32000 Hz;
- Număr de canale (Canale) - 1 (mono);
- Dimensiune (dimensiunea eșantionului) - 8 biți.
O astfel de abreviere este, de asemenea, posibilă - WAV PCM 8U

b) Dosarul trebuie denumit într-un mod special. Pentru ca dispozitivul să știe care fișier este primul, al doilea, al treilea etc. primul caracter al numelui fișierului trebuie să fie o literă majusculă a alfabetului latin (restul nume, precum și extensia fișierului, sunt ignorate).
De exemplu, următoarele nume de fișiere ar fi corecte:
A_Lay_dogs.wav - prima piesă
B-Aceasta este a doua piesă.wav - a doua piesă
Cu Avertisment! Eroare!.wav - a treia piesă

c) Pentru a utiliza funcțiile suplimentare ale dispozitivului, fișierele pot fi localizate în două foldere numite „1” și „2”. Dispozitivul are un comutator pentru a selecta folderul activ, adică aceeași comandă pentru a porni redarea poate porni piesele din folderul „1” sau „2”, în funcție de nivelul de la intrarea de comutare (un fel de selecție a schemei de sunet este un lucru foarte util!). Dacă unul dintre foldere (sau ambele) nu există, fișierele sunt redate din directorul rădăcină.

Puteți stoca orice alte fișiere împreună cu pistele audio, cu condiția ca acestea să nu creeze conflicte cu numele lor (este mai bine să le puneți într-un director separat, atunci nu va trebui să fiți atenți la modul în care sunt numite acolo).

d) Din cauza cantității mici de SRAM din ATtiny2313, este imposibil să se creeze un buffer pentru pre-citirea datelor, astfel încât datele din fișier sunt scoase direct pentru redare. În consecință, nu există posibilitatea (nu este suficient timp) de a căuta fragmente de fișiere în tabelul FAT. Cu alte cuvinte, fișierele scrise pe card nu trebuie să fie fragmentate.

De fapt, aceasta nu este o problemă mare, deoarece există sistem de operareîncearcă întotdeauna să scrie fișierul ca o bucată întreagă și atâta timp cât aveți spațiu pe hartă, orice acțiune cu fișiere (ștergere, copiere, redenumire) nu va afecta integritatea acestora. Dacă aveți o hartă foarte mică sau ați umplut o hartă mare la capacitate maximă, pentru a fi sigur de integritatea fișierelor, pur și simplu copiați-le în HDD computer, formatați cardul și returnați fișierele înapoi.

4 Schema. Placă de circuit imprimat.

Schema dispozitivului este cât se poate de simplă. De fapt, în afară de microcontroler în sine și cardul SD, nu există nimic în el. Pentru mine, am făcut un sigiliu pentru componentele SMD, deoarece se plănuiește utilizarea acestui dispozitiv într-un loc limitat în dimensiune. Dacă dimensiunile nu sunt critice pentru dvs., puteți asambla circuitul pe o placă de breadboard în versiunea DIP. În cazul unei plăci, asamblarea dispozitivului vă va dura cel mult 15 minute. Tensiunea de alimentare permisă pentru un card SD este de la 2,7 la 3,6 volți. În acest interval, microcontrolerul funcționează și el normal, deci nu este nevoie să folosiți componente potrivite. Am verificat funcționarea întregului dispozitiv și cu o sursă de alimentare de 5 volți - totul a funcționat bine, dar nu recomand să faci asta pe bază permanentă, deoarece diferitele carduri pot reacționa diferit la supratensiune. Ca suport de card pentru microSD, am folosit un adaptor, lipit direct la contactele acestuia. Dacă aveți nevoie de dimensiuni mai mici, este mai bine să utilizați un suport de card microSD real.

Pentru flash-ul microcontrolerului se folosește același conector ca și pentru cardul SD, așa că trebuie să vă gândiți cum să conectați programatorul la acesta (am făcut un adaptor intenționat).

După ce placa este lipită, puteți flash microcontrolerul.

O mică galerie a dispozitivului finit:




O mică nuanță în schemă.
Atunci când un card SD este introdus într-un suport de card (cardul este conectat la o sursă de alimentare), se creează o creștere a curentului și, în consecință, o scădere de tensiune în circuit (se pare că în acest moment sunt încărcate capacități semnificative pe card). ). Reducerea este atât de semnificativă încât microcontrolerul este resetat. Folosesc asta pentru a începe procedura de inițializare a cardului (instalarea cardului repornește microcontrolerul și primul lucru pe care îl face firmware-ul este să caute și să inițializeze cardul). Dacă nu resetați MC atunci când instalați cardul (o sursă de alimentare puternică sau capacități mari de netezire), atunci trebuie să aveți grijă de butonul de resetare din circuit pentru resetarea manuală a microcontrolerului (acest lucru este dacă intenționați să "încălziți" schimba cardurile).

5 Funcționarea dispozitivului.

După cum am scris mai sus, lucrul cu dispozitivul este foarte simplu: copiați piesele denumite corect pe cardul SD, introduceți cardul în suportul cardului, dispozitivul va găsi automat cardul, LED-ul verde se va aprinde - asta este, dispozitivul este gata pentru a reda melodii. Acum trebuie doar să alegeți-porniți piesa pentru redare, în modul care vi se potrivește cel mai bine.

5.1 Butoanele dispozitivului, acțiunea lor.

Am încercat să fac dispozitivul cât mai funcțional, așa că sunt folosite o mulțime de picioare de microcontroler pentru comutatoarele de mod (acest lucru face ca dispozitivul să arate ca un arici :)). Dacă nu aveți nevoie de nicio funcție - lăsați piciorul „atârnat” în „aer”.
Acțiune de comutare:
- „Monstru” - vă permite să încetiniți (de 2 ori) redarea piesei - creând efectul unei voci joase. Comutatorul funcționează „din mers” - viteza se modifică la comutare;
- „Heliu” - accelerează redarea piesei (cu 1/3) - creând efectul unei voci înalte. Comutatorul funcționează „din mers”;
- „Repetați” dacă acest comutator este închis la pământ, atunci piesa selectată va fi redată la nesfârșit (până când comutatorul este deschis). Acest lucru poate fi util, de exemplu, dacă trebuie să creați un anumit fundal sonor - sunetul ploii, arderea unui foc, murmurul unui pârâu ...;
- Butonul „Select / Play” care pornește piesa pentru redare (descriere mai jos);
- „Select track” - setarea numărului piesei care este redată (descrierea de mai jos);
- „Dir1 / Dir2” - selectarea schemei de sunet (descrierea de mai jos).

5.2 Porniți redarea.

Există trei moduri de a începe redarea unei anumite piese:
- prin trimiterea unei majuscule a alfabetului latin prin UART - redarea fișierului care conține această literă la începutul numelui începe imediat;
- dacă numărul fișierului este selectat folosind „Select track” (cod binar 0001=”A”, 0010=”B”, etc. 1- piciorul este scurtcircuitat la sol, 0 - “atârnat” în „aer”), apoi butonul „Selectare / Redare” va porni fișierul corespunzător pentru redare;
- dacă nu se selectează nimic folosind „Select track” (0000 - picioarele „atârnă” în „aer”), atunci apăsând butonul „Select / Play” de un anumit număr de ori, începem piesa corespunzătoare (1 dată = „A”, de 2 ori ="B", etc.).

5.3 Scheme de sunet.

O caracteristică foarte utilă este abilitatea de a selecta una dintre cele două scheme de sunet. Aceasta înseamnă că comutatorul „Dir1 / Dir2” selectează folderul de pe hartă din care va fi redată piesa.

Există o mulțime de aplicații: mesaje în rusă și engleză (jucării educaționale), voci pentru copii și adulți, zgomote de apă curgătoare și foc arzând, pisică / câine, polițist bun și rău :), sunete liniștitoare / revigorante și o grămadă de altele. Opțiuni.

De exemplu, aveți nevoie de dispozitivul dvs. pentru a putea comunica cu voci masculine și feminine. Este implementat astfel:
- creați două seturi de mesaje, respectiv, în varianta feminină și masculină;
- numerotarea fișierelor pentru ambele opțiuni este aceeași. Nu uitați că dispozitivul „vede” doar prima literă din numele fișierului, astfel încât să puteți face numele mai ușor de înțeles pentru dvs., de exemplu, „C_Waiting for command_male.wav” și „C_Waiting for command_female.wav” sunt destul de corecte ;
- un set de mesaje pentru bărbați este copiat în folderul „1”, iar mesajele pentru femei în folderul „2”.
Acum, în funcție de starea comutatorului „Dir1 / Dir2”, aceeași comandă va reda piese din folderul „masculin” sau „femei”.

5.4 Indicarea funcționării dispozitivului.

Deoarece tini2313 are foarte puține picioare și aproape toate sunt folosite pentru comutatoare, a trebuit să sacrific o indicație normală și în schimb să atașez ceva NU normal. Pentru a indica diferite moduri de funcționare, se folosește doar un picior al microcontrolerului, la care sunt conectate două LED-uri - roșu și verde (bine, sau care vă place mai mult). Diferite moduri de operare ale dispozitivului sunt afișate cu un anumit cod de culoare:
- LED-ul roșu clipește - nu există card SD sau tipul acestuia nu este acceptat de dispozitiv;
- LED-ul roșu este aprins - cardul SD este suportat și inițializat cu succes, dar cardul nu este formatat în FAT16;
- LED-ul verde este aprins - cardul SD a fost inițializat cu succes, a fost găsit cel necesar Sistemul de fișiere iar dispozitivul este pregătit pentru a reda piesa - așteptând comanda;
- LED-ul verde clipește - dispozitivul redă piesa;
- verde este aprins, roșu este aprins pentru o perioadă scurtă de timp, verde este din nou pornit - pista nu a fost găsită;
- ledul verde este aprins, se stinge pentru scurt timp și ledul verde se aprinde din nou - este apăsată tasta de selectare a piesei.

5.5 Informații de depanare.

Pentru a facilita căutarea zonelor cu probleme (în cazul în care dispozitivul nu dorește să funcționeze), am duplicat fiecare etapă de inițializare din program cu mesaje prin UART. După fiecare pas de succes, caracterul corespunzător este trimis către UART:
- „S” - (Start) periferia microcontrolerului este inițializată normal;
- „C” - (Card Init) Card SD inițializat normal și acceptat;
- „F” - (FAT Init) Sistemul FAT sprijinit;
- „1” - (No 1 Dir) niciun folder „1” nu va fi citit din directorul rădăcină;
- „2” - (No 2 Dir) niciun folder „2” nu va fi citit din directorul rădăcină;
- „R” - (Gata) dispozitivul este complet gata - așteaptă comanda de pornire a piesei;
- În plus, de fiecare dată când o pistă este pornită, o literă majusculă a numelui pistei este trimisă la UART.

6 piese pentru sunetul dispozitivelor dvs.

6.1 Conversia pistelor

Dacă nu s-a găsit nimic potrivit în biblioteca de mai sus, atunci puteți obține melodiile necesare pe net (există multe site-uri speciale pentru muzicieni și editare video, unde sunt deja colectate biblioteci mari de sunete), în instalații de jocuri (adesea sunete de jocul este împărțit în piese și pliat într-un folder separat). De asemenea, puteți tăia efectele sonore din filme și muzică. Piesele găsite trebuie convertite într-un format acceptat de dispozitiv. Vă reamintesc că formatul fișierului trebuie să fie WAV necomprimat. 32000 Hz, 1 canal, 8 biți (WAV PCM 8U)
Pentru a converti în acest format, orice editor de muzică este potrivit sau dacă trebuie doar să convertiți piesa fără a o edita -

În multe aparate de uz casnic și dispozitive de automatizare industrială din anii relativ recenti sunt instalate contoare mecanice. Sunt produse pe transportor, bobine de sârmă în mașinile de bobinat etc. În cazul unei defecțiuni, nu este ușor să găsiți un contor similar și este imposibil de reparat din cauza lipsei pieselor de schimb. Autorul propune înlocuirea contorului mecanic cu unul electronic. Un contor electronic în curs de dezvoltare pentru a înlocui unul mecanic se dovedește a fi prea complicat dacă este construit pe microcircuite cu un grad scăzut și mediu de integrare (de exemplu, seria K176, K561). mai ales dacă este nevoie de un cont invers. Și pentru a salva rezultatul atunci când alimentarea este oprită, este necesar să furnizați baterie de rezerva nutriție.

Dar puteți construi un contor pe un singur cip - un microcontroler programabil universal, care are o varietate de perifericeși capabil să rezolve o gamă foarte largă de probleme. Multe microcontrolere au o zonă de memorie specială - EEPROM. Datele scrise pe acesta (inclusiv în timpul execuției programului), cum ar fi rezultatul curent al numărării, sunt păstrate chiar și după oprirea alimentării.

Contorul propus folosește un microcontroler Attiny2313 din familia Almel AVR. Dispozitivul implementează o numărătoare inversă, ieșirea rezultatului cu anularea unui n nesemnificativ

pe un indicator LED din patru cifre, stocând rezultatul în EEPROM când alimentarea este oprită. Comparatorul analogic încorporat în microcontroler este utilizat pentru detectarea în timp util a scăderii tensiunii de alimentare. Contorul își amintește rezultatul numărării atunci când alimentarea este oprită, restabilindu-l când este pornit și, în mod similar cu un contor mecanic, este echipat cu un buton de resetare.

Schema de contor este prezentată în figură. Șase linii ale portului B (РВ2-РВ7) și cinci linii ale portului D (PDO, PD1, PD4-PD6) sunt utilizate pentru a organiza indicarea dinamică a rezultatului numărării pe indicatorul LED HL1. Sarcinile colectoare ale fototranzistoarelor VT1 și VT2 sunt rezistențe încorporate în microcontroler și incluse în software, conectând ieșirile corespunzătoare ale microcontrolerului la circuitul său de putere.

O creștere a rezultatului numărării N cu unu are loc în momentul întreruperii conexiunii optice dintre dioda emitătoare VD1 și fototranzistorul VT1, ceea ce creează o diferență de nivel crescândă la intrarea INT0 a microcontrolerului. În acest caz, nivelul la intrarea INT1 trebuie să fie scăzut, adică fototranzistorul VT2 trebuie să fie iluminat de dioda emițătoare VD2. În momentul creșterii frontului la intrarea INT1, cu un nivel scăzut la intrarea INT0, rezultatul va scădea cu unu. Alte combinații de niveluri și diferențele lor la intrările INT0 și INT1 nu modifică rezultatul numărării.

Când valoarea maximă de 9999 este atinsă, contorizarea continuă de la zero. Scăderea unuia din valoarea zero dă rezultatul 9999. Dacă numărătoarea inversă nu este necesară, puteți exclude din contor dioda emițătoare VD2 și fototranzistorul VT2 și conectați intrarea INT1 a microcontrolerului la un fir comun. Contul va merge doar să crească.

După cum sa menționat deja, comparatorul analogic încorporat în microcontroler servește ca detector de cădere de tensiune. Acesta compară tensiunea nestabilizată la ieșirea redresorului (punte de diode VD3) cu tensiunea stabilizată la ieșirea regulatorului integrat DA1. Programul verifică ciclic starea comparatorului. După ce contorul este deconectat de la rețea, tensiunea de pe condensatorul de filtru al redresorului C1 scade, iar tensiunea stabilizată rămâne neschimbată pentru o perioadă de timp. Rezistoarele R2-R4 sunt selectate după cum urmează. că starea comparatorului în această situaţie este inversată. După ce a descoperit acest lucru, programul are timp să scrie rezultatul numărării curente pe EEPROM-ul microcontrolerului chiar înainte ca acesta să nu mai funcționeze din cauza unei opriri. Data viitoare când programul este pornit, acesta va citi numărul scris în EEPROM și îl va afișa pe indicator. Numărarea va continua de la această valoare.

Datorită numărului limitat de pini ai microcontrolerului, pentru a conecta butonul SB1, care resetează contorul, se folosește pinul 13, care servește ca intrare analogică inversă a comparatorului (AIM) și, în același timp - „digital” intrare PB1. Divizorul de tensiune (rezistoarele R4, R5) setează aici nivelul perceput de microcontroler ca un nivel logic ridicat Când apăsați butonul SB1, acesta va deveni scăzut. Acest lucru nu va afecta starea comparatorului, deoarece tensiunea la intrarea AIN0 este încă mai mare decât la AIN1.

Când butonul SB1 este apăsat, programul afișează un semn minus în toate cifrele indicatorului, iar după eliberare începe numărătoarea de la zero. Dacă contorul este oprit în timp ce butonul este apăsat, rezultatul curent nu va fi scris în EEPROM, iar valoarea stocată acolo va rămâne aceeași.

Programul este conceput astfel încât să fie ușor de adaptat la un contor cu alți indicatori (de exemplu, cu catozi comuni), cu o cablare diferită placă de circuit imprimat etc. O ușoară corectare a programului va fi, de asemenea, necesară la utilizare rezonator cu cuarț la o frecvență care diferă cu mai mult de 1 MHz de cea specificată.

La o tensiune sursă de 15 V, tensiunea este măsurată la pinii 12 și 13 ai panoului microcontrolerului în raport cu firul comun (pin 10). Primul trebuie să fie în intervalul 4 ... 4,5 V, iar al doilea trebuie să fie mai mare de 3,5 V, dar mai mic decât primul. Apoi tensiunea sursei este redusă treptat. Când scade la 9 ... 10 V, diferența de valori de tensiune pe pinii 12 și 13 ar trebui să devină zero și apoi să schimbe semnul.

Acum puteți instala un microcontroler programat în panou, conectați transformatorul și aplicați acestuia tensiune de rețea. După 1,5 ... 2 s, trebuie să apăsați butonul SB1. Indicatorul contor va afișa numărul 0. Dacă nu este afișat nimic pe indicator, verificați din nou valorile tensiunii la intrările AIN0.AIN1 ale microcontrolerului. Prima trebuie să fie mai mare decât a doua.

Când contorul este pornit cu succes, rămâne să verificați corectitudinea numărării prin umbrirea alternativă a fototranzistoarelor cu o placă opaca la razele IR. Pentru contrast mai mare este de dorit să închideți indicatoarele cu un filtru de lumină din sticlă organică roșie.

Astăzi încercăm să profităm de mai mult microcontroler simplu ATtiny2313și conectați-vă la el simbolic Ecran LCD A care conține două rânduri de 16 caractere.

Display-ul pe care îl vom conecta într-un mod standard 4 biți.

În primul rând, să începem, desigur, cu microcontrolerul, deoarece suntem deja foarte familiarizați cu afișajul din lecțiile anterioare.

Deschideți fișa de date a controlerului ATtiny2313și vezi pinout-ul lui

Noi vedem asta controlor dat există în două tipuri de cazuri, dar din moment ce a căzut în mâinile mele într-un caz DIP, vom lua în considerare această versiune specială a cazului și, în principiu, ele nu diferă mult, cu excepția aspectului, deoarece numărul de picioare este același - conform 20.

Întrucât sunt 20 de picioare față de cele 28 de picioare ale controlerului ATMega8, la care am lucrat tot timpul și vom continua să facem, atunci, în consecință, vor fi și mai puține oportunități.

În principiu, tot ce avea ATmega8 era aici, singurul lucru este că sunt mai puține porturi. Dar din moment ce sarcina pe care ne ocupăm este să încercăm să-l conectăm prin magistrala SPI la un alt controler, acest lucru nu ne deprimă prea mult.

Există și alte diferențe, dar sunt minore și le vom cunoaște după cum este necesar.

Să asamblam o astfel de schemă aici (click pe imagine pentru a mări imaginea)

Display-ul este conectat la pinii portului D. PD1 și PD2 sunt conectați la intrările de control, iar restul la pinii modulului de afișare D4-D7.

Vom crea un proiect cu numele TINY2313_LCD, vom transfera totul în el, cu excepția modulului principal din proiect pentru conectarea afișajului la Atmega8.

Desigur, unele lucruri vor trebui refăcute. Pentru a face acest lucru, trebuie să studiați cu atenție ce picior este conectat la ce. Magistrala E a afișajului este conectată la PD2, iar magistrala RS este conectată la PD1, așa că haideți să facem modificări fișierului lcd.h

#definie1PORTD|=0b0000 01 00 // setează linia E la 1

#definie0PORTD&=0b1111 10 11 // setează linia E la 0

#definirs1PORTD|=0b00000 01 0 // setează linia RS la 1 (date)

#definirs0PORTD&=0b11111 10 1 // setează linia RS la 0 (comandă)

După cum putem vedea din selecție cu aldine, nu au avut loc schimbări atât de drastice.

Acum intrările de informații. Aici folosim picioarele PD3-PD6, adică sunt deplasate cu 1 punct față de conectarea la Atmega8, așa că vom repara și ceva în fișier lcd.cîn funcțiune trimite jumătate de octet

PORTD&=0b 1 0000 111; //stergem informatiile de pe intrarile DB4-DB7, nu atingem restul

Dar asta nu este tot. Obișnuiam să deplasăm datele transmise cu 4, iar acum, din cauza modificărilor de mai sus, va trebui să le deplasăm doar cu 3. Prin urmare, în aceeași funcție, vom corecta și prima linie.

c<<=3 ;

Asta sunt toate schimbările. De acord, nu sunt atât de grozavi! Acest lucru se realizează prin faptul că încercăm întotdeauna să scriem cod universal și să folosim exact substituții macro. Dacă nu am fi petrecut timp cu asta, atunci ar trebui să corectăm codul în aproape toate funcțiile bibliotecii noastre.

În modulul principal, nu atingem inițializarea portului D, lăsăm întregul să intre în starea de ieșire, ca în lecția 12.

Să încercăm să asamblam proiectul și să vedem mai întâi rezultatul în proteus, deoarece am făcut și un proiect pentru el, care va fi și în arhiva atașată cu proiectul pentru Atmel Studio

Totul merge grozav pentru noi! Iată cum puteți, se dovedește a reface rapid proiectul pentru un controler sub altul.

Proteus este foarte bun, dar părțile reale sunt întotdeauna mai plăcute la vedere. Întregul circuit a fost asamblat pe o placă, deoarece nu am făcut și nu am asamblat o placă de depanare pentru acest controler. Vom conecta programatorul printr-un conector standard ca acesta

Iată întreaga diagramă

Totul este standard aici. Rezistor de tragere pentru RESET etc.

Acum, înainte de a flashiza controlerul în avrdude, trebuie să selectăm controlerul și să îi citim memoria flash

Apoi accesați filele SIGURANȚE și setați siguranțele corect. Deoarece nu avem un rezonator cu cuarț, setăm siguranțele în acest fel




Top