Remediere siguranțe AVR. Recuperarea configurației bitului siguranței AVR (HVSP) minuscul

Diagrama schematică a unui dispozitiv de casă care va ajuta la revigorarea MK și la restabilirea valorilor biților FUSE după programarea secvențială.

De câțiva ani încoace, microcontrolerele Atmel AVR au fost populare pe merit printre amatorii de radio. O caracteristică a acestor MK este că puteți scrie „firmware” în ele atât în ​​paralel, cât și în modul serial.

În practica radioamatorilor, programatoarele seriale (SPI - Serial Peripheral Interface) sunt cele mai utilizate pe scară largă, având o serie de avantaje:

  • Circuitele lor sunt de obicei mai simple decât cele ale programatorilor paraleli (într-un pic, te poți descurca chiar cu cinci conductori și două rezistențe);
  • Există multe opțiuni atât pentru programatori înșiși, cât și pentru programe de control pentru diferite sisteme de operare;
  • Pentru a conecta programatorul, puteți alege aproape orice port de pe computer - există scheme atât pentru LPT și COM, cât și pentru programatori USB.

În plus, un astfel de programator vă permite să „flash” MK-ul fără a-l dezlipi de pe dispozitiv (ISP - In System Programmable).

Cu toate acestea, modul de programare SPI este, la urma urmei, eliminat; iar unele caracteristici ale programării paralele cu drepturi depline nu sunt disponibile în acesta.

Cea mai frecventă problemă cu programarea secvențială este incapacitatea de a efectua orice acțiune cu MK dacă anumite celule fuzibile ale acestui MK au fost modificate de la valorile implicite - în acest caz, cipul „declară o grevă” și nu comunică cu calculatorul: nu mai poate fi nici citit, nici „flash” cu un programator serial.

Și pare să nu fie în ordine, în timp ce programul PonyProg, de exemplu, dă următorul mesaj de eroare: „Dispozitiv lipsă sau dispozitiv necunoscut (-24), deși acest MK poate funcționa destul de normal în circuitul final.

Motivul pentru această „necomunicativitate” poate fi, de exemplu, setarea la zero (și zero în biți de siguranță pentru AVR înseamnă că acest bit este programat) a bitului RSTDISBL - ceea ce duce la oprirea intrării externe de resetare și transformându-l într-o linie I/O normală; și fără o resetare externă, MK nu va putea intra în modul de programare SPI și va fi inaccesibil PC-ului.

Un alt motiv pentru care MCU devine „invizibil” pentru programatorul SPI este lipsa tactului: biții siguranțe care controlează generatorul de ceas (CKSEL0-3) pot fi setați în așa fel încât MCU să dezactiveze circuitele interne de ceas și să necesite o ceas extern - sursa impulsurilor de ceas; iar fără ceas, programarea SPl este imposibilă.

Mai mult decât atât, octeții de siguranță „cablați” incorect pot fi rezultatul nu numai al neatenției sau al ignoranței - defecțiunile hardware în timpul „intermitentului” sunt, de asemenea, destul de probabile, mai ales dacă sunt „cusute” printr-una dintre variațiile pe tema „cinci fire” " - prin urmare, de la "căzut nimeni nu este asigurat în cine" MK, întins pe un raft și așteaptă vindecarea miraculoasă (și dacă crezi pe Internet, aproape fiecare al doilea fan AVR a trecut prin asta - și nu neapărat de la începători .. .).

Dacă a apărut o astfel de neplăcere și MK a încetat să comunice cu computerul, atunci nu va mai fi posibilă corectarea octeților de siguranță setați incorect folosind un programator serial.

Cu toate acestea, nu este deloc necesar să faceți sau să cumpărați un nou programator paralel (sau, în plus, un kit de depanare) doar pentru a „vindeca” câteva MK „comatoase”, mai ales dacă vechiul programator SPI este destul de confortabil - este mai convenabil pentru aceasta folosiți un dispozitiv simplu, a cărui diagramă este prezentată în Fig. 1.

schema circuitului

Dispozitivul este conceput să „trateze” MK ATtiny2313, dar poate fi refăcut pentru orice alt model AVR – atât Tiny, cât și Mega – pentru care este atașată o „sursă” bine comentată a firmware-ului, ceea ce face posibilă rescrierea acestuia în relație. la MK, care este momentul în care aveți nevoie de o ambulanță.

Esența funcționării unui astfel de dispozitiv este de a introduce „pacientul” în modul de programare paralelă și de a emula pe liniile sale acele semnale ale programatorului „real” care sunt responsabile pentru schimbarea stării celulelor fuzibile; și apoi scrieți valorile implicite ale celulei fuzibile în acest MK.

Acest dispozitiv setează valorile din fabrică pentru toți octeții siguranței: ridicat, scăzut și suplimentar; si in plus sterge si memoria programelor si datelor de la "pacient" - in urma carora acesta capata starea de microcircuit "curat".

Orez. 1. Schema schematică a unui dispozitiv pentru tratarea biților FUSE într-un microcontroler AVR.

Astfel de dispozitive au fost deja descrise în literatura de radio amatori și pe Internet (sub denumirile Fuse Doctor, AVR Doctor, AVR Reanimator, AVR Aibolit etc.), dar acesta are câteva caracteristici care fac lucrul cu el puțin mai plăcut.

Adică liniile PB0-PB7 - la liniile PB0-PB7, linia PD6 - la linia PD6 etc. Ceea ce, în cazul asamblarii circuitului într-un mod imprimat, a complicat foarte mult instalarea - au fost necesare o mulțime de jumperi sau cablare dublă (cu toate acestea, unii autori au sugerat să se instaleze pur și simplu microcircuite unul peste altul, îndoirea cablurilor neconectate la rezistențele laterale și de lipit/conductoarele de pe ele; dar contactul de fiabilitate cu un astfel de „microcontroller kama sutra” este pus la îndoială; și știm cu toții perfect la ce duce îndoirea-îndoirea pinii microcircuitului...

Aici, microcircuitele sunt amplasate, așa cum ar fi, „una lângă altul”, „jack”, ceea ce face ca aspectul plăcii de circuit imprimat să fie foarte simplu. În versiunea autorului, care este prezentată în Fig. 2, repetă în mare măsură schema de circuit și conține doar trei jumperi mici. Dimensiunea plăcii - 60x60 mm.

În al doilea rând, unele dispozitive necesitau două tensiuni: 5 V pentru a alimenta MK și 12 V la linia de resetare „pacient” pentru a intra în modul de programare.

Acest circuit necesită o singură tensiune, care poate avea o răspândire într-un interval destul de larg - principalul lucru este ca acesta să fie de cel puțin 12 V. În al treilea rând, majoritatea dispozitivelor descrise nu permit înlocuirea „la cald” a „pacienților” în cazul în care trebuie să „vindeci” mai multe MK-uri la rând - după fiecare „intermitent” trebuie să oprească alimentarea, să înlocuiască „bolnavii”, apoi să pornească din nou alimentarea etc.

Acest dispozitiv setează toate ieșirile la log.O după fiecare „intermitent”, ceea ce vă permite să „tratați” microcircuitele cu un „conveior” - conectat puterea, instalat „pacientul”, apăsați butonul „start”, privit rezultatul a „tratamentului” de către HL1, a eliminat, a introdus un nou „pacient”, a dat clic, a privit HL1, a eliminat, a introdus etc. Și toate acestea fără a opri curentul (măcar deschide „cortul” pe piața radio!).

Și, în al patrulea rând, adesea în astfel de dispozitive nu există nicio verificare a biților siguranțe înregistrate și indicarea rezultatului „tratamentului” (cum ar fi „reușit / nereușit”). În acest design, este prevăzută verificarea, iar LED-ul HL1 este utilizat pentru a indica rezultatele sale, care pot avea trei stări:

  1. Aprins continuu - programarea „pacientului” a fost reușită, octeții de siguranță citiți corespund celor scrise; aparatul așteaptă următorul „pacient”;
  2. Clipirea la o frecvență de 2GHz - o eroare în programarea „pacientului”: octeții de siguranță citiți nu se potrivesc cu cei scrisi; „pacientul” nu a intrat în modul de programare, nu este instalat sau este defect (programul oferă o verificare a prezenței unui „pacient” - un AVR care funcționează setează jurnalul.1 pe linia BSY / RDY (pin 3 pentru ATtiny2313) ) la intrarea în modul de programare paralelă); aparatul așteaptă următorul „pacient”;
  3. Oprit - procesul de programare și verificare este în curs. Programarea unui „pacient” sănătos durează mai puțin de o secundă, iar această stare LED nu ar trebui să fie vizibilă în condiții normale. Dacă LED-ul este în starea oprit pentru o perioadă relativ lungă de timp, atunci cel mai probabil procesul de „intermitent” este în buclă din cauza faptului că „pacientul” defect este blocat în modul de înregistrare și nu setează semnalul de pregătire BSY / RDY așteptat de „medic”.

După cum am menționat deja, dispozitivul este destul de versatil și este aplicabil pentru „tratarea” aproape oricărui MK din seria AVR.

În același timp, nu este deloc necesar să se fabrice o copie separată a dispozitivului pentru diferite microcontrolere care diferă în ceea ce privește numărul și aranjamentul pinilor - doar adăugați, dacă este necesar, adaptoare pentru pinout-ul următorului „bolnav” și rescrieți. programul de control corespunzător.

