Programozott késleltetés robot és mikrokontroller oktatási knowledgepage - kiválósági hálózat

Gyakran mikrokontroller programokat kell létrehozni késedelem az intézkedések koordinálására vagy várja meg őket, hogy befejezze. Az ötlet az, hogy a legegyszerűbb módja annak, hogy egy kis szünet a mikrokontroller - ez túlterheli a processzor más művelet, mint például, hogy ez számít nagy számok. Gyakoriság processzor ciklusokat lehet kiszámítani, hogy hányat dolzhen megszámolni, hogy hozzon létre egy bizonyos késleltetés. Olvasás bármennyi nullától a CPU órajel frekvencia Hz-ben, elméletileg hozna létre a késedelem egy pillanatra. A gyakorlatban valamilyen okból ez nem könnyű.

Ha a mikrokontroller találja processzor révén számok bináris formában, amely olyan széles, mint a belső busz (abban az esetben AVR - 8 bites), majd az egyik arifmiticheskoe intézkedés, így például hozzátéve, hogy az egységek száma, időt vesz igénybe egy munkamenetben a processzor. Annak érdekében, hogy kezelni tudja a több ezer vagy millió, a szám legyen 16 vagy 32 bites, és kiszámításának a 8 bites processzor többet költ, mint egy működési ciklus. Ha nagy számban kell tudni a belső feldolgozó eszköz, pontosabb rendszerre a csapatok.

Mivel a magas szintű programozási nyelv (pl C nyelv) program nem írt közvetlenül a parancs-alapú rendszerek, szükség van egy olyan programot létrehozni késedelem tudni, hogy a fordítóprogram, amely átalakítja a programot gépi kódra. Ez attól függ, hogy hány utasítást (és ennek következtében hány órajel ciklus), ami a számtani művelet. Hozzáteszi összetettsége mint az a tény, hogy a fordító tudja alakítani a programot gépi kódra többféleképpen - például, hogy a gépi kód mert lehetséges, gazdaságosabb a memóriát és gyorsabban fusson. Az ilyen képesség nevezzük fordítóprogram optimalizálás. Ha különböző módok optimalizálása, gépi kódú programot késleltetés és annak időtartamát változatosak.

Itt ugyanaz a program szegmens a C nyelvben csak fordítás után. Két bal hexadecimális számjegy a gépi kódot, és a jobb oldalon van a sorrendben assembly nyelven az operandus (operandus). Gépi kód és assembly kapcsolódnak egymáshoz, a szerelő egyszerűen képviselni számítógépes kód olvasható formában. Összeállításakor ispolzovana optimalizálási program hossza (paraméter -Os fordító).

Lefordítva azt látjuk, hogy valójában történik a ciklusban yazyka tenger és ennek alapján ki tudjuk számolni, hány órajel ciklus kell tölteni egy ciklus alatt. Információ a szabályozás és a munkaidő akció az oldalon adatok AVR utasításkészletet. Ebben a példában, egy ciklus időszak töltésére utasítások 4 esik 4 ütemű, mert az összes utasítást kérő egy munkamenetben. Amellett, hogy ez a ciklus előtt fogyaszt 1 ciklus letöltésével és 1 órajel ciklus, hogy kilépjen a hurok. Ha feltételezzük, hogy az üzemi ciklus vezérlő 14,7456 MHz-en. lehet számítani a késleltetés merült az egész programot szegmens:

(1 + 4 ⋅ 100 + 1) / 14745600 = 27,26 us

A késés létre a példában használt mikromásodpercben és egy változó - 8-bit, mint ennek következményeként, és a natív kód ugyanolyan egyszerű. Ahhoz, hogy hozzon létre egy szünetet egy ezredmásodperc, el kell olvasni sokkal nagyobb számú, majd a gépi kód hosszabb lesz. Használhatja hurkok belül futó egymást, de abban az esetben ez a módszer, mind a késedelem nem lineárisan függ a ciklusok számát, mint minden ciklusban szinten vannak kis újabb késedelem.

E feladat nem hoz létre pontos program késleltetés szinten gépi kód, mert elég finom munka és funkciók létrehozása késések már léteznek AVR-libc és otthoni laboratórium. Ők is használják a következő példákban.

A programról késedelem fontos tudni, hogy ellentétben az alapvető egyszerűség - rendkívül hatékony módszer az energiafogyasztás szempontjából. Mindezek ciklus fogyaszt energiát, amikor a mikrokontroller már hiába veszi. Az akkumulátorok nem tanácsos, hogy hosszú késések a programban, és használja időzítő függetlenül működő és felébreszti a processzort aludni, ha azt szeretné, hogy továbbra is.

Az alábbi kódnak a szoftver késleltetés funkció sw_delay_ms. amely létrehoz egy paraméter száma adott késedelmes milliszekundum. Funkció, viszont használja a félig írt assembly nyelven funkció _delay_ms avr-libc. Ennek az az oka, hogy a küldetés nem használják fel azonnal, hogy az _delay_ms _delay_ms hosszú késések problémákat okozhat. Sw_delay_ms funkció lehetővé teszi, hogy minden gond nélkül késéssel legfeljebb 65535 ms.

Ahhoz, hogy a fenti funkció is van, a következő program, amely létrehoz két késleltető végtelen ciklusba: 100 ms és 900 ms. Közben rövid késleltetés, LED-es lámpák, és egy hosszú - eloltották, és ennek eredményeként villog időnként.

Annak ellenére, hogy úgy tűnik, hogy a LED villog 1 másodpercenként, a tényleges idő egy kicsit hosszabb, mint a funkció hívásokat és LED-késleltetés és mikrokontroller ciklusok időbe telik.

Kapcsolódó cikkek