0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaProgramiranjeProgramiranje z Arduino (9) - Arduino nasveti za dolgo življenje

    Programiranje z Arduino (9) – Arduino nasveti za dolgo življenje

    V prejšnjem delu smo uporabili enega od spalnih načinov čipa ATMega328P na Arduinu in zbujanje preko zunanjih prekinitev. Tokrat si bomo spalne načine ogledali malenkost podrobneje in uporabili zbujanje z lastno notranjo budilko.

    Za vse programerje mikrokontrolerjev so to seveda stare novice, začetnikom z idejo o baterijski aplikaciji pa lahko že par informacij prihrani veliko časa in slabe volje. Sam sem se namreč srečal z Arduinom prav preko ideje aplikaciji z nizko porabo. Vedenje o visoki porabi perifernih enot na Arduinu in možnosti izklapljanja perifernih enot na mikrokontrolerju bi mi prihranilo kar nekaj naivnih korakov. Skratka, če hočemo razviti baterijsko aplikacijo nam Arduino razvojna plošča v praksi lahko služi kot pripravno razvojno orodje, kar je tudi njegov namen. Ko je prototip programa zrel za v svet pa vemo, da moramo Arduino oklestiti raznih linearnih napajalnikov, USB/USART pretvornikov, LED in podobnih požeruhov toka. K sreči je to relativno preprosto. Potrebujemo le ATMega328P čip z bootloaderjem, 2x 22pF kondenzatorja in 16MHz uro. Podrobneje je sestava takega vezja z nizko porabo opisana v prejšnjem prispevku. Zbujanje bomo prikazali na primeru: merjenje temperature na vrtu ali v rastlinjaku in pošiljanje podatkov preko radijskega oddajnika na domači računalnik opremljen z Arduinom s sprejemnikom.

    ATMega328P mikrokontroler ima šest spalnih načinov: Idle, ADC noise reduction, Power-down, Power-save, Standby ter Extended Standby. Razlikujejo se po tem kateri deli mikrokontroleja lahko zbudijo centralno procesno enoto (CPU) in kateri deli so ugasnjeni. Vsakemu od teh šestih načinov lahko še posebej določimo katere periferne enote čipa bomo izklopili. Te enote so npr: ADC pretvornik, števci, USART, I2C, SPI ipd. Na tem mestu ne bomo naštevali vseh možnosti, ker bi to vzelo preveč prostora, zelo lepo so opisani v »svetih spisih«: uporabniškem priročniku za ATmega družino mikrokontrolerjev, poglavje 10. Pozornost bomo raje obrnili v točno določen način zbujanja iz spanja, ki je na voljo v vseh šestih spalnih načinih.

    Ta način je t.i. watchdog timer (WDT) ali stražni mehanizem. WDT je poseben števec v ATMega328P čipu, ki deluje neodvisno od izvora ure za CPU. Če je vklopljen, deluje pri 128kHz, vendar se na njegovo natančnost ne gre preveč zanašati. Frekvenca je precej odvisna od temperature in lahko odstopa tudi 10%. Vseeno je to zelo uporabna funkcija in to v vsaj dveh primerih. En tak primer je periodično zbujanje čipa, ko ni na voljo nobenih zunanjih proženj. V drugem primeru nam lahko služi kot rešilna bilka (ali potuha), če naš program ni pravilno predvidel vseh situacij in smo se nekje ulovili v večno zanko. WDT nam namreč lahko, če je ta funkcija vključena, sproži WDT reset čipa. Tipičen primer je Arduinova WIRE knjižnjica za komunikacijo preko I2C. Narejena je tako, da v nedogled čaka odgovor z naprave s katero Arduino komunicira, npr. I2C temperaturnim tipalom. Če se nam tipalo iz nekega razloga “obesi”, se bo celotna aplikacija ustavila. Če aplikacija meri samo temperaturo sicer nismo nič izgubili, če pa je aplikacija uporabna tudi brez tega podatka smo v zadregi. Pravilna rešitev situacije je sicer popravek knjižnjice, a reši nas lahko tudi WDT. Preden vstopimo v funkcijo kateri ne zaupamo 100%, da se bo izvršila vklopimo WDT in WDT reset. WDT nam omogoča, da mu nastavimo po kolikšnem času bo prožil prekinitev oziroma reset. Možnosti so: 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s, 4 s ter 8 s. Ko se bo WDT sprožil bo povzročil reset čipa in CPU bo rešen večne while zanke. No, če naredimo samo to, se bomo zaklenili le v malo daljšo zanko večnih resetov, saj se bo isto zgodilo pri vsakem prvem branju vrednosti s tipala. K sreči je Arduinov mikrokontroler poln zvijač: vsebuje poseben register (MCUSR) v katerega mikrokontroler zapiše kaj je povzročilo zadnji reset. Če je tretji bit tega registra ob vklopu (preverjanje opravimo v setup() funkciji) na logični 1, pomeni, da se je zgodil WDT reset in da je bolje, da naš program ubere drugačen potek.

    Celotni članek

    Arduino nasveti za dolgo življenje (9)

    Tempero d.o.o. Vipavska 4e

    5270 Ajdovščina

    www.tehnologija.biz

    2014_SE219_42

    Politika zasebnosti

    Spoštujemo vašo zasebnost in se zavezujemo, da bomo osebne podatke, pridobljene prek spletnega informacijskega sistema, skrbno varovali in jih brez vaše privolitve ne bomo posredoval tretji osebi oziroma jih uporabili v druge namene. Ker obstajajo v spletnem informacijskem sistemu določene povezave na druge, zunanje spletne strani, ki niso vezane na nas, ne prevzemamo nobene odgovornosti za zaščito podatkov na teh spletnih straneh.

    Hkrati se zavezujemo, da bomo po svojih najboljših možnih močeh varovali podatke in zasebnost obiskovalcev spletne strani .

    Da bi preprečili nepooblaščen dostop do pridobljenih podatkov ali njihovo razkritje, ohranili natančnost osebnih podatkov in zagotovili njihovo ustrezno uporabo, uporabljamo ustrezne tehnične in organizacijske postopke za zavarovanje podatkov, ki jih zbiramo.

    Več: https://svet-el.si/politika-zasebnosti