Adaptorul este o priză DIP-20, care este introdusă cu „picioarele” în panoul „pacient” de pe placa dispozitivului.

De sus, la o astfel de priză (la contactele pentru ieșirile microcircuitului), conductoarele sunt lipite (sau pur și simplu introduse) în acele locuri în care liniile de putere și control se potrivesc „pacientului” de pe placă.

Celelalte capete ale acestor conductori sunt lipite la concluziile celei de-a doua prize - sub MK care necesită "tratament" - în conformitate cu locația liniilor sale de control, care poate fi specificată în fișa de date proprietară.

Rezultă un fel de conector, a cărui fișă (doar o priză DIP-20) este introdusă în mufa DIP-20 pentru „pacientul” de pe placă, iar un nou „pacient” este introdus în priza lui (altul priză).

În ceea ce privește programul, poate avea nevoie de corectare, deoarece. diferite modele AVR necesită adesea pași diferiți pentru a intra în modul de programare și pentru a schimba octeții siguranței.

În plus, octeții de siguranță în sine (inclusiv numărul lor) sunt diferiți pentru diferite modele MK - informații mai detaliate pot fi obținute în [L.1,2,3] sau în documentația companiei. Și pentru a înțelege mai ușor programul original, i-am oferit comentarii detaliate.

Ca „medic” în acest dispozitiv, la fel ca „pacientul”, se folosește microcontrolerul ATtiny2313 - este instalat și pe priză, astfel încât, după refacerea tuturor microcircuitelor „bolnate”, să poată fi îndepărtat și folosit în alte proiecte. .

Pentru a funcționa în acest dispozitiv, toate biții de siguranță ale „medicului” trebuie să fie cele care sunt setate în el în mod implicit (din fabrică); singurul lucru - pentru o funcționare mai stabilă (în special cu o tensiune de alimentare instabilă), în „medic” puteți porni sistemul BOD setându-l la 2,7 V (prin setarea bitului de siguranță BODLEVEL1 la zero). „Doctor” extern de cuarț nu este necesar, funcționează de la generatorul RC încorporat.

Detalii

Cipul DA1 (78L05) poate fi înlocuit cu analogul domestic KR1157EN502 sau cu cel mai puternic 7805 - dar este mult mai scump, iar puterea sa nu este necesară pentru acest circuit.

Tranzistorul VT1 funcționează aici în modul cheie și poate fi orice structură NPN - de exemplu, KT315, 2SC1815, 2SC9014, 2SC1749S etc.; dar pentru unele modele, va trebui să schimbați aspectul plăcii.

Orez. 2. Placa de circuite a dispozitivului de recuperare a siguranțelor.

Dioda de siguranță VD1 poate fi orice, pentru un curent de cel puțin 150 mA, sarcina sa este de a proteja circuitul de inversarea accidentală a puterii.

Toate rezistențele din circuit sunt de dimensiuni mici, 0,125 W - valoarea lor poate diferi de cea indicată într-un interval destul de larg. LED HL1 -orice indicator.

In cele din urma

Și, în concluzie, aș dori să vă spun despre o caracteristică interesantă a comportamentului unor instanțe ale ATtiny2313 MK în timpul programării lor SPI folosind programul PonyProg2000 (se pot comporta și alte modele MK, inclusiv cu alte programe - dar autorul nu a a avut totuși experimente cu altceva decât pachetul ATtiny2313-PonyProg2000).

Esența problemei este următoarea: uneori, când încearcă să citească sau să scrie MK, programul PonyProg dă un mesaj de eroare „Dispozitiv lipsă sau dispozitiv necunoscut (-24)” - și asta în ciuda faptului că nu există biți de siguranță în acest MK s-au schimbat - în plus, microcircuitul poate fi chiar nou, niciodată „cusut” încă! „Tratamentul” folosind dispozitivul descris mai sus nu dă niciun rezultat - atunci când încercați să citiți/scrieți din nou, mesajul de eroare apare din nou. MK pare să nu fie în ordine și fără niciun motiv aparent...

Dar dacă apăsați butonul „Ignorare” în acest mesaj, forțând astfel „Pony” să ignore lipsa unui răspuns din partea MK și tot încercați să citiți/scrieți microcircuitul, atunci acest MK va fi citit sau „fulger” în mod normal.

După o astfel de „intermitere” forțată, majoritatea MK-urilor „pretinzând că sunt morți” vor funcționa destul de normal, în plus, fără erori (cu excepția mesajului descris mai sus când se încearcă stabilirea unei conexiuni cu un PC)!

Aparent, ideea aici este că unele instanțe ale MK nu generează confirmarea corectă ca răspuns la solicitarea programatorului, drept urmare PonyProg concluzionează că funcționează defectuos; în același timp, acești MK percep comenzile rămase ale programatorului în mod normal și vor funcționa corect.

Este foarte posibil ca aceasta să fie o caracteristică (sau mai degrabă, o „boală”) a AVR MK (nu este doar faptul că PonyProg a inclus un astfel de buton - „Ignorare”) - autorul acestui articol a avut trei din zece MK să se comporte într-un mod similar, și mai des a început acest lucru nu este imediat, ci după câteva „flash-wok-uri”.

Sau poate că tensiunea statică de pe mâinile omului este de vină... Dar, oricum ar fi, în structurile critice (cum ar fi dispozitivele de aprindere, încălzirea automată, udarea, alarmele etc.) o astfel de „încredere subminată” MK, totuși, este nu este recomandat să-l folosești.

Dar în jucării, ghirlande de pom de Crăciun, sonerii și alte dispozitive auxiliare, acestea vor funcționa bine mulți ani - și, în plus, fără probleme.

Firmware pentru microcontroler - Descărcare (9 KB).

Matin A. RK-08-16.

Literatură:

  1. Evstifeev A.V. - Microcontrolere AVR din familia Tiny. Manualul utilizatorului. 2007. Cmp.386 - Programare paralelă;
  2. Evstifeev A.V. - Microcontrolere AVR din familia Mega. Manualul utilizatorului. 2007. P.526 - Programare paralelă;
  3. Evstifeev A.V. - Microcontrolere AVR din familiile Tiny și Mega de la ATMEL. 2008. P.498 - Programare paralelă.

Un alt exemplu simplu de realizare a unei plăci de depanare, dar de data aceasta pentru dispozitive care utilizează microcontrolerul ATTiny2313. Locația picioarelor pentru programare în ATTiny2313 este identică cu ATTiny13. În consecință, plăcile vor ieși similare. Diferența față de va fi prezența unui oscilator master extern (cuart). Implicit, ATTiny2313 vine din fabrică cu generatorul intern pornit, așa că dacă microcontrolerul nu este planificat să funcționeze de la un generator extern, acesta nu poate fi instalat. Duplicăm conectorul de alimentare în cazul conectării unui programator alimentat de circuit la placă (alimentăm un conector, iar programatorul de la celălalt).


Pentru a face o placă de depanare pentru dispozitivele ATTiny2313, avem nevoie de:


Asamblam placa de depanare conform figurii:

1 lipit în priză pentru microcircuit și pini (ca în figură);
2 așa cum se arată în figură (linia roșie) facem un jumper pe partea din față a plăcii. Mai facem un săritor pe cealaltă parte;
3 jumperi - „snot” conectează pinii și picioarele panoului (punctele de lipit sunt încercuite în verde).

Tabloul nostru de depanare este gata!

Concluzie.

- Punem etichete pe GND, SCK pentru conectarea corecta a puterii si programatorului;
- Orice altceva de pe placa de depanare va fi lipit în conformitate cu schema de dispozitiv selectată. (ca opțiune, puteți adăuga pini la fiecare picior al microcontrolerului pentru a conecta alte plăci și periferice);
- Pentru o funcționare mai fiabilă în condiții de zgomot crescut, este foarte de dorit să completați circuitul cu un picior de resetare pull-up, un rezistor (rezistorul intern de pull-up are o rezistență de aproximativ 10 kOhm - acest lucru nu este suficient) și un condensator ceramic filtrant pe picioarele de putere (în limita a 0,1 uF);
-Acum introducem microcontrolerul în soclu și flash ATTiny2313 cu firmware-ul necesar.

(Vizitat de 16 038 ori, 1 vizite astăzi)

Sectiunea: Etichete: ,

Post navigare

