Prof Creative Commons License 2015.01.27 0 0 724

Szia!

Ha csak egy parancsot lehetne örökre kiszedni az Arduino parancsok közül, az sok ember szerint a delay() lenne. Én inkább csak a paramétert limitálnám nagyjából 100-ra.

 

A meglátásod nem rossz, de van benne egy gixer. Itt nincs olyan hogy a board csinál mást IS. Egy dolgot csinál, nagyjából mindig. Ehhez képest egy érdemi kivétel van, az interrupt, mert az az architektúra másik szintjén figyel folyamatosan, vagyis akkor is bele tud szólni a programfutásba, ha épp nem történik vizsgálat. Jó játék soros kiolvasással megnézni pár kódrész futási idejét. Meg fogsz lepődni...

1. kérdés: a meglátás jó. Túlcsordulhat, erre figyelni kell, ha olyan a szoftverkörnyezet. A millis() alapból unsigned long, vagyis az a változó, amivel vizsgálsz, szintén unsigned long kell legyen, a kezdeti változódeklarációknál erre figyelni kell (a váltásnál így is előfordulhat nehézség, de ez ugye 50 nap nagyjából). Lásd: blink without delay.

 

2. kérdés: elvileg igen, gyakorlatilag olcsóbb és egyszerűbb egy külső eeprommal megoldani. Két okból: egyrészt a belső eeprom (ami konkrétan az IC-n belül van) csak limitált írási-olvasási műveletet képes elviselni (ez néhány ezer az I2C eeprom milliós értékével szemben). Az EEPROM-hoz sem kell elem, kb. 100-200 év az adatvesztésig eltelő idő. Van breakout is, de kb. 40 forint egy darab, plusz a két előtétellenállás.

 

3. kérdés: nincs rajta idő. A millis() elvileg alkalmas időmérésre, ha csinálsz egy változót, amit szinkronizálni tudsz. De...

Egyrészt az Arduinokon (pláne a klónokon) lévő kristály nem éppen atomi pontosságáról híres, nekem 10 percen belül másodperces járateltérést produkált, ami ugye pár perces időmérésnél irreleváns (nem fogod látni, hogy a blink without delay 1 másodperc vagy 1,001 másodperc), de a másodperces jel akár pár perc alatt el tud "mászni" egy referencia jeltől (pl. egy óra kattogásától).

Helyette: RTC, de ne az olcsójános kínai (DS1307, rettenetesek, 1 percet is meghaladó napi járateltérésük bír lenni), hanem a a DS3231 például.

Előzmény: x20fan (722)