Įeiti
Visos kompiuterių paslaptys pradedantiesiems ir profesionalams
  • Jei Python yra interpretuojamas, kas tai yra?
  • Kas yra RW2 failo plėtinys?
  • Kas yra VID failo plėtinys?
  • Kaip naudoti SD kortelę „Android“ įrenginyje „MicroSD Recovery Transcend“.
  • Kas yra JSON failo plėtinys?
  • Edukacinė programa: žemėlapių pasirinkimas navigatoriui
  • Programa Assembly kalba Algorithm Builder programinės įrangos aplinkoje. Tada suprojektuoto įrenginio veikimas buvo išbandytas „Proteus“ programinėje aplinkoje. AVR algoritmų kūrimo priemonė, darbo pradžia Grafinis surinkėjas AVR laikmačių programavimas n

    Programa Assembly kalba Algorithm Builder programinės įrangos aplinkoje.  Tada suprojektuoto įrenginio veikimas buvo išbandytas „Proteus“ programinėje aplinkoje.  AVR algoritmų kūrimo priemonė, darbo pradžia Grafinis surinkėjas AVR laikmačių programavimas n

    Manau, kad mūsų laikais nėra radijo mėgėjo, kuris niekada nebūtų susidūręs su mikrovaldikliais. Anksčiau ar vėliau, bet taip nutinka. Kai pirmą kartą pamačiau grandinę su mikrovaldikliu, iš karto uždariau naršyklės puslapį su mintimi: „O, aš vis tiek negaliu jo surinkti“. Tačiau laikas praėjo, atsirado vis daugiau grandinių, naudojančių mikrovaldiklius, ir aš pagaliau nusprendžiau pradėti. Tiesą sakant, viskas pasirodė ne taip sunku, kaip maniau.

    Pirmiausia išsiaiškinkime: kas vis dėlto yra mikrovaldiklis (MK)? Iš esmės tai yra miniatiūrinis kompiuteris, skirtas paprastoms užduotims atlikti. Viskas, kas reikalinga mikrovaldiklio veikimui, yra viename korpuse. Mikrovaldiklis turi įvairius periferinius įrenginius – įvesties/išvesties prievadus, laikmačius, ryšio sąsajas ir kt. Mikrovaldiklis turi trijų tipų atmintį: RAM (laisvosios kreipties atmintis), FlashROM (programinė atmintis), EEPROM (nelakioji atmintis).

    Pagrindinis skirtumas tarp mikrovaldiklio ir įprastos mikroschemos yra tas, kad mikrovaldiklis veikia ne pagal gamykloje įdiegtą standžią logiką, o yra užprogramuotas. Programa klasikiniu būdu parašyta specialioje kompiuterio aplinkoje viena iš programavimo kalbų, po to išverčiama į mašinų kalbą (kompiliuojama) ir įrašoma į valdiklio atmintį. Šiame kurse viskas bus kiek kitaip – ​​programa bus ne parašyta, o tiesiogine to žodžio prasme nubraižyta struktūrinės schemos pavidalu. Dėl šio požiūrio programa atrodo aiškesnė, o programos kūrimo laikas sutrumpėja 3-5 kartus, palyginti su klasikinėmis programavimo technikomis.

    Algorithm Builder – programavimo aplinka

    Algorithm Builder vykdo visą kūrimo ciklą, pradedant nuo įvedimo į algoritmą, įskaitant derinimo procesą ir baigiant programos įrašymu į atmintį.

    Pradėkime nuo trumpos programos sąsajos apžvalgos

    Pagrindinis meniu

    • Failas. Naudojamas norint atidaryti, išsaugoti, uždaryti projektus ir atskirus algoritmus, taip pat išeiti iš programos.
    • Redaguoti. Veiksmai, susiję su algoritmo redagavimu: iškirpti, kopijuoti, paryškinti ir pan.
    • Ekranas. Perjungimo algoritmas/lentelė su kintamaisiais (apie tai plačiau žemiau) + operacijų ir sąlygų šablonai.
    • Paieška. Nereikia čia aiškinti.
    • Elementai. Algoritmas sudarytas iš specialių elementų: Tekstas, viršūnė, laukas, etiketė, sąlyga, naudojamas (besąlyginis) perėjimo vektorius, tinkinimo priemonė. Su visais susipažinsime mokymo proceso metu. Meniu yra dar keli svarbūs elementai: Išjungti, makrokomandą, pertraukimus. Išjungti- šis komponentas nebus kompiliuojamas. Makro- sukurti makrokomandas. Pertraukia- yra visų mikrovaldiklio pertraukimų pavadinimų sąrašas. Apie šią funkciją sužinosite sekančiose pamokose, bet dabar pasakysiu tik tiek, kad tai itin svarbus ir reikalingas dalykas darbui.
    • Programa. Su programa susiję veiksmai – kompiliavimas (vertimas į mašinų kalbą), programos modeliavimas, nuskaitymo valdiklio atmintis (Flash ir EEPROM) ir kt.
    • Galimybės. Projekto ir aplinkos nustatymai.
    • ?. „Algoritm Builder“ informacija ir pagalba.

    Įrankių juosta

    Nereikia jokio paaiškinimo. Užvedus pelės žymeklį virš skydelio elementų, rodomi patarimai.

    Atviras projektas

    Čia yra ypatumas. Negalite atidaryti dviejų projektų vienu metu. Norėdami atidaryti/sukurti naują projektą, turite uždaryti senąjį. Atidarę projektą galite atidaryti/sukurti tik atskirą algoritmo failą. Projekto failo plėtinys yra .alp, o atskiro algoritmo failo plėtinys yra .alg

    Darbas su kintamaisiais ir konstantomis

    Jis suskirstytas į specialią lentelę (ją galite perjungti naudodami klavišą F12 arba per meniu, arba naudodami klavišą įrankių juostoje). Taigi pats algoritmas yra išlaisvintas nuo nereikalingų įrašų.

    Daugybė etikečių, kurių dėka galimi perėjimai iš vienos programos dalies į kitą, labai užgriozdina kodą ir prarandamas programos aiškumas. Algoritmų kūrimo priemonėje perėjimai yra daug lengvesni – naudojant rodyklę (vektorių). Tačiau taip pat galimi perėjimai pagal pavadintas etiketes.

    Programos veikimo modeliavimas

    Simuliatorius rodo visus pokyčius, vykstančius virtualiame mikrovaldiklyje. Norėdami patikrinti programos veikimą, jums net nereikia pirkti mikrovaldiklio! Modeliavimas gali būti atliekamas žingsnis po žingsnio (su funkcijomis arba be jų), iki nustatyto lūžio taško arba pasirinktoje srityje.

    Derinimas

    Algorithm Builder turi lusto derinimo sistemą (On Chip debug), kuri leidžia stebėti tikro mikrovaldiklio atminties turinį nurodytuose taškuose. Šiuo atveju ryšiui su kompiuteriu naudojama tik viena mikrovaldiklio kojelė ir vartotojo pasirinkimu. Monitoriaus derinimas gali būti taikomas beveik bet kuriam mikrovaldikliui. Tai yra debugWIRE protokolo programinės įrangos versija.

    Taigi kodėl Algorithm Builder mažai žinomas tarp radijo mėgėjų? Pirma, iki 2010 m. programa buvo mokama. Šiandien programinė įranga platinama visiškai laisvai. Antra, tai, kad programai trūksta oficialios paramos. Nerasite nė vieno gamintojo apnoto, kuris naudoja Builder. Šiai programai skirtus interneto išteklius galima suskaičiuoti ant vienos rankos pirštų.

    Apie tai verta šiek tiek pakalbėti reikalingos medžiagos ir įrankiai

    Pirmas dalykas, kurio jums reikia, yra lituoklis. Pagrindinis radijo mėgėjo įrankis. Lituoklio galia turi būti 30-60 W. Kodėl negali būti daugiau? Galingas lituoklis labiau įkaista ir pažeidžia lentos pėdsakus bei panaudotas dalis. Ir tai nėra taip patogu lituoti - toks lituoklis yra daug didesnis ir sunkesnis.

    Norint įkelti programą į mikrovaldiklį, kurio jums reikia programuotojas- Paprasčiausioje versijoje jis susideda tik iš kelių rezistorių ir diodų (vienam LPT ir COM prievadui). Jei kompiuteryje neturite COM arba LPT prievado, USB programuotoją galite užsisakyti adresu DealExtreame arba (Paieškos užklausa "avr programuotojas"; kainuoja apie 4-6 USD). Apie programuotojo pasirinkimą ir surinkimą parašysiu kitoje pamokoje.

    Skiriamieji bruožai:

    • Palaikomos operacinės sistemos: Windows 95/98/2000/NT/ME/XP
    • Licencija: nemokama
    • Sąsajos kalba: anglų, rusų
    • Programavimo kalbos: grafinis surinkėjas
    • Pagrindinės funkcijos:
      • grafinis programos kodo redaktorius
      • kompiliatorius
      • simuliatorius, skirtas įvesto algoritmo derinimui
      • programavimas per COM prievadą naudojant paprastą adapterį (7 rezistoriai, 3 diodai; diagramą žr. dokumentacijoje)
      • algoritmo derinimas mikroschemoje naudojant dar paprastesnį adapterį (1 arba 2 diodai, 2 arba 4 rezistoriai; žr. diagramos dokumentaciją)
    • Interneto palaikymo adresas: http://algrom.net/russian.html

    Apibūdinimas:

    Algorithm Builder yra nemokama aplinka (nemokamos programinės įrangos platinimo sąlygos), skirta AVR MK, kuri suteikia visą programinės įrangos kūrimo ciklą, įskaitant. etapai, tokie kaip algoritmo įvestis, derinimas ir programavimas grandinėje. Programos kūrimas gali būti vykdomas tiek surinkėjo lygiu, tiek makro lygiu, kuriame galima dirbti su kintamu savavališko ilgio kiekiu. Tai priartina programavimo galimybes prie aukšto lygio kalbos.

    Išskirtinis Algorithm Builder bruožas yra galimybė įvesti programą grafiškai, kaip algoritmas su medžio struktūra. Dėl to visa loginė programos struktūra tampa visiškai aiški. Šis programavimo metodas yra kuo artimesnis žmogaus suvokimo prigimčiai, todėl jį daug lengviau išmokti, palyginti su klasikiniu asembleriu. Numatomas programinės įrangos sukūrimo laikas, palyginti su klasikiniu surinkėju, sutrumpėja 3–5 kartus.

    Aplinka sukurta veikti su Windows 95/98/2000/NT/ME/XP. Normaliam redaktoriaus veikimui reikalingas „Courier“ šriftas.

    Failai atsisiųsti:

    • AT90 serija
      • AT90CAN128, AT90PWM3, AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S493US5AT40 B64, AT90USB82, AT 90USB128, AT90USB162
    • ATmega serija
      • ATmega8, ATmega16, ATmega32, ATmega48, ATmega64, ATmega88, ATmega103, ATmega128, ATmega161, ATmega162, ATmega163, ATmega164P, ATmega163ATmega16,3 ATmega325, ATmega328P, ATme ga603, ATmega640, ATmega644, ATmega644P, ATmega645, ATmega1280, ATmega1281 , ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega6450, ATmega8515, ATmega8535
    • ATtiny
      • ATtiny10, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny44, ATtiny45, ATtiny84, ATtiny45, ATtiny84, ATtinyATti2AT4,8,1,6,6,8 mažytis 2313

    4.Techniniai reikalavimai.

    Ši mikroelektroninė relė turi tam tikrus techninius duomenis.

    Ši mikroelektroninė relė turi vieną normaliai uždarą (galinį) ir vieną normaliai atvirą (priekinį) kontaktą, skirtą dviejų pulsuojančių srovės apkrovų perjungimui.

    Taikant išorinę kintamąją įtampą, kurios dažnis yra 25, 50 ir 75 Hz, darbas užtikrinamas nuo 0,8 V iki 10 V.

    Kintamosios srovės, kurios dažnis 25, 50 ir 75 Hz, darbinė įtampa yra (2,9-3,2) V, o išjungimo įtampa yra (2,1-2,3) V.

    Pastaba: suveikimas – galinio kontakto atidarymas ir priekinio kontakto uždarymas. Dropout – priekinio kontakto atidarymas ir galinio kontakto uždarymas.

    Indikatorius su bendru anodu naudojamas informacijai apie įėjimo įtampą rodyti.

    Kontaktai perjungia įtampą iki 30 V.

    Indikatoriaus informacijos atnaujinimo dažnis įvyksta kas 12,8 ms.

    Vidutinio taško lygintuvas naudojamas įvesties įtampai ištaisyti.

    5.Elektroninės relės funkcinė schema.

    Impulsinę mikroelektroninę relę galima suskirstyti į keletą funkcinių vienetų. Šios relės funkcinė schema pateikta 5 pav. Pagal funkcinę paskirtį schemoje galime išskirti:


    • Lygintuvas pastatytas pagal grandinę su bendru tašku.

    • Mikroprocesorius (MP).

    • Indikatorius skirtas informacijai rodyti.

    • Optronų pora.
    Lygintuvas skirtas ištaisyti analoginį signalą, patenkantį į jo įvestį. Savo ruožtu analoginis signalas gaunamas iš apsauginio filtro bloko ar kito analoginio elemento ir yra kintamoji įtampa, kurios dažnis yra 25, 50 arba 75 Hz. Iš lygintuvo išvesties gauname išlygintą įtampą, kuri tiekiama į mikroprocesorių.

    Mikroprocesorius atlieka programoje nurodytas funkcijas. Iš lygintuvo išvesties patekus į mikroprocesoriaus įvestį, ištaisyta įtampa pradedama analizuoti naudojant į mikroprocesorių įmontuotą ADC. Tada mikroprocesorius apskaičiuoja vidutinę išmatuotos įtampos vertę ir parodo ją indikatoriuje. Prie vieno iš išėjimų taip pat prijungtos optronų poros. Jie yra analogiški

    5 pav. Mikroelektroninės automatinio užrakinimo relės funkcinė schema

    Relės kontaktai. Priklausomai nuo atsako slenksčio, signalas pasirodo vienoje iš optronų porų.

    Indikatorius leidžia stebėti įtampą, kuri ateina į mikroelektroninę relę. Tai leidžia techninės priežiūros personalui išmatuoti ir stebėti mikroelektroninės relės veikimą.

    Tranzistoriniai optronai, sudaryti iš skleidžiančio diodo, sudaryto iš arseno-galio-aliuminio junginio, ir iš kompozitinio silicio fototranzistoriaus. Skirtas naudoti kaip jungiklis galvaniškai izoliuotose radijo elektroninės įrangos elektros grandinėse. Galima įsigyti metaliniame dėkle. Prietaiso svoris ne didesnis kaip 1,5 g.

    6.Darbo algoritmas.

    Norint sukurti mikroelektroninę relę, būtina nustatyti pagrindinę užduotį. Pirmiausia turite sukonfigūruoti mikroprocesorių, sukonfigūruoti visus įvesties-išvesties prievadus, nustatyti laikmatį ir ADC. Po to pradedama baigti pagrindinė užduotis, tai yra informacijos rinkimas naudojant ADC, po kurio analizuojame gautus duomenis ir rodome juos. Ekrane, savo ruožtu, turėtų būti rodoma įvesties įtampos dešimtainė reikšmė. Išsamesnis veikimo algoritmas pateiktas 6 pav.

    Programos algoritmas susideda iš penkių paprogramių:


    • Mikroprocesoriaus nustatymas

    • ADC paprogramė

    • Laikmačio rutina

    • Ekrano paprogramė

    • Padalinio paprogramė
    Pažiūrėkime, kaip veikia mikroprocesoriaus nustatymai. Pirma, mes nustatome pradinę kamino vertę. Po to sukonfigūruojame ADC. Čia įdiegiame SK/128 prescaler ir nustatome nepertraukiamo konvertavimo režimą, kai konversijos paleidžiamos nuolat tam tikrais laiko intervalais. Tada mes nustatome laikmatį. Nustatome STS veikimo režimą (atstatyti atsitiktinai). Šiuo režimu, pasiekus palyginimo registre įrašytą reikšmę, skaičiavimas tęsiamas nuo reikšmės „$00“. Tame pačiame cikle, kai reikšmės nustatomos iš naujo, įvyksta laikmačio pertraukimas. Tada nustatome pertraukimą, kurį sukelia perpildymas. Po to sukonfigūruojami įvesties / išvesties prievadai. Toliau nustatome visas vėliavėlės reikšmes, indikacijos vietą, sumos reikšmę, daliklį ir dalinio nulinę reikšmę. Ir įjungiame visuotinį pertraukimą, kurio i vėliavėlę nustatome į vieną. Nustačius mikroprocesorių, mūsų programa pradedama. Norėdami tai padaryti, nustatome sąlygą t=1. Nors t reikšmė nėra lygi vienetui, įvyksta ciklas, kai tik jis tampa vieneto reikšme, programa eina į dešinę, kur eina į indikacijos paprogramę ir po jos vykdymo vėliavėlę t nustato į nulį ir vėl cikle vėl užsidaro. Visos paskesnės paprogramės išeis po pertraukimo ir grįš į šią kilpą patikrindamos t vėliavėlę.

    Dabar pažvelkime į ADC paprogramę. Kadangi mes sukonfigūravome ADC aukščiau ir sakėme, kad perėjimas prie ADC paprogramės atliekamas pertraukiant tam tikrą laikrodžio impulsų vertę. Kadangi nustačius mikroprocesorių, mūsų programa sukasi kilpa, kur buvo patikrinta t vėliavėlės reikšmė, o kartu buvo skaičiuojamos ir mikroprocesoriaus generatoriaus laikrodžio ciklų reikšmės. Pasiekus tam tikrą laikrodžio impulsų reikšmę, įvyksta pertraukimas ir programa pereina į ADC paprogramę. Kai tik perėjome prie jo, išmatavome įvesties įtampos vertę. Norėdami išsaugoti šią vertę, naudojame du registrus Yl (žemas), kad saugotume žemus baitus, ir Yh (aukštus), kad saugotume didelius baitus. Po to mes patikriname t vėliavėlės reikšmę, jei ji lygi nuliui, tada reikia rodyti reikšmę, o jei t vėliavėlė yra viena, tai reiškia, kad ADC reikšmę galima konvertuoti į dešimtainę forma. Po to palyginame išmatuotos įtampos slenkstinę vertę; jei ši vertė viršija 0,8 V slenkstį, tada šią vertę įrašome į registrą ir pridedame su vėlesniais matavimais. Kiekvieną kartą, kai pridedame ADC reikšmes, daliklio reikšmę padidiname vienu. Tada patikriname daliklio reikšmę ir jei jos reikšmė yra 255, tuomet reikia iš naujo nustatyti sumos daliklio reikšmę, tačiau jei daliklis nepasiekė 255 reikšmės, tada ADC paprogramė išeina.

    Bet jei, palyginus, ADC reikšmė yra žemiau 0,8 V slenksčio, tada programa eina į dešinę ir tada išjungiame ADC. Tai būtina, kad indikatoriuje būtų galima rodyti įtampos vertę. Tada analizuojame daliklio reikšmę ir, jei ji nėra lygi nuliui, pridedame ADC reikšmes ir padidiname daliklį vienu. Tada pereiname prie padalijimo paprogramės. Tai būtina norint apskaičiuoti vidutinę įtampos vertę. Bet jei daliklio reikšmė lygi nuliui, tai programa šokinėja iškart po padalijimo paprogramės. Po to palyginame ADC atsako slenksčio reikšmę ir, jei ji yra didesnė už slenkstį, tada į įvesties-išvesties prievadą išvedame vieneto reikšmę, kuri atitinka priekinio kontakto veikimą ir uždarymą, o jei reikšmė yra mažesnė už atsako slenkstį, tada į prievadą išvedama nulio reikšmė, kuri atitinka galinio kontakto uždarymą. Tada nustatome daliklio reikšmę ir t vėliavėlę į nulį. Taip pat iš naujo nustatome ADC reikšmę ir ją įjungiame bei išeiname iš ADC paprogramės.

    Toliau apsvarstykite padalijimo paprogramę, kurios perėjimas yra ADC paprogramėje. Padalijimo rutina reikalinga vidutinei išmatuotos įtampos vertei apskaičiuoti. Padalinimo programa yra nuoseklus daliklio reikšmės atėmimas iš visų ADC reikšmių sumos. Kiek kartų šis atimtis bus atliktas, bus vidurkio reikšmė, tai yra koeficientas. Panagrinėkime patį šios operacijos algoritmą. Nuėję į paprogramę iš naujo nustatome dalinio reikšmę, tada pažymime vėliavėlę C. Jei jos reikšmė nelygi vienetui, tai dalinio reikšmę padidiname vienetu ir iš visų sumos atimame daliklio reikšmę. ADC reikšmės. Reikšmė 1 įrašoma į vėliavėlę C tik tada, kai sumos reikšmė tampa mažesnė už daliklio reikšmę. Kai tik vienetas įrašomas į vėliavėlę C, programa išeina iš ciklo. Gauto dalinio reikšmę įvedame į X registrą ir iš naujo nustatome sumos reikšmę. Tai užbaigia padalijimo programą ir iš jos išeina.

    Kaip ir ADC paprogramė, perėjimas prie laikmačio paprogramės vyksta per tam tikrą laikrodžio impulsų reikšmę. Natūralu, kad pertraukimas į laikmačio paprogramę įvyksta skirtingu metu, kai pertraukiama ADC paprogramė. Atitinkamai, jie vienas kitam netrukdo. Laikmačio paprogramėje palaipsniui rodome informaciją indikatoriuje. Kadangi turime keturis skaitmenis, skaitmenų reikšmes turime rodyti nuosekliai vienas po kito. Norėdami tai padaryti, yra n, kuriame įrašome reikšmę nuo 0 iki 3, atitinkančią kiekvieną skaitmenį. Po pertraukimo perėjimo programa prasideda. Pirmiausia patikriname n reikšmę ir, jei ši reikšmė lygi nuliui, tada judame toliau, kur pritaikome nulį, kad išjungtume ketvirtą pažintį. Išvedame skaičių į prievadą B. Po to mes tiekiame įrenginį, kad apšviestume pirmą pažintį. Dėl to indikatoriuje užsidega pirmasis skaitmuo. Tada perėjimas vyksta išilgai etiketės. Toliau padidiname n reikšmę vienu ir išeiname iš paprogramės. Po tam tikro laiko įvyksta dar vienas laikmačio pertraukimas ir programa pereina į laikmačio paprogramę, kur vėl lyginame n reikšmę.. Kadangi padidinome ją vienu, tai perėjimas atitinkamai įvyksta, kai n lygus vienetui. Tada pirmasis susipažinimas išjungiamas, antrojo skaičiaus reikšmė išvedama į prievadą B, o antrasis susipažinimas įjungiamas. Tada vėl įvyksta perėjimas išilgai etiketės ir n reikšmė padidėja vienu. Trečio ir ketvirto skaitmenų reikšmės rodomos taip pat, tačiau išvedant ketvirtą skaitmenį n reikšmę nustatome į nulį, tai yra, kad ateityje pirmasis skaitmuo būtų išvestas iš naujo. Taip pat čia į t vėliavėlę įrašome vieneto reikšmę. Po to, kai indikatoriuje rodomas ketvirtasis skaitmuo, programa išeina ir pradeda t vėliavėlės reikšmės tikrinimo ciklą.

    Kadangi vėliavėlė t nustatyta į vieną, įvyksta perėjimas iš vėliavėlės tikrinimo ciklo, po kurio įvyksta perėjimas prie indikacijos paprogramės. Šioje paprogramėje nustatome tūkstančių, šimtų, dešimčių ir vienetų reikšmes, taip pat nustatome gauto skaitmens reikšmę, kad būtų išvestas į prievadą B. Perėję prie rodymo paprogramės, nustatome visuotinio pertraukimo draudimą. Tada iš naujo nustatome laikinojo registro reikšmę. Tada lyginame vidutinę ADC reikšmę, esančią Z registre.Jei ji yra daugiau nei tūkstantis, tai iš Z registro atimame 1000. Atėmus vieną įrašome į temp registrą. Vienetas pridedamas kiekvieną kartą, kai iš Z atimama 1000. Laikinojo registro turinys atitinka tūkstančius. Kai tik registras Z tampa mažesnis nei 1000, programa juda toliau. Po perėjimo temp registro reikšmę perrašome į r0 registrą ir iš naujo nustatome į nulį. Tada vėl lyginame Z registro reikšmę ir jei ji didesnė už 100, tai iš jos vėl atimame 100. Su kiekvienu atėmimu į temp registrą įrašome po vieną. Kai tik Z registro reikšmė tampa mažesnė nei 100, programa juda toliau. Po to šimtų reikšmę perrašome į registrą r1. Tada iš naujo nustatome laikinojo registro reikšmę. Tada lyginame Z registro reikšmę ir jei ji didesnė už 10, tai iš Z registro atimame 10. Su kiekvienu atėmimu į temp registrą įrašome po vieną. Kai tik registro Z reikšmė tampa mažesnė už 10, programa juda toliau. Tada prisiminkite dešimčių reikšmę registre r2. Likusi reikšmė Z registre yra reikšmė, apibrėžianti vienetų reikšmę. Ši reikšmė įrašoma į registrą r3. Dabar tūkstančių, šimtų, dešimčių ir vienetų reikšmės yra atitinkamai registruose r0, r1, r2 ir r3. Po to Z registre įvedame kodų lentelės adresą, kuriame yra rodomų skaičių reikšmė. Jei matavimo metu tūkstančių reikšmė yra lygi nuliui, tuomet reikia atslopinti nulio reikšmę pačiame reikšmingiausiame skaitmenyje. Po to įrašome pirmojo skaitmens reikšmę registre r0, tada antrojo skaitmens reikšmę r1, tada trečio skaitmens reikšmę r2 ir paskutinio skaitmens reikšmę registre r3. Po to įjungiame visuotinį pertraukimą. Tai baigia programą ir išeina iš rodymo paprogramės. Po to t vėliavėlę nustatome į 0 ir viskas pradeda kartotis. Čia baigiasi mikroprocesoriaus programos algoritmas.

    7.Programinė įranga.

    Prieš rašydami programą, turite pasirinkti mikroprocesorių ir atsižvelgti į jo atliekamas funkcijas. Atliekant šią užduotį, patartina pasiimti ATmega48 mikroprocesorių. Jo skiriamieji bruožai yra šie:


    • Aukštos kokybės mažos galios 8 bitų AVR mikrovaldiklis

    • Išplėstinė RISC architektūra
    - 130 instrukcijų, kurių dauguma vykdoma per vieną laikrodžio ciklą

    32 8 bitų bendrosios paskirties darbo registrai

    Visiškai statiška architektūra

    Našumas iki 16 MIPS esant 16 MHz

    Integruotas dviejų ciklų daugiklis


    • Nepastovi programa ir duomenų atmintis
    - 4KB sisteminė programuojama „Flash“ programos atmintis, galinti atlaikyti 10 000 įrašymo / ištrynimo ciklų

    Pagalbinė įkrovos programos dalis su nepriklausomu apsaugos bitu


    • Sisteminis programavimas su integruota įkrovos programa

    • tikra skaitymo funkcija programuojant
    - 256 baitų EEPROM, galintis atlaikyti 100 000 rašymo / ištrynimo ciklų

    512 baitų vidinės SRAM atminties (statinė RAM)

    Programuojama skaitymo apsauga


    • Periferinės savybės
    - Du 8 bitų laikmačiai / skaitikliai su atskiru išankstiniu skalavimu ir palyginimo režimu

    Vienas 16 bitų laikmatis / skaitiklis su atskiru išankstiniu skalavimu ir palyginimo bei fiksavimo režimais

    Realaus laiko skaitiklis su atskiru generatoriumi

    Penki PWM kanalai

    6 10 bitų kanalai

    2 8 bitų kanalai

    6 kanalų ADC įrenginiams PDIP pakete

    4 10 bitų kanalai

    2 8 bitų kanalai

    Programuojamas serijinis USART

    Pagrindinis / pavergtas SPI sąsaja

    Į baitus orientuota nuoseklioji 2 laidų sąsaja

    Programuojamas laikmatis su įmontuotu osciliatoriumi

    Integruotas analoginis lygintuvas

    Pertraukite ir pabuskite, kai pasikeičia kaiščio būsena


    • Specialios mikrovaldiklio savybės
    - Įjungimo atstatymas ir momentinio maitinimo praradimo detektorius

    Integruotas kalibruotas generatorius – išoriniai ir vidiniai pertraukų šaltiniai

    Penki mažai energijos suvartojantys režimai: tuščiosios eigos, ADC triukšmo mažinimo, energijos taupymo, maitinimo išjungimo ir budėjimo režimo


    • I/O prievadai ir korpuso dizainas
    - 23 programuojamos I/O prievadų linijos

    32 kontaktų TQFP ir MFL paketai


    • Maitinimo įtampos diapazonas
    - nuo 1,8 iki 5,5 V ATMega48V

    Nuo 2,7 iki 5,5 V ATMega48L

    Nuo 4,5 iki 5,5 V ATMega48


    • Įvairūs veikimo laikrodžio greičio diapazonai
    - nuo 0 iki 1 MHz ATMega48V

    Nuo 0 iki 8 MHz ATMega48L

    Nuo 0 iki 16 MHz ATMega48


    • Itin mažas suvartojimas
    - Aktyvus režimas:

    300 µA esant 1 MHz ir 1,8 V maitinimo įtampai

    20 µA esant 32 kHz ir 1,8 V maitinimo įtampai

    Mažo vartojimo režimas

    0,5 µA esant 1,8 V maitinimo įtampai

    ATMega48 yra mažos galios 8 bitų CMOS mikrovaldiklis su AVR RISC architektūra. Vykdydamas instrukcijas per vieną ciklą, ATMega48 pasiekia 1 MIPS našumą 1 MHz taktiniu dažniu, todėl dizaineris gali optimizuoti galios ir našumo santykį.

    AVR branduolys integruoja turtingą instrukcijų rinkinį ir 32 bendrosios paskirties darbo registrus. Visi 32 registrai yra tiesiogiai prijungti prie aritmetinio loginio bloko (ALU), leidžiančio pasiekti du nepriklausomus registrus vykdant vieną komandą. Dėl to ši architektūra užtikrina dešimtis kartų didesnį našumą nei standartinė CISC architektūra.

    ATMega48 turi šias charakteristikas: 4 KB sisteminės programuojamos „Flash“ programos atminties, 256 baitų EEPROM duomenų atmintis, 512 baitų SRAM (statinė RAM), 23 bendrosios paskirties I/O linijos, 32 bendrosios paskirties darbo registrai, trys lankstūs laikmačiai. /skaitikliai su palyginimo grandine, vidiniai ir išoriniai pertraukimų šaltiniai, nuosekliai programuojamas USART, į baitus orientuota nuoseklioji 2 laidų sąsaja, 6 kanalų ADC, iš kurių 4 kanalai turi 10 bitų skiriamąją gebą ir 2 - 8 bitų skiriamąją gebą, programuojamas budėjimo laikmatis su integruotu osciliatoriumi, SPI prievadu ir penkiais programine įranga inicijuotais mažo vartojimo režimais. Laukimo režimu šerdis sustoja, o SRAM, laikmačiai / skaitikliai, SPI prievadas ir pertraukų sistema toliau veikia. Išjungimo režimu registrų turinys išsaugomas, tačiau pagrindinis generatorius sustabdomas ir visos vidinės mikroprocesoriaus funkcijos išjungiamos, kol neįvyksta pertraukimas arba aparatinės įrangos atstatymas. Energijos taupymo režimu asinchroniniai laikmačiai ir toliau veikia, todėl galima skaičiuoti laiko intervalus, kai mikroprocesorius veikia miego režimu. ADC triukšmo mažinimo režimas sustabdo skaičiavimo branduolį ir visus įvesties / išvesties modulius, išskyrus asinchroninį laikmatį ir patį ADC, kuris sumažina triukšmą konvertuojant iš analoginio į skaitmeninį. Budėjimo režimu pagrindinis osciliatorius veikia, o likusi įrenginio dalis neveikia. Tai leidžia greitai išlaikyti galimybę greitai paleisti įrenginius ir sumažinti suvartojimą.

    Prietaisas pagamintas naudojant didelio tankio nepastovios atminties technologiją iš Atmel. Integruota ISP Flash leidžia perprogramuoti programos atmintį sistemoje per nuosekliąją SPI sąsają naudojant įkrovos įkrovos programą, veikiančią AVR branduolyje, arba įprastą nepastovios atminties programuotoją. Įkrovos įkėlimo programa gali įkelti duomenis per bet kurią mikrovaldiklio sąsają. Programa įkrovos sektoriuje ir toliau vykdoma net tada, kai įkeliama programos atminties sritis, užtikrinant tikrą skaitymo ir rašymo elgseną. Sujungusi 8 bitų RISK branduolį su viduje programuojama „Flash“ atmintimi, „Atmel“ padarė ATMega48 įrenginius galingais mikrovaldikliais, kurie suteikia didesnį lankstumą ir ekonomiškumą įvairiems valdymo įrenginiams.

    ATMega48 palaikoma įvairi programine įranga ir integruotais kūrimo įrankiais, tokiais kaip C kompiliatoriai, makrokomandų surinkėjai, programinės įrangos derintuvai / simuliatoriai, grandinės emuliatoriai ir vertinimo rinkiniai.

    7.1. ATMega48 kaiščio išdėstymas:

    7.1 pav. ATmega48 mikroprocesoriaus sutarčių vieta

    7.1 pav. Mikroprocesorinių kaiščių paskirtis nurodyta, tačiau panaudosime tik dalį jų. Taigi mes sukonfigūruojame visą prievadą B išvesties ir prijungiame prie jo indikaciją, kad būtų rodoma skaičių reikšmė. D0-D3 prievadas taip pat yra sukonfigūruotas išėjimui ir prie jo prijungiame indikatorių, kad apšviestų keturias indikatoriaus pažįstamas. D4-D5 prievado kaiščiai yra sukonfigūruoti kaip išvestis, o prie jo prijungti šviesos diodai, rodantys priekinių ir galinių kontaktų uždarymą ir atvirkščiai, kad atidarytų priekinius ir uždarytų galinius kontaktus. C0 prievado išvestis naudojama ADC. Išorinis atskaitos įtampos šaltinis yra prijungtas prie AREF kaiščio, o filtro kondensatorius prijungtas prie AVCC kaiščio, kad pagerintų atsparumą triukšmui.

    Apsisprendus dėl mikroprocesoriaus pasirinkimo ir veikimo algoritmo dizaino, naudojant šį algoritmą reikia parašyti jam programą.

    Programai parašyti naudosiu programinę įrangą, vadinamą Algorithm Builder. Tačiau prieš rašydami programą, pažvelkime į šią programinę įrangą.

    7.2. Algorithm Builder kūrimo aplinka

    Algorithm Builder programinę įrangą parašė rusų programuotojas Genadijus Gromovas. Ši aplinka suteikia visą kūrimo ciklą, pradedant nuo algoritmo įvesties, įskaitant derinimą, ir baigiant kristalo programavimu grandinėje. Turėsite galimybę kurti programas tiek surinkėjo lygiu, tiek makro lygiu, kuriose bus galima dirbti su kintamu savavališko ilgio kiekiais. Tai priartina programavimo galimybes prie aukšto lygio kalbos. Naujausią Algorithm Builder versiją galite atsisiųsti iš autoriaus svetainės http://algrom.net/russian.html.

    Skirtingai nuo klasikinio asemblerio, programa įvedama algoritmo forma su medžiu panašiu išsišakojimu ir rodoma plokštumoje, dviem matmenimis. Sąlyginių ir besąlyginių perėjimų tinklas atvaizduojamas grafiškai patogia vektorine forma. Tai taip pat išlaisvina programą nuo daugybės etikečių pavadinimų, kurie klasikiniame assembleryje yra neišvengiamas balastas. Aiškėja visa loginė programos struktūra.

    Programų kūrimo grafinės technologijos programuotojams atveria naujas galimybes. Jie leidžia įvesti programas plokštumoje kaip algoritmą su medžio struktūra. Dėl to visa loginė programos struktūra tampa visiškai aiški. Pagrindinis tokių technologijų tikslas – kūrimo sąsają kuo labiau priartinti prie žmogaus suvokimo prigimties. Įvaldyti tokią aplinką yra daug lengviau nei įvaldyti klasikinį asemblerį. Patogesnė sąsaja atveria naujas plėtros galimybes. Pasak vartotojų, programinės įrangos kūrimo laikas, palyginti su klasikine, sutrumpėja 3–5 kartus

    Ryžiai. 7.2.1. Algorithm Builder programinės įrangos langas.

    Surinkėjas.

    Aplinka sukurta veikti su Windows 95/98/2000/NT/ME/XP.

    Normaliam redaktoriaus veikimui reikalingas „Courier“ šriftas.

    7.2.1 pav. rodo, kaip atrodo pagrindinė programos „Algoritmų kūrimo priemonė“ skydelis.

    Algoritmo projektavimas

    Bet kokią programinę įrangą galima suskirstyti į atskiras, logiškai užbaigtas dalis. Paprastai galutinis šių fragmentų teiginys yra tokie teiginiai kaip besąlyginis šuolis arba grįžimas iš paprogramės, t.y. teiginiai, po kurių tiesinis programos vykdymas tikrai sustoja. Programinės įrangos kūrimas Algorithm Builder aplinkoje susideda iš tokių blokų formavimo, jų išdėstymo plokštumoje ir vektorinių ryšių tarp jų užmezgimo iš sąlyginių ir besąlyginių perėjimų.

    Algoritmo elementai

    Norėdami sukurti algoritmą, Algorithm Builder pateikia septynis elementus:

    FIELD – Laukas;

    LABEL – Etiketė;

    VERTEX – bloko viršus;

    CONDITION – Sąlyginis perėjimas;

    JMP Vector – santykinis besąlyginis šuolis;

    SETTER – periferinio įrenginio sąranka;

    TEXT – vietinio teksto rengyklės eilutė.

    Elementas „LAUKAS“ – laukas

    Atstovauja bloko centre esančią liniją. Objektas skirtas įrašyti daugumą mikrovaldiklių operatorių. Norėdami pridėti lauką, pasirinkite meniu elementą „Elementai\laukas“ arba spustelėkite mygtuką įrankių juostoje, arba klavišą „Alt+F“, arba klavišą „Enter“ (jei žymeklis yra už vietinio teksto rengyklės ribų). .

    Žemiau pateiktame algoritmo pavyzdyje „Lauko“ elementai yra apbraukti ovalais.

    Elementas „LABEL“ – etiketė

    Tai vertikalus brūkšnys, esantis teiginių bloko viduje, ir pasirenkamas pavadinimas, esantis brūkšnio kairėje arba dešinėje. Etiketė skirta nurodyti vietas algoritme, kur galimi sąlyginiai ir besąlyginiai perėjimai. Norėdami blokui pridėti etiketę, pasirinkite meniu elementą „Elementai\Label“, paspauskite klavišus „Alt+L“ arba mygtuką įrankių juostoje. Jei reikia, galite priskirti konkrečios programos adresą. Norėdami tai padaryti, prieš pavadinimą (jei jis yra), turite parašyti konstantą arba algebrinę išraišką, kuri apibrėžia šį adresą.

    Norėdami pakeisti etiketės pavadinimo vietą, paspauskite klavišą „Tab“.

    Toliau pateiktame pavyzdyje elementas „Etiketė“ yra ovalo formos.

    Paprastai vienas iš perėjimo vektorių (su rodykle gale) turi būti šalia etiketės. Tuo

    Etiketei dėklui suteikti pavadinimo nebūtina. Tačiau „Algoritmų kūrimo priemonė“ leidžia klasikinį perėjimo adresą naudojant etikečių pavadinimus. Tokiu atveju etiketei turite suteikti pavadinimą. Pavyzdžiui:

    Be to, algoritmo teiginiuose etiketės pavadinimas gali būti naudojamas kaip konstanta, kurioje yra atitinkamos vietos adresas programos atmintyje.

    Elementas "VERTEX" - bloko viršus

    Išvaizda ir paskirtis visiškai identiška etiketei, tačiau, skirtingai nei ji, nurodo

    Bloko vieta apdirbimo plokštumoje visada yra jo pradžia. Norėdami pridėti naują viršūnę, pasirinkite meniu elementą „Elementai\Vertex“ arba paspauskite klavišus „Alt+V“, arba spustelėkite mygtuką įrankių juostoje arba kairįjį pelės mygtuką spustelėdami jį reikiamoje vietoje darbo lauką kartu su „klavišais“ Alt+Ctl+Shift.

    Toliau pateiktame pavyzdyje „Vertex“ elementai yra išdėstyti ovalais:

    Paprastai viršūnė įvardijama tik tada, kai ji yra paprogramės arba makrokomandos pradžia.

    Elementas „CONDITION“ – sąlyginis perėjimas

    Šis elementas yra struktūriškai sudėtingiausias ir skirtas sąlyginiams perėjimams įgyvendinti. Tai ovalus kontūras, kurio viduje perėjimo sąlyga ir galimas vektorius įrašytas laužtinės linijos forma su rodykle gale, šalia kurios yra pasirenkamas vektoriaus pavadinimas.

    Vektoriaus pabaiga turi baigtis tam tikroje etiketėje arba viršūnėje, arba kito vektoriaus segmente, arba turėti adresuojamos etiketės pavadinimą.

    Norėdami perkelti vektorių į norimą vietą, paspauskite kairįjį pelės mygtuką laikydami nuspaudę klavišą "Alt". Norėdami redaguoti vektorių, naudokite krypties klavišus kartu su klavišu „Alt“. Norėdami pereiti nuo sąlygos redagavimo prie vektoriaus pavadinimo redagavimo, paspauskite klavišą „Tab“. Vėlesni klavišo „Tab“ paspaudimai pakeis vektoriaus pavadinimo padėtį. Norėdami įvesti naują objektą, pasirinkite meniu elementą „Elementai\Sąlyga“ arba paspauskite klavišus „Alt+C“ arba mygtuką įrankių juostoje.

    Toliau pateiktame pavyzdyje „Sąlygos“ elementai yra išdėstyti ovalais:

    Elementas „JMP Vector“ – besąlyginis šuolis

    Šis elementas skirtas trumpiems besąlyginiams šuoliams įgyvendinti (pagrindiniame surinkime tai yra „RJMP“ operatorius). Tai polilinija, kylanti iš bloko vidurio su rodykle gale, panaši į objekto „Sąlyga“ vektorių. Norėdami pridėti naują besąlyginį šuolį, pasirinkite meniu elementą „Elements\JMP Vector“ arba paspauskite klavišus „Alt+J“ arba mygtuką įrankių juostoje.

    Toliau pateiktame pavyzdyje „JMP Vector“ elementas yra pažymėtas linija.

    Elementas "SETTER" - tinkinimo priemonė

    Šis objektas yra pilkas stačiakampis, kurio viduje įrašytas pritaikomo periferinio mikrovaldiklio komponento pavadinimas, pvz., laikmatis, ADC, pertraukimo kaukės registras ir kt. Tinkinimo priemonė sukurta taip, kad sudarytų mikrovaldiklio operacijų seką, užtikrinančią įkėlimą. reikiamų konstantų į atitinkamus I/O valdymo registrus pagal pasirinktas savybes.

    Prieš naudojant šį elementą, reikia nustatyti mikrovaldiklio tipą (meniu elementas „Options\Project options“, skirtukas „Chip“)

    Norėdami pridėti tinkinimo priedą prie algoritmo, pasirinkite meniu elementą „Elements\Setter“ arba paspauskite klavišus „Alt+S“ arba mygtuką įrankių juostoje. Norėdami redaguoti jau įvestą tinkinimo priemonę, suaktyvinkite rengyklę dukart spustelėdami arba naudodami klavišus „Shift+Enter“.

    Objektas „Setteris“ yra makrooperatorius. Po kompiliavimo jis paverčiamas mikrovaldiklio komandų seka, kuri užtikrins, kad reikiamos konstantos būtų įkeltos į atitinkamus valdymo registrus. Reikėtų nepamiršti, kad atliekant šias operacijas bus naudojamas tarpinis registras r16.

    Kai kuriems komponentams, pvz., ADC, tinkinimo priemonė gali veikti keliuose valdymo registruose. Tokiu atveju, jei reikia, poveikis kiekvienam konkrečiam registrui gali būti blokuojamas.

    Toliau pateiktame pavyzdyje „Setterio“ elementai pažymėti ovalia linija.

    Elementas „TEXT“ yra vietinė teksto rengyklės eilutė

    Šis elementas yra teksto eilutė, prasidedanti nuo kairiojo algoritmo lauko krašto. Kelių tokių eilučių rinkinys sudaro vietinį teksto rengyklę, apribotą punktyrinėmis linijomis. Darbo jame taisyklės yra panašios į kitų teksto redaktorių.

    Eilutės skirtos daugeliui kompiliatoriaus nurodymų įrašyti, taip pat komentarams. Norėdami pridėti naują vietinį teksto rengyklę, pasirinkite meniu elementą „Elementai\tekstas“ arba paspauskite klavišus „Alt+T“ arba mygtuką įrankių juostoje.

    Komentarai turi prasidėti dviem pasviraisiais brūkšniais: „//“.

    Toliau pateiktame pavyzdyje „Teksto“ elementai pažymėti ovalia linija.

    Susipažinę su pagrindiniais Algorithm Builder programinės įrangos elementais, pradėsime kurti programą. Norėdami sukurti naują projektą, pasirinkite meniu elementą „Failas\Naujas“. Tokiu atveju atsiras pirmasis skirtukas ir darbiniame lauke elementas „TEXT“, „VERTEX“ ir vienas elementas „FIELD“ pridedamas su tuščiu operatoriumi (7.2.2 pav.) „NOP“:

    Ryžiai. 7.2.2. Naujas projekto langas.

    Tada nustatome mikroprocesoriaus tipą, mūsų atveju tai yra ATmega48. Norėdami nustatyti mikroprocesoriaus tipą, pasirinkite meniu punktą „Parinktys\Projekto parinktys...“ (7.2.3 pav.):

    Ryžiai. 7.2.3. Projekto parinkčių langas.

    Čia pasirenkame savo mikroprocesorių ir spustelėkite taikymo mygtuką.

    Po to, remdamiesi veikimo algoritmu, sudarome programą. Dėl to, kad programa čia pateikiama algoritmo forma, ji nedaug skirsis nuo jau sudaryto ir aprašyto aukščiau.

    Panagrinėkime programos konstravimą. Pirmiausia turite nustatyti kamino adreso skaitiklį į paskutinį SRAM langelį. Tai padaryti lengva; norėdami tai padaryti, pasirinkite elementą SETTER, po kurio pasirenkame Stack Point

    Kas pasirodo Control Register Setting langas (7.2.4 pav.), kuriame nustatome

    Ryžiai. 7.2.4 Stack nustatymų langas.

    Pažymėkite langelį ir paspauskite mygtuką Gerai. Darbiniame lauke pasirodo pilkas stačiakampis SP. Tada sukonfigūruojame ADC reikšmes, kurioms pasirenkame elementą SETTER, kur pasirenkame Analog to Digits Converter (ADC), po to pasirodo Control Register Setting langas (7.2.4 pav.), kuriame sukonfigūruojamas ADC. Čia nustatome pirminį skalavimo įrenginį CK/128. Mes pasirenkame mikroprocesoriaus kaištį, į kurį pateiksime ADC reikšmę. Čia pasirenkame mikroprocesoriaus darbo režimą kam

    Ryžiai. 7.2.4. ADC sąrankos langas.

    Įdiekite AVCC su išoriniu kondensatoriumi prie AREF kaiščio. Tai užbaigia ADC sąranką.

    Dabar mes nustatome laikmatį / skaitiklį. Norėdami konfigūruoti, vėl eikite į SETTER elementą, kur pasirenkame Timer/Counter 0, po kurio pasirodo langas su laikmačio/skaitiklio nustatymais (7.2.5 pav.). Čia nustatome CK/1024 prescaler vertę ir pasirenkame vieną iš jo veikimo režimų. Tokiu atveju pasirenkame CTC režimą, ty iš naujo nustatome, jei yra atitiktis. Šiuo režimu skaičiavimo registras taip pat veikia kaip įprastas sudėjimo skaitiklis, kuris didėja su kiekvienu laikrodžio signalo clk T 0 impulsu. Tačiau maksimalią įmanomą skaitiklių registro reikšmę, taigi ir skaitiklio skiriamąją gebą, nustato palyginimo registras OCRO. Pasiekus palyginimo registre įrašytą reikšmę, skaičiavimas tęsiamas nuo reikšmės „$00“. Tuo pačiu signaliniu laikrodžiu

    Ryžiai. 7.2.5. Langas su laikmačio/skaitiklio nustatymais.

    Clk T 0, kuriame atstatomas skaičiavimo registras, nustatoma TIFR registro pertraukimo vėliavėlė TOV0. Į OCRO registrą įrašome 100 reikšmę, kurią pasiekus įvyks pertraukimas ir programa pereis prie Timer_0_Compare_Match_A etiketės.

    .

    7.2.6 pav. Pertraukimo nustatymų langas.

    Tada sukonfigūruojame pertraukimą ir pasirenkame perpildymo pertraukimą. Norėdami tai padaryti, vėl pasirinkite elementą SETTING, kur pasirenkame laikmačio / skaitiklio pertraukimo kaukę (TIMSK). Atsidariusiame lange laukelyje Timer/Counter pažymėkite langelį Output palygin A match (7.2.6 pav.). Tai užbaigia pertraukimo konfigūraciją. Dabar sukonfigūruojame įvesties-išvesties prievadus, nes turime sukonfigūruoti visą prievadą B, kad būtų galima išvesti, užsirašykite reikšmę 255 ir nustatykite ją į vieną. Taip pat sukonfigūruojame D prievadą, bet čia naudojame tik pirmuosius 6 kontaktus D0 - D5, tam į jį įrašome reikšmę 127. Tada ant šio kaiščio nustatome loginio 0 reikšmę. C prievadą sukonfigūruojame kaip įvestį, kuriam į jį įrašome 0. Čia baigiasi prievado nustatymai įvestis-išvestis. Dabar nustatome t vėliavėlę į 0. Tada nustatome pirmąjį rodiklio ženklą, n įrašome 0. Tada iš naujo nustatome šios sumos reikšmę sumoje ir įrašome 0. Daliklio reikšmę taip pat nustatome rašydami 0 m. Iš naujo nustatome privataus pokalbio reikšmę, įrašydami į ją 0. Po Norėdami tai padaryti, įjungiame visuotinį pertraukimą, nustatydami vėliavėlę i į 1. Tai leidžia nutraukti programą po tam tikros laikrodžio impulsų reikšmės ir eikite į ADC arba laikmačio / skaitiklio paprogramę.

    Tada, naudodami elementą LABEL, nustatome etiketę ir priskiriame jai pavadinimo pradžią. Tada, spustelėjus elementą CONDITION (sąlyginis šuolis) ir įvedus perėjimo sąlygą viduje, ši sąlyga nustatys t vėliavėlę į 1. Jei t vėliavėlė nelygi 1, programa nusileidžia žemyn, o tada per JMP Vector elementas (besąlyginis šuolis) pereiname prie pradžios etiketės. Taigi sukuriame ciklą, kuriame programa sukasi tol, kol t vėliavėlė bus nustatyta į 1. Kai tik t vėliavėlė lygi 1, programa pasitraukia rodyklės kryptimi. Žemiau yra įėjimas į paprogramę, skirtą dvejetainiam skaičiui konvertuoti į dešimtainį skaičių, kuris atitinka užrašą Z_to_Digits. Įvykdžius dvejetainio skaičiaus konvertavimo į dešimtainį skaičių paprogramę, kurią svarstysime toliau, programa grįžta po užrašo Z_to_Digits, kur t vėliavėlėje vėl įrašomas 0. Tada vėl pasirenkame JMP Vector elementą ir einame į pradžios etiketė.

    Dabar pažvelkime į ADC pertraukimo tvarką. Perėjimas prie ADC paprogramės atliekamas po tam tikro laiko. Kai tik ADC atliko matavimus, jis parašė duomenis į adcl ir adch. Duomenys iš šių dviejų registrų turi būti įrašyti į kitą registrą tolimesniam konvertavimui. Šie registrai bus zl ir zh. Surašymui atitinkamai naudosime eilutę adcl → zl, kita eilutė bus adch→ zh. Tada naudojame CONDITION elementą (sąlyginį perėjimą) su sąlyga t=1. Ši sąlyga būtina norint uždrausti keisti skaičių, kol skaičius nebus konvertuojamas į dešimtainę formą. Jei t=0, tai programa patenka žemiau, kur parašyta eilutė x → z, tai reiškia, kad z registre saugomas skaičius pasikeis tik pateikus skaičių. Tada naudojant CONDITION elementą (sąlyginį perėjimą) sukuriame sąlygą y
    Tada apsvarstykite sąlygą y adc_max ir, jei sąlyga teisinga, programa seka rodyklę. Tada išvedame informaciją į D.5 ir D.4 prievadus. Tai parašyta kaip 1 → D.5. Šis užrašas rodo, kad prievado D.5 kaištyje rodoma loginio vieneto reikšmė. Kitoje eilutėje 0 → D.4 į prievadą D.4 išvedame loginio nulio reikšmę. Tada programa eina aplink rodyklę. Tikrinama sąlyga x adc_max. Tada viena po kitos rašomos trys eilutės 0 → m, 0 → t, 0 → y. Juose iš naujo nustatome dividendo (m), t vėliavėlės ir y registro, kuriame saugoma išmatuoto ADC vertė, turinį. Tada vėl paleidžiame ADC, po to išeiname iš ADC paprogramės. Tai baigia įvesties įtampos matavimo paprogramę.

    Įvestis į padalijimo paprogramę yra ADC paprogramėje. Programai persikėlus į padalijimo paprogramę div32_8, apskaičiuojama visų išmatuotų ADC reikšmių vidutinė vertė. Pirmiausia iš naujo nustatome privataus turinio vertę. Norėdami tai padaryti, parašykite 0 → chat. Tada pateikiame sąlygą, kai vėliavėlė C = 1. Vienetas bus įrašytas į vėliavėlę C tik tada, kai sumos turinys yra mažesnis už daliklį. Bet kadangi vėliavėlėje C vis dar yra 0, programa eina žemiau. Žemiau yra eilutė chast++, kurioje koeficiento reikšmę padidiname vienu. Tada daliklio reikšmę atimame iš registro, kuriame yra ADC reikšmių suma. Tada, naudodami JMP Vector elementą (nesąlyginis šuolis), sukuriame kilpą, kuri ateina prieš sąlygą, kai pažymima vėliavėlė C. Ir kai tik sumos reikšmė bus mažesnė už C vėliavėlės daliklį, bus parašytas vienas ir programa seks pagal rodyklę. Tada dalinio reikšmę perrašome į x registrą. Tai atitinka eilutę chast → x. Žemiau yra eilutė, kurioje iš naujo nustatome sumos reikšmę 0 → suma. Čia baigiasi padalijimo paprogramė, o programa iš jos išeina ir atsiduria ADC paprogramėje po eilutės div32_8.

    Panagrinėkime laikmačio pertraukimo paprogramę, kurioje nustatomas keturių indikatoriaus taškų apšvietimas. Įvykus laikmačio pertraukimui ir programai persikėlus į Timer_0_Compare_Match_A etiketę, ji pradeda tikrinti indikatoriaus pažinimo reikšmės sąlygas. Norėdami tai padaryti, naudodami CONDITION elementą (sąlyginis šuolis), patikriname sąlygą n=0 ir jei ji teisinga, programa juda išilgai rodyklės. Po to į prievadą D.3 su komanda 0 → portd.3 įrašome reikšmę 0. Tada visame įraše rodome skaičių, esantį skaitmenyje_0. Norėdami tai padaryti, parašykite skaitmuo_0→ portb. Ir vieną įrašome į D.0 prievadą, kad užsidegtų pirmasis indikacijos ženklas, programoje jis atrodys kaip 1 → portd.0. Tada, naudodami JMP Vector elementą (besąlyginis šuolis), pereiname prie etiketės m0. Etiketė m0 pateikiama po visų turinio sąlygų n. Tada padidiname n reikšmę taip, kad antroje indikatoriaus vietoje būtų rodomas kitas skaičius. Po to išeiname iš laikmačio paprogramės. Kitą kartą, kai įvyks laikmačio pertraukimas, programa grįš į jį, bet veiks šiek tiek kitaip, nes būtina rodyti informaciją antrame indikatoriaus ženkle. Tai atsitiks patikrinus sąlygą, kai registre n turi būti vienetas, kuris buvo įrašytas po pirmojo skaitmens išvedimo, ir padidinus n reikšmę vienu. Kadangi n yra vienas, programa tęsiasi pagal sąlygą n=1. Išlaikius šią sąlygą, būtina išjungti pirmą pažintį ir tai padaryti į prievadą D.0 įrašome nulio reikšmę. Programoje tai atitinka eilutę 0 → portd.0. Tada į visą prievadą taip pat išvedame skaičių, esantį skaitmenyje_1. Norėdami tai padaryti, parašykite skaitmuo_1→ portb. Ir parašykite vieną į prievadą D.1, kad užsidegtų pirmasis indikacinis simbolis, programoje jis atrodys taip: 1 → portd.1. Tada einame į m0 etiketę ir padidiname n reikšmę vienu, kaip aprašyta aukščiau. Indikatoriaus trečiojo ir ketvirtojo skaitmenų išvestis yra panaši į pirmųjų dviejų išvestį, tačiau išvedus ketvirtąjį skaitmenį, iš naujo nustatome registro n turinio reikšmę. Norėdami tai padaryti, parašykite 0→n. Ir mes nustatome t vėliavėlės reikšmę į vieną, kuri rodo skaičiaus rodymo pabaigą. Norėdami tai padaryti, parašykite 1→t. Taip baigiamas visas skaičiaus rodymo indikatoriuje ciklas.

    Belieka atsižvelgti tik į indikacijos paprogramę, prie kurios pereinama tik patikrinus vėliavėlės t=1 būklę pagrindinėje programoje. Kadangi t vėliavėlėje yra vienas po paskutinio skaitmens, rodomo indikatoriuje. Apklausiant sąlygą, programa juda išilgai rodyklės ir tada patenka į Z_to_Digits, tai yra sąlyga norint pereiti prie indikacijos paprogramės. Programa seka etiketę ir patenka į paprogramę Z_to_Digits. Po perėjimo pirmiausia išjungiame visuotinį pertraukimą; norėdami tai padaryti, į vėliavėlę i įveskite reikšmę 0. Tai parašyta kaip 0→i. Žemiau mes įvedame nulį į temp darbo registrą. programoje atrodo 0→temp. Dabar, naudojant CONDITION elementą, sukuriame sąlygą, kurioje registras Z lyginamas su 1000 ir kai tik registro Z reikšmė bus mažesnė nei 1000, programa seks rodykle. Tuo tarpu Z registras nebeatitinka sąlygos ir programa nusileidžia. Čia iš Z registro atimame tūkstantį ir užrašome kaip Z – 1000. Tada temp registro reikšmę padidiname vienu. Naudodami JMP Vector elementą sukuriame kilpą, kuri ateina prieš Z registro palyginimo sąlygą. Kai tik sąlyga įvykdoma ir Z registras yra mažesnis nei tūkstantis, programa išeina rodykle. Dabar perrašome laikinojo registro turinį į r0 registrą ir dabar jame saugoma tūkstančių skaičiaus vertė. Įrašas atrodo taip temp→r0. Po to iš naujo nustatome temp registro reikšmę, įrašydami į jį 0. Dabar programa kartojama kaip skaičiuojant tūkstančius, bet dabar reikia skaičiuoti šimtukų reikšmę. Vėl nustatome sąlygą Z
    Parašius programą galima ją išbandyti programinės įrangos aplinkos „Algoritm Builder“ pateiktame simuliatoriuje. Norėdami vykdyti algoritmą simuliatoriuje, paspauskite klavišą "F9" arba mygtuką įrankių juostoje.

    Tokiu atveju kompiliacija įvyks pradžioje ir, jei nebus klaidų, treniruoklis bus paleistas. Reikiamų mikrovaldiklio komponentų langų atidarymas atliekamas per meniu elementą „View...“. Norint stebėti procesus pateiktame algoritme, pakanka atidaryti langus „Processor“, „PortD“, „Working registers“, „ADC“, „Timer/Counter 0“ ir „Process time #0“ (7.2 pav.). .7).

    7.2.7 pav. Algorithm Builder simuliatoriaus Vio.

    Ženklas šalia operatoriaus rodo esamą programų skaitiklio padėtį. Etiketė dedama prieš teiginį, kuris turi būti įvykdytas kitame žingsnyje. Iš karto po paleidimo jis yra pirmame programos teiginyje, adresu 0000 USD. Kai treniruoklis paleidžiamas, darbinių registrų ir SRAM turinys visada užpildomas atsitiktinėmis reikšmėmis, nes tikrame mikrovaldiklyje jų turinys yra nenuspėjamas po maitinimo įjungimo. Žingsnis po žingsnio algoritmo vykdymas su įvedimu į paprogrames atliekamas naudojant mygtuką „F7“ arba mygtuką įrankių juostoje. Žingsnis po žingsnio vykdymas neįvedant paprogramių - naudojant klavišą „F8“ arba mygtuką

    7.2.8 pav. Crystal programavimo langas.

    Ši programinė įranga turi galimybę programuoti mikroprocesorių. Algorithm Builder turi įmontuotą grandinės programuotoją, kuris suteikia nuoseklų mikroschemų programavimą. Pasirinkus meniu elementą „Programa\Run with Chip“ arba paspaudus „Ctrl+Shift+F9“ klavišus arba paspaudus mygtuką įrankių juostoje, pradedamas kompiliuoti algoritmas, o jei klaidų nėra, atidaromas programavimo langas (7.2 pav. .8).

    Mikroprocesorius programuojamas per COM prievadą.

    Grafinė programavimo aplinka, skirta kurti programas mikrovaldikliams su AVR architektūra.

    Algorithm Builder yra galingas įrankis, leidžiantis atlikti visą programos kodo kūrimo ir tikrinimo ciklą. Aplinką sudaro: grafinis redaktorius, mikroschemos simuliatorius, skirtas algoritmo derinimui, kompiliatorius ir grandinės programuotojas kodui į lustą įkelti. Programa yra vietinis „Assembler“ analogas ir tinka tiek patyrusiems kūrėjams, tiek tiems, kurie tik pradeda įvaldyti įrenginio programinę-aparatinę įrangą.

    Algoritmų kūrimas gali vykti surinkimo lygiu arba makro lygiu, remiantis veikimu su kelių baitų reikšmėmis, atsižvelgiant į ženklą. Be to, makrokomandų operatoriai apima dažniausiai pasitaikančius komandų rinkinius.

    Visos sukurtos programos pateikiamos išsišakojusių medžių blokinių diagramų pavidalu, pereinamieji tinklai atvaizduojami grafiškai vektorine forma. Jei pagal sąlygą reikia nueiti į kokią nors vietą programos kode, tai ten pakanka nupiešti vektorių. Tokiu būdu programinė įranga atlaisvinama nuo kelių etikečių pavadinimų. Jei filialas per ilgas, visada yra galimybė adresuoti filialą etiketės pavadinimu. Tokios loginės struktūros aiškumas, pasak kūrėjų, žymiai sumažina kodo rašymo laiką ir sumažina klaidų skaičių.

    Pagrindinis langas leidžia sudėti reikiamus objektus ir juos keisti, įterpti, perkelti ir pan., kaip ir bet kuriame grafiniame redaktoriuje. Atskiroje ekrano dalyje lentelės pavidalu suformuojamas langas su visų konstantų ir kintamųjų sąrašu, taip atlaisvinant algoritmą nuo papildomų įrašų. Periferinių įrenginių (UART, SPI, ADC, laikmačių) parametrams konfigūruoti pateikiamas specialus elementas su išskleidžiamojo lango sąsaja. Kompiliatorius savarankiškai generuoja instrukcijų rinkinį, kuris pateikia pasirinktus įrenginio veikimo parametrus. Be to, palaikomas automatinis Windows ANSI kodų konvertavimas į rusų kalbos raidinius ir skaitmeninius LCD kodus. Programa palaiko daugybę mikrovaldiklių šeimų: ATtiny, ATmega, AT90.

    Simuliatorius rodo visus pokyčius, vykstančius įvairiuose registruose, atminties ląstelėse ir laikmačiuose. Modeliavimas gali būti atliekamas žingsnis po žingsnio (su funkcijomis arba be jų), iki lūžio taško arba į pasirinktą sritį.
    Norėdami valdyti programuotoją grandinėje, turite savarankiškai surinkti paprastą adapterį, per kurį mikrovaldiklis prijungiamas prie kompiuterio COM prievado. Be to, galima prijungti per USB jungtį. Programuotojas suskaičiuoja pagrindinių perprogramavimų skaičių ir išsaugo skaitiklį pačioje lustoje.

    Monitoriaus derinimo režimas šerdyje naudojant kitą adapterį (visas diagramas galima rasti programinės įrangos dokumentacijoje) leidžia stebėti vidinę tikrojo kristalo būseną bet kuriame lūžio taške. Ryšiui tarp valdiklio ir kompiuterio priskiriamas tik vienas išėjimas vartotojo pasirinkimu. „On Chip“ derinimas taikomas bet kokio tipo lustams, turintiems SRAM atmintį.

    Nepaisant akivaizdžių pranašumų, Algorithm Builder yra mažai žinomas radijo mėgėjų bendruomenėje. Iš dalies taip yra dėl to, kad iki 2010 metų vizualinio programavimo aplinka buvo mokama, nemokama demonstracinė versija apribojo kodą iki dviejų kilobaitų. Šiandien programinė įranga platinama visiškai laisvai. Aplanką su įdiegta programa galima nukopijuoti į kitą laikmeną ir dirbti nešiojamu. Programinė įranga pateikiama kartu su vartotojo vadovu. Straipsnyje aptariami keli paprasti darbai ir pateikiamos USB ir COM prievadų programuotojų schemos.

    Programos Algorithm Builder autoriai yra vietinių programuotojų grupė, vadovaujama liaudies meistro Genadijaus Leonidovičiaus Gromovo iš Nižnij Novgorodo. Programa tobulinama iki šiol, pridedamos naujos funkcijos, autoriaus svetainėje atsirado nedidelis bibliotekų pasirinkimas.

    Algorithm Builder programos sąsaja ir vartotojo vadovas pateikiami rusų ir anglų kalbomis.

    Programinė įranga suderinama su Microsoft Windows 95, 98, 2000, NT, ME, XP, Vista ir 7 operacinėmis sistemomis.

    Programos platinimas: Laisvas

    Straipsnio medžiaga parengta Maskvos valstybinio pramonės universiteto (GOU MGIU) Automatikos, informatikos ir valdymo sistemų (AIiSU) katedroje.
    (Nuo 2011 m. MGIU vadinasi Federalinė valstybinė biudžetinė aukštojo profesinio mokymo įstaiga „MGIU“).
    Autoriai: Kryukov A.I., Shubnikova I.S., Troikov S.M.

    AI&CS katedra jau daugiau nei 35 metus rengia profesionalus automobilių ir kosmoso technologijų, mechanikos inžinerijos ir verslo elektroninių, mikroprocesorinių, kompiuterinių, robotų, mechatroninių ir informacinių valdymo sistemų kūrimo ir eksploatavimo srityse. Skyriaus darbuotojų tiriamieji darbai vykdomi srityse, susijusiose su sprendimų palaikymo sistemų, pagrįstų dirbtinio intelekto technologijomis, kūrimu, kompleksinių sistemų valdymo procesų analize ir sinteze, įrangos gedimų stebėjimu ir išmaniuoju nustatymu. Svarbi katedros mokslinės veiklos sritis – transporto priemonių automatinių ir elektroninių sistemų srities tyrimai.
    Yra daugybė įvairių programų, skirtų „Atmel MK“ valdymo programoms rašyti - tai kūrimo ir derinimo aplinkos žemo lygio kalbomis (pavyzdžiui, nemokamas „AVR Studio“ paketas, skirtas programoms kurti AVR Assembler kalba), kūrimo aplinkos. aukšto lygio kalbomis (pvz., „WinAVR“ aplinka programoms kurti panašia į C kalbą) ir netgi yra grafinė programinės įrangos kūrimo ir derinimo aplinka, vadinama „Algoritmų kūrimo priemonė“.

    Algorithm Builder išsiskiria iš visų kitų aplinkų, todėl mes sutelksime dėmesį į tai. Šios programos akcentas yra net ne tai, kad ji yra nemokama, o tai, kad kodas joje net nėra parašytas, o nupieštas algoritmų schemų pavidalu, o tai žymiai sumažina programos kūrimo laiką. Ši aplinka suteikia visą kūrimo ciklą, pradedant nuo algoritmo įvesties, įskaitant derinimą, ir baigiant kristalo programavimu grandinėje. Dėl to visa loginė programos struktūra tampa visiškai aiški.

    Programinės įrangos kūrimas Algorithm Builder aplinkoje susideda iš tokių užduočių blokų formavimo, jų išdėstymo plokštumoje ir ryšių tarp jų užmezgimo iš sąlyginių ir besąlyginių perėjimų.

    Kad nereikėtų perrašyti viso darbo su Algorithm Builder aplinka vadovo, patariu jį perskaityti patiems, ypač todėl, kad programa yra gaminama šalyje ir joje yra išsamus aprašymas rusų kalba remiantis pavyzdžiais apie darbą su juo. Remdamiesi asmenine patirtimi, galime drąsiai teigti, kad šio vadovo (beje, toli gražu nėra didelė - tik 20–30 minučių studijų) visiškai pakanka norint visiškai suprasti ir suprasti šį programinės įrangos produktą.

    Algorithm Builder galite atsisiųsti adresu http://algrom.net/russian.html. O valdymo programos kūrimo procesą galima peržiūrėti adresu nuoroda. Taigi dabar aprašytoje kūrimo aplinkoje pateiksime paruoštą programą su išsamiais jos komentarais.

    Pirmiausia meniu Options/Project Options reikia pasirinkti kristalo tipą (mūsų atveju Atmega8) ir ten nustatyti laikrodžio dažnį iki 8 000 000 Hz (8 MHz). Tada paleidžiant iš naujo nustatome kristalą (Elementai / Pertraukimai / Atstatymas). Tada inicijuojame krūvą pasirinkdami Elements/Customer…/Stack Pointer (SP), atsidarys langas, su kuriuo tereikia sutikti paspaudus „OK“ (2 pav.).

    Ryžiai. 2. Stack Customizer

    Kitas žingsnis – inicijuoti USART siųstuvą-imtuvą (nesistebėkite, kad santrumpoje atsirado raidė „S“ – tai modernesnė UART versija, kuri nuo jos skiriasi galimybe perduoti/priimti duomenis ne tik asinchroniniu režimu, bet ir sinchroniniu režimu) pasirinkdami meniu Elements / Customizer... /USART. Atsidariusiame lange (3 pav.) imtuvo skiltyje pažymėkite langelius prie Enable (įjunkite duomenų imtuvą) ir Complete interrupt enable (įgalinkite pertraukimus, kai gaunami duomenys), tada pažymėkite langelį šalia Double Speed. , nustatykite simbolio dydį Character Size: 8 – bitų ir nustatykite duomenų perdavimo spartą į Baud Rate = 9615 bps (paspaudus meniu pasirinkus duomenų perdavimo spartą, reikia pasirinkti 9600 bps, 9615 bps gaunama dėl laikrodžio dažnio perskaičiavimas iki 8 MHz).


    Ryžiai. 3. USART konfigūratorius

    Pagrindinę programos dalį sudarys kontrolinių kodų patikrinimų seka (sąrašas Nr. 1). Idėja yra ta, kad kompiuteris atsiųs operacijos kodą per UART, o MK jį gaus ir sugeneruos atitinkamus valdymo veiksmus ventiliatoriaus mentės pavaroje ir servo pavaroje. Iš viso bus trys tokie kodai (galite sugalvoti absoliučiai bet kokius kodus):

  • 31 USD - įjunkite ventiliatoriaus mentės pavarą;
  • 20 USD - išjunkite ventiliatoriaus mentės pavarą;
  • $A1 - prieiga prie servo pavaros.

  • Jei su pirmaisiais dviem kodais viskas aišku, tai su trečiuoju nėra taip paprasta – $A1 yra tik komanda prieiti prie servo pavaros, tuomet reikia gauti sukimosi kampo kodą. Eksperimentiškai buvo nustatyta, kad jis svyruoja nuo 05 AF iki 154 F. Be to, mes siųsime iš kompiuterio ir atitinkamai gausime iš MK, pradedant nuo žemo baito. Taip pat išjungsime duomenų gavimo per USART pertraukimus komandos vykdymo metu – kitaip tai gali pasirodyti kaip duomenų „netvarka“.

    Sąrašas Nr. 1

    Sąrašas Nr. 2 rodo delsos paprogramės (Delay) kodą. Laiko uždelsimas reikalingas tiksliam ir pilnam komandos apdorojimui ir susidaro programuojant N ciklų kilpą (bandymų ir klaidų būdu apskaičiavome, kad mūsų atveju sėkmingiausias ciklų skaičius yra 84FF šešioliktainėje skaičių sistemoje).

    Sąrašas Nr. 2

    Duomenų gavimo per UART pabaiga sukelia USART_Receive_Complete pertraukimą (jei jis šiuo metu nėra išjungtas pagrindinėje programos dalyje), kurį galima nustatyti kode per meniu Elements/Interrupts/USART_Receive_Complete. Handler'o korpuse turėtumėte visus jame naudojamus registrus išsaugoti steke, o tvarkyklės pabaigoje - atkurti iš dėklo. Taip pat šioje tvarkyklėje galite gauti būsenos baitą (UCSRA registrą), kad patikrintumėte, ar duomenyse nėra klaidų, ir, žinoma, pačius duomenis iš UDR registro (sąrašas Nr. 3).

    Sąrašas Nr. 3

    Servo pavaros sukimosi kampas priklauso nuo į ją tiekiamo impulso pločio, išlaikant pastovų periodą (periodas 20 ms, o valdymo impulso trukmė nuo 0,8 iki 2,2 ms, nors skirtingiems servams šios reikšmės gali šiek tiek skirtis) tam mums reikia paprogramės. servo pavaros sukimosi kampas (sąrašas Nr. 4). Valdymo impulso laikas ir pauzės laikas bus nustatyti panašiai kaip delsos paprogramė. Kaip rašėme aukščiau, eksperimentiškai 8 MHz kristalų dažniui nustatėme, kad impulso laikas yra nurodytas kodu diapazone nuo $ 05AF iki $ 154 F. Taigi, žinant viso periodo laiką – $9E3C (taip pat nustatyta eksperimentiškai), pauzės laiką galime skaičiuoti kaip skirtumą tarp periodo trukmės ir pulso trukmės. Belieka iš eilės, panašiai kaip delsos paprogramė, išskaičiuoti impulso ir pauzės laiką, o tada pakartoti tokį signalą kelis kartus (mūsų atveju signalą kartojome $10 kartų, t.y. 16 kartų dešimtainėje žymėjimo sistemoje). )

    Sąrašas Nr. 4

    Parašius valdymo programos kodą (nubraižant algoritmą), reikia jį sukompiliuoti ir blykstinti į mikrovaldiklį. Programą galima kompiliuoti paspaudus Ctrl+F9 arba per meniu Program/Compile. Jei kompiliavimas bus sėkmingas, pasirodys informacinis langas, kuriame bus nurodytas MK užimtos atminties kiekis.

    Tada turite įjungti kompiliavimo rezultatą (failą su plėtiniu *.hex be priešdėlio „EE_“ pradžioje, esantį tame pačiame aplanke kaip ir programos šaltinis) į valdiklį. Tai galima padaryti naudojant nemokamą „AvrProg“ programą, įtrauktą į nemokamą „AVR Studio“ paketą. Jį galite atsisiųsti iš svetainės mymcu.ru arba iš atmel.com (svetainė anglų kalba).

    Be MK programinės aparatinės įrangos mirksėjimo programos, jums taip pat reikės programuotojo. Galite jį nusipirkti (paprastos versijos yra palyginti nebrangios) arba lituoti patys.

    Ryžiai. 4. LPT programuotojo grandinė
    Paprasčiausias, kurį žinau, yra LPT programuotojas, tačiau tam reikės LPT prievado kompiuteryje, kuris šiuo metu tampa retenybe. Programuotojo idėja yra paprasta ir susideda iš LPT prievado prijungimo prie ISP sąsajos ir valdiklio linijos Reset tiesiogiai (4 pav.).

    Kitas savarankiško surinkimo programuotojo variantas yra USB programuotojas (schema parodyta 5 pav.), žinoma, jis yra sudėtingesnis, tačiau ateityje jis gali pasirodyti daug patogesnis. Tačiau yra vienas „bet“ - norint jį surinkti, jums vis tiek reikės LPT programuotojo, nors ir tik vieną kartą. Norint sumirksėti FUSE bitai, reikės mirksėti paties programuotojo valdymo valdikliui. Būtina, kad SPIEN, CKOPT ir SUT0 bitai būtų užprogramuoti (nustatyti į „0“). Dažniausiai MK atkeliauja iš gamyklos, t.y. naujiems jau užprogramuotas SPIEN bitas. Taip pat pageidautina (bet nebūtina) užprogramuoti (nustatyti į „0“) BODEN bitą. Likę bitai turi būti neužprogramuoti (nustatyti į „1“). Tam gali prireikti Codevision AVR V2.03.4 programos. Išsamų USB programuotojo surinkimo aprašymą galite perskaityti čia.