O placă simplă de depanare pentru dispozitivele AVR ATTiny2313 cu cuarț.: 70 de comentarii


  1. Autorul GetChiper Post

    Fuzy atins?
    Ai verificat un alt tini2313?

  2. Toxa12345

    Am fost chinuit multă vreme despre: „CARE zhe mk să aleg” M-am oprit la tinka 2313 pentru că este mai ieftin decât atmega și nu la fel de aprins ca tinka 13, tot din cauza prezenței liniilor RxD și TxD, care permite comunicarea prin YuART
    Z.Y. nu este o problemă să cumpărați MK de la noi în Kursk. tinka 2313 - costă 130 de ruble. și atmega8 deja 200 de ruble despre Tinka 13 nu a recunoscut


  3. Autorul GetChiper Post

    Sau poate ATmega88 sau ATmega48?

  4. Andrei1979

    Timp bun.
    Am asamblat placa conform schemei propuse, am conectat-o ​​la USBasp, am conectat 2313, am aplicat 5 V. Extreme Burner dă un cip incorect găsit. În consecință, nimic nu poate fi flash sau numărat. La înlocuirea tinki același lucru.
    A mai patit cineva ceva asemanator?
    Poate că asta se datorează interferențelor?

    „- Pentru o funcționare mai fiabilă în condiții de zgomot crescut, este foarte de dorit să completați circuitul cu un picior de resetare pull-up, un rezistor (rezistorul intern de pull-up are o rezistență de aproximativ 10 kOhm - acest lucru nu este suficient) și un condensator ceramic filtrant pe picioarele de putere (în limita a 0,1 uF); »

    și, de asemenea, mai ales pentru manechin, este posibil să reflectăm aceste acțiuni sub forma unei diagrame.


  5. Autorul GetChiper Post

    Ce să afișați acolo.
    Condensatorul este plasat în paralel cu alimentarea (adică între picioarele 10 și 20)
    Un rezistor de 10 kΩ este plasat între Vcc și resetare (adică între pinii 1 și 20)

  6. Andrei1979

    Multumesc pentru raspuns. Am pus 4,7 KΩ și 220pF. A devenit un pic mai distractiv. extreme arzător scrie la fel ca a fost. Dar khazama raportează încă o dată că semnătura cipului este 0x1e000. NEPOTITARE Semnătura așteptată pentru ATTiny 2313 este 1e 91 0a. În alte cazuri, scrie și o eroare de conexiune.

    Folosesc o placă fără lipire, așa că lipirea dezordonată nu ar trebui să fie o problemă. Unde mai poți căuta?


  7. Autorul GetChiper Post

    220pF nu este suficient. Este necesar să se pună în paralel 0,1 uF - ceramică (nepolară) și 10-100 uF electrolitic (polar).

  8. Dederik

    buna ziua))) Nu am gasit quartz 20.000 in loc de el, am gasit doar quartz 4.000. daca pun quartz 4.000 voi avea micro-r lent? și aceleași condensatoare trebuie schimbate pentru quartz 4.000? Locuiesc în Samarkand cu piese de schimb pentru radio, avem o problemă (((nici măcar nu știu unde să găsesc o priză pentru un micro-r (((pot să fac eu o priză pentru un micro-r?

  9. Dederik

    raspunde macar cuiva)))


  10. Autorul GetChiper Post

    Calmează-te - a fost weekend 🙂

    Puteți pune orice cuarț dacă intenționați să studiați și să vă faceți propriile dispozitive pe această eșarfă (nu trebuie să schimbați condensatorii pentru cuarț). Sau nu poți pune deloc cuarț - folosește generatorul RC încorporat.

    Cât despre realizarea unei prize - poate doar lipiți MK-ul până la moarte într-o placă?

  11. Dederik

    mulțumesc pentru ajutor))) Mai am o întrebare pentru tine, dar nu știu unde să întreb off-topic (((azi mi-au adus un contor electronic pentru reparația Holley DDS28. pentru citirile contorului. întregul înregistrarea este stocată în micro-re. Îmi puteți spune cum să fac un programator pentru el, astfel încât să puteți citi și edita datele micro-ra ??? și cum să vă scriu direct ???


  12. Autorul GetChiper Post

    FM24C02 este o memorie serială nevolatilă (EEPROM)
    Cred că există multe șireturi și programe pentru această afacere (dacă întrebați motorul de căutare) - iată primul care a dat peste http://www.msplata.ru/teleprog.html

  13. Dederik

    Multumesc pentru ajutor:-)

  14. cosmogon

Fig.1

T = T0+T1. Perioada pulsului

T = 1/F

S=T/T1

ciclu de lucru

Factor de umplere D=1/S sau așa D=T1/T*100%

Dispozitivele digitale, de exemplu, un microcontroler poate funcționa doar cu două niveluri de semnal, de exemplu. zero și unu sau oprit și pornit. Astfel, îl puteți utiliza cu ușurință pentru a controla starea încărcăturii, cum ar fi pornirea sau oprirea LED-ului. De asemenea, îl puteți folosi pentru a controla orice dispozitiv electric folosind driverele adecvate (tranzistor, triac, releu etc.) Dar uneori aveți nevoie de mai mult decât doar „pornirea” și „oprirea” dispozitivului. Deci, dacă doriți să controlați luminozitatea unui LED (sau lampă) sau viteza unui motor de curent continuu, atunci semnalele digitale pur și simplu nu o pot face. Această situație este foarte comună în tehnologia digitală și se numește Modularea lățimii impulsului (PWM).

Aproape toate microcontrolerele moderne au hardware specializat pentru a genera un semnal PWM. În acest tutorial vom învăța elementele de bază ale tehnicii PWM și în cele ce urmează vom vedea cum să implementăm PWM folosind microcontrolere AVR.

Dispozitivele digitale precum un microcontroler pot genera doar două niveluri pe liniile de ieșire, înalt=5V și scăzut=0V. Dar dacă vrem să obținem 2,5 sau 3,1 sau orice tensiune între 0-5V? Pentru a face acest lucru, în loc să creăm o tensiune continuă constantă la ieșire, vom genera o undă pătrată care are niveluri ridicate = 5V și scăzute = 0V (vezi Figura 1).

Fig.1

Figura arată că semnalul de ceva timp rămâne alternativ la un nivel scăzut și ridicat. T0 - nivel scăzut, T1 - nivel înalt. Perioada semnalului va fi T = T0+T1. Perioada pulsului- acesta este intervalul de timp dintre două puncte caracteristice a două impulsuri adiacente. În mod obișnuit, perioada este măsurată între două fronturi sau două căderi ale impulsurilor adiacente și este notă cu o literă latină mare T.

Perioada de repetare a pulsului este direct legată de frecvența secvenței pulsului și poate fi calculată prin formula: T = 1/F

Dacă lungimea impulsului T1 este exact egală cu jumătate din perioada T, atunci un astfel de semnal este adesea numit „undă pătrată”.

Ciclul de funcționare al impulsului este raportul dintre perioada de repetare a impulsului și durata acestora și este notat cu litera S: S=T/T1

Ciclul de funcționare este o mărime adimensională și nu are unități de măsură, dar poate fi exprimat ca procent. Termenul se găsește adesea în textele în limba engleză. ciclu de lucru, acesta este așa-numitul ciclu de lucru sau ciclu de lucru PWM. Ciclul de lucru D este reciproca ciclului de lucru.

Factor de umplere de obicei exprimat ca procent și calculat folosind formula: D=1/S sau așa D=T1/T*100%

În figura de mai sus (fig. 1) se poate observa că T1 = T0, aceasta este egală cu jumătate din perioada de timp. Deci, ciclul de lucru PWM este de 50%. Dacă frecvența unor astfel de impulsuri este suficient de mare (să zicem, 5000 Hz), atunci obținem jumătate din 5V, adică. 2,5 V. Astfel, dacă ieșirea controlerului este conectată la motor (folosind drivere adecvate), acesta va funcționa la 50% din viteza maximă. Tehnica PWM folosește acest fapt pentru a crea orice tensiune între două niveluri (de exemplu, între 0-12V). Trucul este că atunci când schimbi valoarea ciclului de lucru între 0-100%, obținem același procent din tensiunea de intrare la ieșire. Mai jos sunt câteva exemple de semnal PWM cu diferite cicluri de lucru.

Dacă puneți un filtru R / C la ieșire, puteți obține un nivel pur de semnal DC și nu unde pătrate. Dar acest lucru nu este necesar pentru motoarele cu comutator sau pentru a controla luminozitatea LED-urilor. Pentru a face acest lucru, puteți aplica un semnal PWM direct driverului (de exemplu, un tranzistor bipolar, MOSFET etc.).

Sub modul de operare pe 16 biți. temporizatorul este înțeles ca algoritmul său de numărare și comportamentul ieșirii modelului de impulsuri asociat cu acesta, care este determinat de combinația de biți care specifică modul de funcționare a temporizatorului (WGMn3-0) și modul de generare a semnalului de ieșire (COMnx1:0). ). În acest caz, biții pentru setarea modului de generare a semnalului de ieșire nu afectează algoritmul de numărare, deoarece algoritmul de numărare depinde doar de starea biților de setare a modului temporizatorului. În modurile PWM, biții COMnx1:0 activează/dezactivează inversarea la ieșirea PWM generată (adică selectați PWM cu inversare sau PWM fără inversare). Pentru modurile non-PWM, biții COMnx1:0 determină ce acțiune trebuie întreprinsă atunci când are loc o potrivire: resetați, setați sau inversați ieșirea (consultați, de asemenea, „Condiționator de ieșire” și „Diagrame de temporizare a cronometrului/contorului pe 16 biți”).

Operatie normala

Cel mai simplu mod de operare este modul normal (WGMn3-0 = 0b0000). În acest mod, contorul funcționează ca unul de însumare (incrementare), în timp ce contorul nu este resetat. Depășirea contorului are loc atunci când este trecută valoarea maximă de 16 biți. valoarea (0xFFFF) la limita inferioară de numărare (0x0000). În funcționare normală, indicatorul de depășire a temporizatorului/contorului TOVn va fi setat pe același ciclu de ceas când TCNTn devine zero.

De fapt, indicatorul de overflow TOVn este al 17-lea bit al temporizatorului/contorului, cu excepția faptului că este doar setat și nu este șters. Cu toate acestea, această proprietate poate fi utilizată în mod programatic pentru a crește rezoluția temporizatorului prin utilizarea unei întreruperi de depășire a temporizatorului, la apariția căreia indicatorul TOVn este resetat automat. Nu există situații speciale pentru funcționarea normală, astfel încât o stare nouă a contorului poate fi scrisă în orice moment.

În modul normal, puteți utiliza blocul de captură. Cu toate acestea, trebuie observat că intervalul maxim de timp dintre apariția evenimentelor externe nu depășește perioada de depășire a contorului. Dacă această condiție nu este îndeplinită, trebuie utilizat o întrerupere a depășirii temporizatorului-contor sau un prescaler.

Blocul de comparare poate fi folosit pentru a genera întreruperi. Nu este recomandat să utilizați ieșirea OCnx pentru a genera semnale în timpul funcționării normale, ca în acest caz, o parte semnificativă din timpul procesorului va fi cheltuită.

Mod de resetare a cronometrului meciului (CTC)

În modul CTC (WGM01, WGM00 =0b10), registrul OCR0 este utilizat pentru a seta rezoluția contorului. Dacă modul CTC este setat și valoarea contorului (TCNT0) se potrivește cu valoarea registrului OCR0, atunci contorul este resetat la zero (TCNT0=0). Astfel, OCR0 stabilește vârful numărătorului contorului și, în consecință, rezoluția acestuia. În acest mod, este oferită o gamă mai largă de ajustare a frecvenței impulsurilor dreptunghiulare generate. De asemenea, simplifică munca contorului de evenimente extern.

În resetarea temporizatorului în modul de potrivire (WGMn3-0 = 0b0100 sau 0b1100), rezoluția temporizatorului este setată de registrele OCRnA sau ICRn. În modul CTC, contorul (TCNTn) este resetat dacă valoarea lui se potrivește cu valoarea registrului OCRnA (WGMn3-0 = 0b0100) sau ICRn (WGMn3-0 = 0b1100). Valoarea registrului OCRnA sau ICRn determină limita superioară de numărare și, prin urmare, rezoluția temporizatorului. În acest mod, este oferită o gamă mai largă de ajustare a frecvenței impulsurilor dreptunghiulare generate. De asemenea, simplifică munca contorului de evenimente extern. Diagrama de timp a temporizatorului în modul CTC este prezentată în Figura 1. Contorul (TCNTn) își crește starea până când se potrivește cu valoarea OCRnA sau ICRn, iar apoi contorul (TCNTn) este resetat.

Figura 1 - Diagrama de timp pentru modul STS

Când limita superioară de numărare este atinsă, o întrerupere poate fi generată folosind steagurile OCFnA sau ICFn corespunzătoare registrelor utilizate pentru a seta limita superioară de numărare. Dacă întreruperea este activată, atunci rutina de întrerupere poate fi utilizată pentru a actualiza limita superioară de numărare. Totuși, setarea valorii superioare de numărare aproape de valoarea limită de numărare scăzută atunci când contorul rulează fără prescalare sau cu o valoare scăzută de prescalare trebuie făcută cu extremă precauție, deoarece nu există tamponare dublă în modul CTC. Dacă valoarea scrisă în OCRnA sau ICRn este mai mică decât valoarea curentă a TCNTn, atunci contorul de potrivire se va reseta când atinge valoarea maximă (0xFFFF), apoi se va reseta la 0x0000 și atinge noua valoare a OCRnA sau ICRn. În multe cazuri, această situație nu este de dorit. Alternativ, poate fi utilizat modul rapid PWM, unde registrul OCRnA determină limita superioară a numărului (WGMn3-0 = 0b1111), deoarece. în acest caz OCRnA este tamponat dublu.

Pentru a genera un semnal în modul CTC, ieșirea OCnA poate fi utilizată pentru a schimba nivelul logic la fiecare potrivire prin setarea modului de comutare (COMnA1, COMnA0 = 0b01). Valoarea OCnA va fi prezentă pe un pin de port numai dacă direcția de ieșire este setată pentru acel pin. Frecvența maximă a semnalului generat este fOC0 = fclk_I/O/2 dacă OCRnA = 0x0000. Pentru alte valori ale OCRn, frecvența semnalului generat poate fi determinată prin formula:

unde variabila N specifică factorul de diviziune al prescalerului (1, 8, 32, 64, 128, 256 sau 1024).

La fel ca și pentru funcționarea normală, indicatorul TOV0 este setat pe același ciclu de ceas atunci când valoarea sa se schimbă de la 0xFFFF la 0x0000.

Mod rapid PWM (FAST PWM)

Modul Fast Pulse Width Modulation (PWM) (WGMn3-0 = 0b0101, 0b0110, 0b0111, 0b1110, 0b1111) este conceput pentru a genera impulsuri PWM de înaltă frecvență. Spre deosebire de alte moduri de operare, acesta folosește funcționarea contor unidirecțională. Contul se desfășoară în direcția de la limita inferioară spre limita superioară a contului.

Dacă este setat modul de ieșire fără inversare, atunci când TCNTn și OCRnx se potrivesc, semnalul OCnx este setat, iar la limita superioară a numărului este resetat. Dacă este specificat modul de inversare, ieșirea OCnx este resetată la o potrivire și setată la limita mare de numărare. Datorită numărării unidirecționale, frecvența de operare pentru acest mod este de două ori mai mare în comparație cu modul PWM corectat de fază, care folosește contorizarea bidirecțională. Capacitatea de a genera semnale PWM de înaltă frecvență face ca utilizarea acestui mod să fie utilă în sarcinile de stabilizare a puterii, rectificare și conversie digital-analogică. Înaltă frecvență, în același timp, permite utilizarea elementelor externe de dimensiuni fizice mici (inductori, condensatori), reducând astfel costul total al sistemului.

Rezoluția PWM poate fi fixată pe 8, 9 sau 10 biți sau setată de registrul ICRn sau OCRnA, dar nu mai puțin de 2 biți (ICRn sau OCRnA = 0x0003) și nu mai mult de 16 biți (ICRn sau OCRnA = 0xFFFF). Rezoluția PWM la o anumită valoare limită superioară (UP) este calculată după cum urmează:

În modul PWM rapid, contorul este incrementat până când valoarea sa se potrivește cu una dintre valorile fixe 0x00FF, 0x01FF sau 0x03FF (dacă WGMn3:0 = 0b0101, 0b0110, sau respectiv 0b0111), valoarea în ICRn (dacă WGMn3: 0 = 0b1110), sau valoarea în OCRnA (dacă WGMn3:0 = 0b1111) și apoi resetat la următorul ciclu de ceas al temporizatorului. Diagrama de timp pentru modul rapid PWM este prezentată în Figura 2. Figura arată modul rapid PWM atunci când registrul OCRnA sau ICRn este utilizat pentru a seta limita superioară. Valoarea TCNTn pe diagrama de temporizare este afișată ca un grafic al funcției pentru a ilustra numărarea unidirecțională. Diagrama arată atât ieșirile PWM inversate, cât și cele neinversate. Linia orizontală scurtă arată punctele de pe graficul TCNTn unde valorile OCRnx și TCNTnx coincid. Indicatorul de întrerupere OCnx este setat atunci când are loc o potrivire.

Figura 2 - Diagrama de timp pentru modul rapid PWM

Indicatorul de depășire a cronometrului-contor (TOVn) este setat ori de câte ori contorul atinge limita superioară. În plus, steaguri OCnA sau ICFn pot fi setate pe același impuls de ceas împreună cu steagul TOVn dacă registrul OCRnA sau ICRn este utilizat pentru a seta limita superioară, respectiv. Dacă una dintre aceste întreruperi este activată, atunci o rutină de întrerupere poate actualiza limita superioară a numărului și poate compara pragurile.

Dacă valoarea limitei superioare a numărului se modifică, atunci trebuie îndeplinită condiția ca noua valoare a limitei superioare care se scrie să fie mai mare sau egală cu valorile din toate registrele pragului de comparație. În caz contrar, o potrivire între TCNTn și OCRnx nu va avea loc niciodată. Rețineți că atunci când utilizați valori limită superioară fixe, biții neutilizați sunt mascați la 0 atunci când scrieți în registrele OCRnx.

Mecanismul de modificare a registrului ICRn este diferit de OCRnA dacă este utilizat pentru a seta limita superioară. Registrul ICRn nu este dublu tamponat. Aceasta înseamnă că dacă o valoare mică este scrisă în ICRn în timp ce contorul rulează cu sau fără prescalare scăzută, există pericolul ca o valoare mai mică decât valoarea curentă a TCNTn să fie scrisă în ICRn. Ca urmare, meciul din fruntea scorului va fi ratat într-o astfel de situație. În acest caz, contorul va atinge valoarea maximă (0xFFFF), va reporni de la valoarea 0x0000 și abia atunci va avea loc o potrivire. Registrul OCRnA conține o schemă de tamponare dublă, astfel încât poate fi modificat în orice moment.

class="eliadunit">

Dacă este scrisă o adresă OCRnA, valoarea este de fapt plasată în registrul tampon OCRnA. Dacă există o potrivire între TCNTn și vârful numărului, atunci următorul ciclu de sincronizare a temporizatorului copiează registrul tampon în registrul prag de comparație OCRnA. Actualizarea registrului se realizează în același ciclu cu resetarea TCNTn și setarea flag-ului TOVn.

Se recomandă utilizarea registrului ICRn pentru a seta limita superioară dacă limita superioară de numărare este o constantă. În acest caz, registrul OCRnA este, de asemenea, eliberat pentru a genera un semnal PWM la ieșirea OCnA. Cu toate acestea, dacă frecvența PWM se schimbă dinamic (prin modificarea limitei superioare), atunci în acest caz este mai benefic să folosiți registrul OCRnA pentru a seta limita superioară, deoarece. suportă dubla tamponare.

În modul rapid PWM, blocurile de comparare vă permit să generați semnale PWM pe pinii OCnx. Dacă COMnx1:0 = 0b10, atunci PWM fără inversie de ieșire este setat, iar dacă COMnx1:0 = 0b11, atunci modul PWM cu inversiune de ieșire este setat (vezi tabelul 59). Valoarea reală a OCnx poate fi văzută pe pinul portului dacă este setată pe direcția de ieșire (DDR_OCnx). Semnalul PWM este generat prin setarea (resetarea) registrului OCnx atunci când are loc o potrivire între OCRnx și TCNTn și prin resetarea (setarea) registrului OCnx împreună cu resetarea contorului (tranziția limită înaltă la limita inferioară).

Frecvența PWM a semnalului de ieșire pentru o valoare dată a limitei superioare (UP) este determinată de expresia:

unde N este o variabilă care specifică valoarea factorului de prescalare (1, 8, 32, 64, 128, 256 sau 1024).

Scrierea valorilor limită în registrul OCRnx este asociată cu cazuri speciale în generarea de impulsuri PWM. Dacă OCRnx este setat egal cu limita inferioară (0x0000), atunci va apărea un impuls scurt la ieșire la fiecare (VP+1) al-lea ciclu de sincronizare a temporizatorului. Scrierea în OCRnx a unei valori egale cu limita superioară va seta un nivel de jurnal constant. 1 sau 0 la ieșire (în funcție de polaritatea semnalului de ieșire selectat cu bitul COMnx1:0).

Dacă este necesară generarea undelor pătrate (impulsuri dreptunghiulare cu un ciclu de lucru de 2 sau 50% umplere) de o frecvență înaltă, atunci este necesar să se utilizeze modul rapid PWM cu setarea biților COMnA1:0 = 0b01, ceea ce face ca nivelul logic să fie comutator (inversează) la ieșirea OCnA la fiecare meci. Acest lucru este aplicabil numai dacă OCRnA este utilizat pentru a seta limita superioară (WGMn3-0 =0b1111). Frecvența maximă a undei pătrate generată în acest caz este fOCnA = fclk_I/O/2 dacă OCRnA = 0x0000. Această caracteristică este aceeași cu comutarea OCnA în modul CTC, cu excepția tamponării duble care este disponibilă în modul rapid PWM.

Modul de modulare a lățimii de impuls cu corecție de fază (Phase Correct)

Modularea lățimii impulsului cu corecție de fază (PWM PK) (WGMn3-0 = 0b0001, 0b010, 0b0011, 0b1010 sau 0b1011) este proiectată pentru a genera un semnal PWM corectat de fază cu rezoluție înaltă. Modul PWM FC se bazează pe funcționarea temporizatorului-contor bidirecțională. Contorul parcurge contorizarea de la limita inferioară (0x0000) la limita superioară și apoi înapoi de la limita superioară la limita inferioară. Dacă este setat modul de ieșire a modelului de impuls fără inversare, atunci ieșirea OCnx este resetată/setată atunci când valorile TCNTn și OCRnx se potrivesc în timpul numărării sus/în jos. Dacă este setat modul de ieșire inversă, atunci, dimpotrivă, în timpul numărării înainte are loc setarea, iar în timpul numărării inverse, ieșirea OCnx este resetată. La funcționarea bidirecțională, frecvența maximă a semnalului PWM este mai mică decât la funcționarea unidirecțională, cu toate acestea, datorită unei asemenea caracteristici precum simetria în modurile PWM cu funcționare bidirecțională, aceste moduri sunt de preferat să fie utilizate atunci când se rezolvă problemele de control al unității.

Rezoluția PWM în acest mod poate fi fie fixă ​​(8, 9 sau 10 biți), fie setată folosind registrul ICRn sau OCRnA. Rezoluția minimă este de 2 biți (ICRn sau OCRnA = 0x0003), iar cea maximă este de 16 biți (ICRn sau OCRnA = 0xFFFF). Dacă este setată limita superioară, atunci rezoluția PWM în acest mod este determinată după cum urmează:

În modul PWM FC, contorul crește până când atinge una dintre valorile fixe 0x00FF, 0x01FF sau 0x03FF (respectiv pentru WGMn3-0 = 0b0001, 0b0010 sau 0b0011), precum și o valoare egală cu ICRn (dacă WGMn3-0) = 0b1010) sau OCRnA (dacă WGMn3 :0 = 0b1011). În plus, când se atinge limita superioară, contorul schimbă direcția de numărare. Valoarea TCNTn rămâne egală cu limita superioară pentru un ciclu de ceas al temporizatorului. Diagrama de timp pentru modul PWM FC este prezentată în Figura 3. Figura arată modul PWM FC folosind registrul OCRnA sau ICRn pentru a seta limita superioară. Starea TCNTn este prezentată ca un grafic al funcției pentru a ilustra bidirecționalitatea numărării. Figura arată atât ieșirea PWM neinversată, cât și cea inversată. Liniile orizontale scurte indică punctele din graficul de schimbare TCNTn în care apare o potrivire cu valoarea OCRnx. Indicatorul de întrerupere OCnx este setat atunci când are loc o potrivire.

