Tipy na použití časovače-krystal, obsluha přerušení a vstupů

Všechny země i VCC musí být zapojeny.
S nevyužitými piny je to nerozhodně.
Někdo doporučuje je uzemnit (a tím snížit rušení)
ale pak musíš dát pozor na nastavení pinů.
Jiní doporučují je nezapojovat. Je to bezpečnější.

a reset dát trvale na napájení ?

Reset na napájení přes odpor (ISP programátor musí mít možnost ho stáhnout na zem). Není to však většinou nutné, reset má vlastní pull-up.
Nezapojený piny většinou neřešim, ale neměly by viset úplně volně. Pro klid duše jim můžeš zapnout interní pullupy. Občas se ti tím může podařit snížit spotřebu a procesor není otravován nežádoucími vlivy z vnějšku.

Ještě bych se rád zeptal. Jaká je výchozí hodnota v paměti EEPROM ? Snažím se pravidelně ukládat měněné číslo (od 0 do 9999) do EEPROM a po startu procesoru si ho zase vyzvednout. Postupuji dle přiloženého kódu. Po prvním naprogramování mikroprocesoru bude hodnota nulová nebo jiná?

int cislo;
uint16_t cislove;//cislo ulozene v eeprom

cislove = eeprom_read_word((uint16_t*)50);//nactu z adresy 50
cislo = (int) cislove; // vlozim do promene typu int


//pravidelne ukladani
cislove = cislo;
eeprom_write_word((uint16_t*)50, cislove);//ulozi do eeprom na adresu 50

Smazané paměti mají hodnotu 0xFF. Při prvním přístupu tam tedy najdeš nejspíš toto číslo.
Pak mívají procesory pojistku EESAVE, která určuje, jesli se při programování FLASH má smazat i EEPROM.

Kód by měl být funkční, jen je tam zbytečné přehazování hodnoty mezi znaménkovou a neznaménkovou proměnnou(jedna proměnná je tedy zbytečná). Překladači je to jedno a ikdyby hodil varování, tak tyhle funkce znaménko zapisované/čtené proměnné nijak nevyužívají, takže by mohlo být varování ignorováno.

EEPROM má stejně jako FLASH omezenou životnost! Takže zapisovat do ní s rozvahou.

Ještě by mi prosím zajímalo - je nějaký způsob, jak zjistit že dochází k výpadku napájení (anebo že je procesor vypínán) - třeba z poklesu napětí a honem uložit proměnnou do eeprom ?
Díky za info

Třeba pomocí komparátoru. Jeden konec mu přepneš na referenci, druhej konce na nohu procesoru u který je dělič. Když napětí klesne, vyvolá se přerušení a můžeš začít uklízet. Potřebuješ ovšem vyšší filtrační kondenzátory abys měl dost času než napětí klesne pod úroveň potřebnou pro zápis do eeprom.

Všechno se dá, když se chce.
Otázkou je, zda to stojí za to. :smiley:

Já budu řešit něco podobného, akorát to budu mít kapánek horší.
Budu zapisovat na SD kartu.
Řešení si představuji asi takhle:

Před stabilizátor umístím napěťový komparátor (napájím z baterie).
Za stabilizátor umístím dostatečně velký kond na to,
aby mi utáhl zařízení po dobu zápisu.
Zbývá mi to jen vypočítat a odzkoušet.

Ty máš spotřebu danou v datasheetě a potřebné vzorečky
najdeš tady:
elweb.cz/clanky.php?clanek=65

Zbývá jen vzít kalkulačku, tužku do které můžeš hryzat
a začít si lámat šišku.

EDIT: kruci, piityy byl zase rychlejší :wink:

daj vediet potom aky si bol uspešny… ci to bude chodiť uspešne a spolahlivo… možno sa to niekomu ešte zide… i ked mne sa to riesenie zda take neslane…

a ještě by mi prosím zajímalo - jak se v AVR Studiu vloží číslování řádků ?

a ještě bych poprosil - jaký je rozdíl, když proměnné definuji až v main() anebo ještě před main() a před všemi funkcemi (hned za #include) ?

Kde se pohybuješ v kódu ti to ukazuje vpravo dole. Např. “Ln 21, Col 1” znamená první znak řádku 21.

Proměnná definovaná mimo funkce je globální (viditelná ve všech funkcích v souboru, případně i mimo něj), proměnná ve funkci je viditelná pouze v oné funkci. Tohle bys našel v káždém výukovém materiálu o C, stačí trochu hledat.

Díky
a ještě bych poprosil - jaké jsou zvyky v Céčku ohledně psaní velkých písmen na začátku nebo někde jinde v názvu funkcí, proměnných (místních a globálních)

Mozes kludne pouzivat madarsku notaciu. Konstatny sa zvyknu pisat velkymi pismenami.

Osobně používám povětšinou to, co je zvykem v C#.

Názvy proměnných a funkcí malými písmeny, pokud je složen z více slov, každé slovo mimo prvního začíná velkým písmenem (“int nazevPromenne = 0;”).
Konstanty (pomocí #define) a makra velkými písmeny, pokud je složeno z více slov, oddělené podtržítkem("#define NEJAKA_KONSTANTA 11").
Kdybys psal v C++ nebo C#, měl bys možnost tvořit třídy, ty by začínaly velkým písmenem a dále jako proměnná (“class NejakaTrida{}”).

Při definici struktur(pomocí typedef) obvykle přidávám na konec jejího názvu “_t” (“nazevStruktury_t”). Pro její instanci (tedy proměnnou typu struct) pak to co platí pro proměnné. Někdo zase začíná velkým písmenem jako u třídy. Záleží na tobě, jen se to pak snaž dodržovat :slight_smile:. [code]typedef struct
{
// prvky struktury
char prom1;

} jmenoStruktury_t;

jmenoStruktury_t novaPromenna;[/code]Hlavně si zvykni odsazovat tabelátorem kód nižší úrovně(např. tělo funkce, vnitřek ifu atd…), jinak se v tom nedá vyznat.

Co se týká složených závorek, někdo tu otvírací píše hned za příkazm ke kterému patří (obvyklé v javě). Mě však přijde mnohem přehlednější když jsou závorky stejné úrovně pod sebou (jako jsem to napsal výše u definice struktury).