Figura 3 - Diagrama de timp pentru modul PWM FC

Indicatorul de depășire a cronometrului-contor (TOVn) este setat ori de câte ori contorul atinge limita inferioară. Dacă registrul OCRnA sau ICRn este utilizat pentru a seta limita superioară, atunci flag-ul OCnA sau ICFn este setat în mod corespunzător pe același impuls de ceas pe care registrul OCRnx a fost actualizat din registrul tampon (în partea de sus a numărului). Indicatoarele de întrerupere pot fi folosite pentru a genera o întrerupere atunci când contorul atinge o limită inferioară sau superioară.

Când modificați valoarea limitei superioare de numărare, trebuie să vă asigurați că aceasta este mai mare sau egală cu valorile din toate registrele de comparație. În caz contrar, o potrivire între TCNTn și OCRnx nu va avea loc niciodată. Rețineți că atunci când utilizați valori fixe pentru limita superioară de numărare, biții neutilizați sunt setați la zero atunci când scrieți în registrele OCRnx. A treia perioadă din Figura 53 ilustrează cazul în care o modificare dinamică a limitei superioare a numărului duce la generarea unui impuls asimetric. Această caracteristică se bazează pe timpul de actualizare a registrului OCRnx. Deoarece actualizarea OCRnx are loc în partea de sus a numărului, perioada PWM începe și se termină în partea de sus a numărului. Aceasta implică faptul că durata numărării în jos este determinată de valoarea limită superioară anterioară, iar durata numărării anticipate este determinată de noua valoare limită superioară. Dacă aceste două valori sunt diferite, atunci și durata numărării înainte și înapoi va fi diferită. Diferența de durată duce la asimetria impulsurilor de ieșire.

Dacă sarcina este de a modifica limita superioară în timp ce contorul rulează, atunci în locul acestui mod se recomandă utilizarea modului PWM FCH (corecție de fază și frecvență). Dacă se utilizează o valoare limită superioară statică, atunci practic nu există nicio diferență între aceste moduri.

În modul PWM FC, blocurile de comparare vă permit să generați semnale PWM pe pinii OCnx. Dacă setați COMnx1:0 = 0b10, atunci ieșirea PWM va fi fără inversare, iar dacă COMnx1:0=0b11, atunci cu inversare. Valoarea reală OCnx poate fi observată pe un pin de port dacă direcția de ieșire (DDR_OCnx) este setată în registrul de direcție a datelor pentru acel pin de port. Semnalul PWM este generat prin setarea (resetarea) registrului OCnx atunci când valorile OCRnx și TCNTn se potrivesc în timpul numărării, și prin ștergerea (setarea) registrului OCnx la potrivirea dintre OCRnx și TCNTn în timpul numărării. Frecvența rezultată a semnalului PWM în modul PWM FC la o limită superioară dată (UP) poate fi calculată folosind următoarea expresie:

Scrierea valorilor limită în registrul OCRnx se datorează unor cazuri speciale în generarea de semnale PWM în modul PWM FK. Dacă setați modul PWM fără inversare și setați OCRnx egal cu limita inferioară, atunci ieșirea va fi setată continuu la log. 0, iar dacă este egal cu limita superioară, atunci jurnalul este prezent constant la ieșire. 1. Pentru PWM cu inversare, nivelurile indicate trebuie înlocuite cu cele opuse.

Dacă setați să utilizați OCnA ca limită superioară (WGMn3:0 = 0b1011) și setați COMnA1:0 =0b01, o undă pătrată va fi generată la ieșirea lui OCnA.

Modul de modulare a lățimii impulsului cu corecție de fază și frecvență (Corect de fază și frecvență)

Modularea lățimii impulsului cu corecție de fază și frecvență (PWM PFC) (WGMn3-0 = 0b1000 sau 0b1001) este proiectată pentru a genera impulsuri PWM de înaltă rezoluție cu corecție de fază și frecvență. Pe lângă modul PWM FC, modul PWM FC se bazează pe funcționarea bidirecțională a contorului. Contorul contorizează ciclic de la limita inferioară (0x0000) la limita superioară, apoi înapoi de la limita superioară la limita inferioară. Dacă este setat modul PWM fără inversare, ieșirea OCnx este resetată dacă apare o potrivire între TCNTn și OCRnx în timpul numărării și este setată dacă apare o potrivire în timpul numărării inverse. În modul inversare, operația este inversă. Funcționarea bidirecțională, în comparație cu funcționarea unidirecțională, este asociată cu generarea de frecvențe inferioare. Cu toate acestea, datorită simetriei în modurile PWM cu numărare bidirecțională, utilizarea lor este de preferat în sarcinile de control al unității.

Principala diferență dintre modurile PWM FC și PWM PFC este atunci când registrul OCRnx este actualizat din registrul tampon OCRnx (vezi Figura 3 și Figura 4).

Rezoluția PWM în acest mod poate fi setată folosind registrul ICRn sau OCRnA. Rezoluția minimă este de 2 biți (ICRn sau OCRnA = 0x0003) și rezoluția maximă este de 16 biți (ICRn sau OCRnA = 0xFFFF). Rezoluția PWM în biți poate fi calculată folosind următoarea expresie:

În modul PWM LFC, contorul crește până când se potrivește cu valoarea din ICRn (WGMn3:0 = 0b1000) sau OCRnA (WGMn3:0 = 0b1001). Aceasta înseamnă atingerea vârfului numărării, după care are loc o schimbare în direcția numărării. Valoarea TCNTn rămâne egală cu partea de sus a numărului pentru un ciclu de ceas al ceasului cronometru. Diagrama de timp pentru modul PWM PFC este prezentată în Figura 54. Figura arată modul PWM PFC atunci când vârful numărului este stabilit de registrul OCRnA sau ICRn. Valoarea TCNTn este afișată ca un grafic al funcției pentru a ilustra bidirecționalitatea numărării. Diagrama arată atât ieșirile PWM fără inversare, cât și cele inversoare. Liniile orizontale scurte indică punctele din graficul TCNTn în care apare o potrivire între OCRnx și TCNTn. Indicatorul de întrerupere OCnx este setat după ce apare o potrivire.

Figura 4 - Diagrama de timp a modului PWM cu corecție de fază și frecvență

Indicatorul Timer-Counter Overflow (TOVn) este setat pe același ciclu în care registrele au fost actualizate cu valoarea din registrul tampon (la limita de numărare scăzută). Dacă registrul OCRnA sau ICRn este utilizat pentru a seta limita superioară, atunci când contorul atinge limita superioară, este setat indicatorul OCnA sau ICFn, respectiv. Indicatoarele de întrerupere pot fi utilizate pentru a genera o întrerupere atunci când contorul atinge o limită superioară sau inferioară.

Când modificați limita superioară, trebuie să vă asigurați că noua valoare este mai mare sau egală cu valorile din toate registrele pragului de comparație. În caz contrar, dacă valoarea limită superioară este mai mică decât oricare dintre valorile registrului de prag de comparare, nu va avea loc niciodată o potrivire între TCNTn și OCRnx.

Figura 4 arată că, spre deosebire de modul PWM FC, semnalul de ieșire generat este simetric pe toate perioadele. Deoarece registrele OCRnx sunt actualizate la limita de numărare scăzută, timpii de numărare ascendent și descendent sunt întotdeauna egali. Ca urmare, impulsurile de ieșire au o formă simetrică și, în consecință, o frecvență corectată.

Utilizarea registrului ICRn pentru a seta limita superioară este recomandată dacă valoarea limită superioară este o constantă. În acest caz, registrul OCRnA este de asemenea eliberat pentru modularea lățimii impulsurilor pe pinul OCnA. Cu toate acestea, dacă doriți să modificați dinamic frecvența PWM prin modificarea limitei superioare, atunci este recomandat să utilizați registrul OCRnA pentru a seta limita superioară datorită tamponării sale duble.

În modul PWM PFC, comparatoarele vă permit să generați impulsuri PWM pe pinul OCnx. Dacă COMnx1:0 = 0b10, atunci este setată o ieșire PWM non-inversoare, iar dacă COMnx1:0=0b11, atunci una inversoare (vezi tabelul 60). Valoarea OCnx va fi prezentă numai pe pinul portului corespunzător dacă este setată pe o direcție de ieșire. Semnalul PWM este generat prin setarea (ștergerea) registrului OCnx pe o potrivire între OCRnx și TCNTn în timpul numărării și resetarea (setarea) registrului OCnx pe o potrivire între OCRnx și TCNTn în timpul numărării inverse. Frecvența PWM în acest mod cu o limită superioară dată (VP) a numărului este determinată după cum urmează:

unde N este factorul de diviziune al prescalerului (1, 8, 32, 64, 128, 256 sau 1024).

Scrierea valorilor limită în registrul OCRnx este asociată cu cazuri speciale în generarea de semnale PWM în acest mod. Dacă setați OCRnx egal cu limita inferioară (0x0000), atunci în modul fără inversare ieșirea va fi constant scăzută, iar când scrieți o valoare egală cu limita superioară, ieșirea va fi permanent ridicată. În modul inversare, nivelurile date vor fi opuse.

Dacă OCRnA este utilizat pentru a seta limita superioară (WGMn3:0 = 0b1001) și COMnA1:0 = 0b01, atunci va fi generată o undă pătrată la ieșirea OCnA.

Implementarea hardware a PWM oferă avantaje necondiționate față de cea software, deoarece descarcă procesorul atât cu cod inutil, cât și cu timp greoi pentru întreținerea acestuia și oferă, de asemenea, mai multe oportunități de utilizare a PWM. Este suficient să inițializați cronometrul/contorul (puneți valorile necesare în registrele folosite de cronometru/contor) deoarece cronometrul/contorul poate funcționa independent de procesor, respectiv, procesorul poate face alte sarcini, doar uneori rotindu-se la momentul necesar pentru a regla sau schimba modul sau pentru a primi rezultate de la cronometru/contor.

Descrierea steagurilor de întrerupere

T1 poate genera o întrerupere atunci când:

  1. depășirea registrului de numărare TCNT1;
  2. când registrul de numărare TCNT1 și registrul de comparație OCR1A și OCR1B sunt egale (separat pentru fiecare registru);
  3. în timp ce se salvează registrul de numărare în registrul de captare ICR1.

T2 poate genera o întrerupere atunci când:

  1. depășirea registrului de numărare TCNT2;
  2. când registrul de numărare TCNT2 și registrul de comparație OCR2 sunt egale.

Flag-urile pentru toate întreruperile sunt în registrul TIFR, iar întreruperile de activare/dezactivare sunt în registrul TIMSK.

Biți în registrul TIMSK
Inregistreaza-te7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0* TOIE0
  • OCIE2- Flag pentru activarea întreruperii la evenimentul „coincidență” a temporizatorului/contorului T2
  • TOIE2- Indicatorul de activare a întreruperii temporizatorului/contorului de depășire T2
  • TICIE1- Flag pentru activarea întreruperii la evenimentul „captură” a temporizatorului/contorului T1
  • OCIE1A- Flag pentru activarea întreruperii la evenimentul „coincidență A” a temporizatorului/contorului T1
  • OCIE1B- Flag pentru activarea întreruperii la evenimentul „coincidență B” a temporizatorului/contorului T1
  • TOIE1- Indicatorul de activare a întreruperii temporizatorului/contorului de depășire T1
  • OCIE0*- Flag pentru activarea întreruperii la evenimentul „coincidență” a temporizatorului/contorului T0 (* - absent în ATmega8)
  • TOIE0- Timer/Counter Overflow Interrupt Enable Flag T0
  • OCF2- Indicatorul de întrerupere a evenimentului „coincidență” a cronometrului/contorului T2
  • TOV2- Indicatorul de întrerupere a temporizatorului/contorului de depășire T2
  • ICF1- Indicatorul de întrerupere la evenimentul „captură” al cronometrului/contorului T1
  • OCF1A- Indicatorul de întrerupere a cronometrului/contorului evenimentului „coincidență A” T1
  • OCF1B- Indicatorul de întrerupere a cronometrului/contorului evenimentului „coincidență B” T1
  • TOV1- Timer/Counter Overflow Interrupt Flag T1
  • OCF0- Indicatorul de întrerupere a evenimentului „coincidență” a temporizatorului/contorului T0
  • TOV0- Indicatorul de întrerupere a temporizatorului/contorului de depășire T0

Descrierea funcționării temporizatorului / contorului T1 în controlerul ATmega8 / 16

Temporizatorul/contorul de șaisprezece biți T1 poate fi utilizat pentru a forma intervale de timp, pentru a număra numărul de semnale externe și pentru a genera semnale PWM de diferite cicluri de lucru și durate pe pinii OC1A și OC1B. În plus, pe un semnal extern de la pinul ICP1 sau de la un comparator analog, T1 își poate salva starea curentă într-un registru de captură separat ICR1.

Biți de înregistrare TCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
Inregistreaza-te7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 ICES1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1:H R/V R/V R/V R/V R/V R/V R/V R/V
TCNT1:L R/V R/V R/V R/V R/V R/V R/V R/V
OCR1A:H R/V R/V R/V R/V R/V R/V R/V R/V
OCR1A:L R/V R/V R/V R/V R/V R/V R/V R/V
OCR1B:H R/V R/V R/V R/V R/V R/V R/V R/V
OCR1B:L R/V R/V R/V R/V R/V R/V R/V R/V
ICR1:H R/V R/V R/V R/V R/V R/V R/V R/V
ICR1:L R/V R/V R/V R/V R/V R/V R/V R/V

Fiecare registru de 16 biți este localizat fizic în două registre de 8 biți, așa că la citirea unei înregistrări în ele trebuie efectuate două operații. La scriere se încarcă mai întâi octetul cel mai mare, apoi cel mai tânăr, la citire, dimpotrivă, se citește mai întâi octetul cel mai tânăr, apoi cel mai vechi.

TCCR1A:TCCR1B- Registre de control temporizator/contor de 8 biți T1

TCNT1- Temporizator/contor registru T1 pe 16 biți. În funcție de modul de funcționare, conținutul acestui registru este pus la zero, crește (crește cu 1) sau decrește (scădea cu 1) cu fiecare impuls de cronometru/contor.

OCR1A:OCR1B- registre de comparație pe 16 biți

ICR1- Registrul de captare pe 16 biți, stochează valoarea TCNT1 atunci când o margine activă este aplicată pinului ICP1 sau de la un comparator.

Atribuire de biți

COM1A1:COM1A0:COM1B1:COM1B0- Acești biți determină comportamentul ieșirii OC1A:OC1B atunci când valoarea registrului de contor TCNT1 și a registrului de comparație OCR1A:OCR1B se potrivesc

FOC1A:FOC1B- Acești biți sunt utilizați pentru a forța o schimbare a stării ieșirii OC1A:OC1B

ICNC1- Bit de control al circuitului de perturbare, dacă bitul este „0” captura va fi pe prima margine activă, dacă „1” captarea va fi după cea de-a patra eșantion identică a semnalului de captare.

ICES1- Bitul de selecție a muchiei active, dacă valoarea sa este „0”, stocarea registrului de numărare TCNT1 în registrul de captare OCR1 va fi pe frontul descendent al semnalului, dacă „1” este în creștere.

WGM13:WGM12:WGM11:WGM10- Acești biți determină modul de funcționare al temporizatorului/contorului T1

CS22:CS21:C20- Biți care determină sursa semnalului de cronometru/contor ceas T1.

Selectarea modului de funcționare al temporizatorului / contorului T1
WGM13WGM12WGM11WGM10Mod de lucruModul de cont (TOP)
0 0 0 0 Normal $FFFF
0 0 0 1 PWM corect de fază

8 biți

00 $ FF
0 0 1 0 PWM corect de fază

9 biți

01 $ FF
0 0 1 1 PWM corect de fază

10 biți

03 $ FF
0 1 0 0 CTC (resetat la meci) OCR1A
0 1 0 1 PWM rapid

8 biți

00 $ FF
0 1 1 0 PWM rapid

9 biți

01 $ FF
0 1 1 1 PWM rapid

10 biți

03 $ FF
1 0 0 0 ICR1
1 0 0 1 Phase and Freguensy Correct PWM OCR1A
1 0 1 0 PWM corect de fază ICR1
1 0 1 1 PWM corect de fază OCR1A
1 1 0 0 CTC (resetat la meci) ICR1
1 1 0 1 rezervat *
1 1 1 0 PWM rapid ICR1
1 1 1 1 PWM rapid OCR1A

Selectarea sursei ceasului

Mod normal

Cel mai simplu mod de operare este T1. Pentru fiecare impuls al semnalului de ceas, registrul de numărare TCNT1 este incrementat (incrementând valoarea cu 1). La trecerea prin valoarea $FFFF a modulului de contor (TOP), are loc o depășire și următorul ciclu începe să conteze de la valoarea $0000, în același moment se setează flag TOV1=1 în registrul TIFR și poate fi o întrerupere. generat dacă este setat indicatorul TOIE1=1 din registrul TIMSK. Pentru a genera un semnal cu o anumită frecvență în acest mod, este necesar să scrieți în biții COM1A1=0:COM1A0=1 pentru ieșirea OC1A sau COM1B1=0:COM1B0=1 pentru ieșirea OC1B a controlerului.

În plus, pentru fiecare ciclu, se compară registrul de numărare TCNT1 și registrul de comparație OCR1A:OCR1B, dacă potrivirea este setată, este setat indicatorul de întrerupere OCF1A=1:OCF1B=1, iar dacă bitul OCIE1A=1:OCIE1B= 1 din registrul TIMSK, este generată o întrerupere. În același timp, starea pinului OC1A:OC1B poate fi schimbată în funcție de setările biților COM1A1:COM1A0:COM1B1:COM1B0.

Modul CTC (resetat la meci)

În acest mod, T1 funcționează pe același principiu ca în modul Normal. Diferența este că valoarea maximă posibilă a registrului de contor TCNT1 este limitată de valoarea registrului de comparație OCR1A sau ICR1 (vezi tabelul de selecție a modului cronometru/contor). Când TCNT1 atinge OCR1A sau ICR1, valoarea TCNT1 este resetată la TCNT1=$0000 În același timp este setat flag TOV1=1.

Mod PWM rapid (PWM rapid)

Cu acest mod, puteți genera un semnal PWM de înaltă frecvență. Principiul și procedura de funcționare nu diferă de modul Normal, cu excepția prezenței dublei tamponări a registrului OCR1A:OCR1B, care elimină apariția impulsurilor de semnal asimetrice și diferă, de asemenea, în comportamentul pinilor OS1A:OC1B ( Vezi tabelul).


Mod Phase Correct PWM (PWM cu fază precisă)

Diferența dintre acest mod și cele anterioare este că registrul de numărare funcționează ca un numărător reversibil. Deoarece acest mod este recomandat de Atmel ca fiind cel mai potrivit pentru reglarea motoarelor, îl vom lua în considerare mai detaliat. Când registrul de numărare TCNT1 atinge valoarea modulului de numărare (TOP) (sau valoarea registrului ICR1 sau valoarea registrului OCR1A, vezi tabelul de selecție a modului cronometru/contor), direcția de numărare este inversată. Când registrul de numărare TCNT1 atinge valoarea minimă ($0000), se schimbă și direcția de numărare și în același moment este setat indicatorul de întrerupere TOV1 al registrului TIFR. De asemenea, dacă conținutul registrului de numărare TCNT1 și al registrului de comparație OCR1A:OCR1B sunt egale, se setează pavilionul OCF1A:OCF1B al registrului TIFR și se modifică starea ieșirii OC1A:OC1B, conform tabelului.

Pentru a evita emisiile asimetrice în timpul scrierii unei valori în registrul OCR1A:OCR1B, acest mod implementează tamponarea dublă de scriere. Din acest motiv, modificarea efectivă a valorii registrului se modifică atunci când registrul contorului TCNT1 atinge valoarea modulului contorului (TOP) (sau valoarea registrului ICR1 sau valoarea registrului OCR1A, vezi cronometrul). /tabelul de selecție a modului de contor). Prin urmare, la început, când cronometrul/contorul este inițializat, ieșirea OC1A:OC1B nu își va schimba starea la o potrivire până când registrul atinge valoarea (TOP).

O sarcină: Să dezvoltăm un program pentru controlul luminozității unei lămpi cu incandescență de 12 volți folosind PWM. Apăsând butonul „Mai mult” crește luminozitatea lămpii, apăsând butonul „Mai puțin” scade luminozitatea. Diagrama viitorului nostru dispozitiv este prezentată în figură. Ca de obicei, folosim microcontrolerul Atmega8, care va fi tactat de la un oscilator intern de 4MHz. De fapt, obținem un dimmer, aceste dispozitive sunt concepute pentru a regla luminozitatea corpurilor de iluminat. Acum cele mai răspândite variatoare LED.

Pentru simplitate, puteți conecta și un LED la circuitul nostru, dar cu un bec va fi mai clar. Butoane conectate la pini PD0, PD1. Conectam sarcina la ieșire PB1(OC1A) printr-un rezistor și un tranzistor cu efect de câmp MOSFET, care va funcționa pentru noi ca o cheie (în modul cheie). Tranzistorul cu efect de câmp este de preferat deoarece poarta sa este izolată de circuitul de putere iar controlul este realizat printr-un câmp electric, iar curentul de control ajunge la microamperi. Acest lucru permite, folosind unul sau doi tranzistori, să controlați o sarcină de putere uriașă (până la zeci de amperi și zeci până la sute de volți) fără a încărca microcontrolerul. Avand in vedere si faptul ca tranzistoarele cu efect de camp pot fi conectate in paralel (spre deosebire de cele bipolare), se poate obtine o cascada si mai puternica cu sute de amperi.

Acum să ne dăm seama cum implementează microcontrolerul PWM și să scriem un program. După cum am menționat mai devreme, MK-ul nostru are 3 cronometre și toate pot funcționa în modul PWM. Vom lucra cu un cronometru/contor pe 16 biți. Biți WGM13-10 configurați cronometrul nostru pentru a funcționa FastPWM cu o limită superioară de numărare ICR1. Principiul programului este acesta, cronometrul nostru numără de la 0 la 65535 (0xFFFF), în registru ICR1 introducem numărul 255, aceasta va fi limita superioară a numărului de cronometru (TOP), frecvența semnalului PWM va fi constantă. De asemenea, cronometrul nostru este configurat astfel încât atunci când registrul de numărare și registrul de comparație (TCNT1 = OCR1A) se potrivesc, ieșirea controlerului va comuta OC1A. Ciclul de lucru PWM poate fi modificat prin scrierea în registrul de comparație OCR1A un anumit număr de la 0 la 255, cu cât acest număr este mai mare, cu atât ciclul de funcționare este mai mare, cu atât lampa va arde mai luminos. În funcție de ce buton este apăsat, variabila se modifică. i, iar apoi este scris în registru OCR1A.

Textul integral al programului este prezentat mai jos. Comentariile descriu funcționarea programului mai detaliat.

/*** Lecția #8. Generarea semnalelor PWM***/ #include #include int main(void) ( unsigned int i=0; //define i variabila /***Setarea porturilor I/O***/ PORTB = 0x00; DDRB |= (1<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0) // Ciclul de lucru PWM se modifică de la 255 la 0 ( i--; // decrementează i cu unu (acesta poate fi și scris) OCR1A = i; // scrie variabila în registrul de comparație _delay_ms(30); // întârziere 30 ms)))))

Atenţie!În primul rând, furnizăm energie microcontrolerului, apoi trebuie să vă asigurați că tranzistorul este conectat la ieșirea MK și abia apoi aplicați putere circuitului cu lampa și tranzistorul cu efect de câmp. În caz contrar, puteți arde tranzistorul. Faptul este că, în starea oprită, „picioarele” MK „atârnă în aer” - nu sunt conectate la nimic și apar interferențe asupra lor. Aceste pickup-uri slabe sunt suficiente pentru a deschide parțial un tranzistor cu efect de câmp foarte sensibil. Apoi rezistența sa dintre scurgere și sursă va scădea de la câțiva megaohmi la câțiva ohmi sau fracțiuni de ohm, iar un curent mare va curge prin ea către lampă. Dar tranzistorul nu se va deschide complet, deoarece pentru aceasta nu trebuie să aplicați pickup-uri de 1-3 V pe poartă, ci stabil de 5 V, iar rezistența sa va fi mult mai mare decât minimul. Acest lucru va duce la eliberarea unei cantități mari de căldură pe el și va fuma și, eventual, se va arde.

În general, cronometrul are un registru de comparație OCR** iar când valoarea din cronometru se potrivește cu valoarea registrului de comparație OCR** Se pot intampla 2 lucruri:

  • Întrerupe
  • Schimbarea stării unui pin de comparație extern OC**

Acum ne putem configura PWM când contorul atinge valoarea OCR** tensiune pe piciorul pe care l-am ales OC**schimbați de la 5 la 0. Când cronometrul numără până la sfârșit și începe numărarea, mai întâi schimbați tensiunea de la 0 la 5, vom avea impulsuri dreptunghiulare la ieșire

Există 3 moduri de funcționarePWM

STS(resetare la meci) - Acesta poate fi apelat CHIM semnal modelat cu frecvența pulsului când temporizatorul numără până la valoare OCR** se resetează și își schimbă valoarea OC**spre opus. Astfel ciclul de activitate PWMîntotdeauna la fel.

Acesta este folosit atunci când trebuie să numărați perioade exacte sau să generați întreruperi după un anumit timp.

PWM rapid(PWM rapid) - contorul numără de la 0 la 255, după care este resetat la 0.

Când valoarea temporizatorului se potrivește OCR** ieșirea corespunzătoare este resetată la 0, setată la 1 la resetare.

Cel mai adesea folosit ca obișnuit PWM.

PWM corect de fază(Phase Precise PWM) - În acest mod, contorul numără de la 0 la 255 și apoi numără invers până la zero. La primul meci cu OCR** ieșirea este resetată la 0, cu 2 potriviri (când contorul se întoarce), setat la 1.

Sunt folosite pentru a nu pierde faza la schimbarea ciclului de lucru.



Dacă vrem să lucrăm cu rezultatul OC1A pune bătăile înăuntru COM1A1 COM1A0
În general, „/” înseamnă SAU. TCNT1= OCR1A pentru PWM la ieșire OC1A

Mod de funcționare temporizator/contor- mod de funcționare cronometru/contor.

Top- Valoarea TCNT1 la care este comutată valoarea de ieșire OC**.

Steagul TOV1 activat- la ce valori este setat bitul de registru GIFR

Selectăm din ultimul tabel modul de care avem nevoie, nu ne uităm Top. Din cele 2 tabele, selectați oricare dintre ultimele 2 opțiuni. Rămâne doar să aranjați biții necesari în registre.

#define F_CPU 8000000UL #include #include int main() ( DDRD = 0xFF; OCR1A=0xC0; // Comparați cu această valoare OCR1B=0x40; //Configurați PWM și cronometrul TCCR1A|=(1)<CS10 setat la 1, el numără cu frecvența MK despre cum să setați frecvența cronometrului

Unul dintre cele mai bune compilatoare pentru un limbaj asemănător Basic pentru seria AVR de microcontrolere pe opt biți.

Mediul de dezvoltare FastAVR este caracterizat de o interfață convenabilă și atentă și include un editor, un asamblator, un compilator și un programator de microcontroler. Aplicația are evidențierea comenzilor, o interfață prietenoasă și multe alte soluții concepute pentru a facilita procesul de creare și depanare a programelor. FastAVR folosește adresarea pe opt în loc de șaisprezece biți și se compară favorabil cu alte compilatoare, producând cod extrem de compact (în special pentru controlere cu mai puțin de 256 de octeți de RAM). În plus, în program sunt încorporate funcții suplimentare ale unui generator de caractere pentru LCD, un calculator cronometru și un terminal. Lista de dispozitive de microcontroler acceptate de la AVR include seriile: 2313, 2323, 2333, 4433, 8515, 8535, ATiny13, ATiny26, ATmega163, Atmega8, Atmega16, Atmega32, ATmega124 și multe altele.

Limbajul folosit în FastAVR constă în comenzi de bază familiare, mult îmbunătățite cu funcții utile suplimentare (I2C, 1-Wire, LCD și altele). Compilatorul acceptă programarea structurată, ceea ce îmbunătățește lizibilitatea programelor. Această aplicație compilează programul situat în fereastra editorului activ în codul de asamblare standard AVR utilizând asamblatorul gratuit Atmel (parte din . Ca urmare a compilării și dacă nu există erori în textul sursă, este creat un fișier cu extensia *.asm. Mediul de programare scoate codul generat în asamblator, care este util pentru dezvoltatorii experimentați.

FastAVR poate folosi practic orice programator existent în circuit pentru controlerele AVR conectate la un port serial sau paralel. Codul sursă al programului este tastat ca text normal sub formă de simboluri în editorul încorporat al acestui software. Pe lângă afișarea textului sursă, editorul FastAVR editează în mod independent programul, evidențiază comenzile, variabilele și alte date cu culoare. De asemenea, acceptă o capacitate comutabilă de a alinia blocuri de text. Codul programului poate fi vizualizat și editat în orice editor comun. Cu toate acestea, atunci când scrieți un program, trebuie să urmați o serie de reguli date de sintaxa FastAVR. De exemplu, în fiecare program, compilatorul trebuie să specifice tipul de controler utilizat, viteza de ceas și dimensiunea stivei de programe. Astfel de instrucțiuni speciale (metadirective) nu sunt convertite în cod de asamblare.

Deoarece familia de microcontrolere AVR stochează date și coduri în diferite zone ale memoriei, atunci când lucrează cu programul FastAVR, dezvoltatorii trebuie să specifice unde vor fi plasate datele în memorie. Compilatorul aranjează automat codul programului.

FastAVR a fost creat de Bojan Ivancic din Slovenia și este un produs al MicroDESIGN. Din păcate, autorul și-a abandonat proiectul, site-ul său nu funcționează, iar telefoanele de asistență nu răspund. Aplicația în sine nu a fost actualizată de mult timp și, ca urmare, compilatorul nu acceptă cele mai recente modele de controlere Atmel.

Programul FastAVR a fost plătit. Fără a introduce codul de înregistrare, mediul de dezvoltare începe doar în modul demo, care are limitări semnificative. Aplicația poate fi descărcată în prezent din linkul de mai jos. Ansamblul prezentat include cea mai recentă versiune de lucru a programului, fișiere de ajutor în limba engleză, exemple.

Acest produs a fost scris în engleză. Nu există nici un rusificator pentru asta.

FastAVR rulează sub Microsoft Windows. Aplicația funcționează corect în sistemele de operare 98SE, NT4, 2000 și XP.