SW reset of ATTINY2313

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
epes
Příspěvky: 120
Registrován: 05 srp 2008, 00:00
Bydliště: Praha 5

SW reset of ATTINY2313

#1 Příspěvek od epes »

Poradil by mně někdo jak naprogramovat reset (restart) ATTiny2313 - obdobu HW resetu pomocí pinu č.1

Díky
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#2 Příspěvek od Andrea »

Jestli to má být i s inicializací hw přesně jako při resetu z pinu 1, tak si zapni watchdog na nejkratší čas (16ms) a nech ho vypršet. Pokud stačí jen znovuspuštění sw, tak skoč na adresu 0.
Uživatelský avatar
Burajko
Příspěvky: 1819
Registrován: 21 srp 2009, 00:00

#3 Příspěvek od Burajko »

Andrea píše: Pokud stačí jen znovuspuštění sw, tak skoč na adresu 0.


Len nie z podprogramu.Bude to chaos...v stacku
Už druhý krát strihám a furt je to krátke
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#4 Příspěvek od Andrea »

Burajko píše:Len nie z podprogramu.Bude to chaos...

Proč? Na začátku se snad inicializuje zásobník.
Uživatelský avatar
Burajko
Příspěvky: 1819
Registrován: 21 srp 2009, 00:00

#5 Příspěvek od Burajko »

Ked das jump na 0H ? Atmel ma softwarove inicializovany stack pointer?
Už druhý krát strihám a furt je to krátke
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#6 Příspěvek od Andrea »

A kterej procesor nemá?
Uživatelský avatar
Burajko
Příspěvky: 1819
Registrován: 21 srp 2009, 00:00

#7 Příspěvek od Burajko »

PIC12,16 - rodina ,ak sa da tomu hovorit procesor...Atmely su fakt niekde inde,hlavne v rychlosti.
Naposledy upravil(a) Burajko dne 27 srp 2010, 15:08, celkem upraveno 2 x.
Už druhý krát strihám a furt je to krátke
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#8 Příspěvek od Andrea »

Jestli myslíš procesory s hw stackem, tak těm je to taky jedno, protože mají ten stack kruhovej. Některý AVR mají taky hw stack.
Uživatelský avatar
Burajko
Příspěvky: 1819
Registrován: 21 srp 2009, 00:00

#9 Příspěvek od Burajko »

Teraz citam.datasheet.Je to tak.
Už druhý krát strihám a furt je to krátke
Uživatelský avatar
epes
Příspěvky: 120
Registrován: 05 srp 2008, 00:00
Bydliště: Praha 5

SW reset of ATTINY2313

#10 Příspěvek od epes »

Díky za radu, Andreo! Vzhledem k tomu, že jsem totální začátečník, chtěl bych Tě poprosit o alespoň krátkou nápovědu jak oba tipy realizovat v céčku. Zatím totiž nedovedu posoudit který reset postačí.

Díky.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#11 Příspěvek od Andrea »

V Cčku neumím, nevím, jak skočit na adresu nula. Zapnout watchdog s nejkratším timeoutem by mělo jít nějak takhle:

Kód: Vybrat vše

cli();  // Zakazani preruseni - nevim, jestli se to takhle pise
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR  = (1<<WDE);
while(1);  // Tady se pocka na reset


A úplně na začátku v inicializaci ještě před povolením přerušení je potřeba ten watchdog zase zakázat:

Kód: Vybrat vše

wdr();  // Reset watchdogu - nevim, jestli se to takhle pise
MCUSR &= ~(1<<WDRF);
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = 0;
Uživatelský avatar
Crifodo
Příspěvky: 14779
Registrován: 11 říj 2005, 00:00

#12 Příspěvek od Crifodo »

ten sw reset of ATTINY2313 ale stejně nenahradí hw reset of ATTINY2313, když si zakážeš reset pin of ATTINY2313?
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#13 Příspěvek od Andrea »

If you myslíš kvůli programování of ATTINY2313, than no, nenahradí.
Uživatelský avatar
epes
Příspěvky: 120
Registrován: 05 srp 2008, 00:00
Bydliště: Praha 5

Předmět: SW reset of ATTINY2313

#14 Příspěvek od epes »

Díky za návod, Andreo.
Z počátku se mi z něho dělalo trochu mdlo, ale pro několikerém přečtení příslušné kapitoly v datašítu, jsem ho pochopil. Celodenní problém byl s rozluštěním, asi tiskové, chyby v originále datasítu ATTINY2313 - registr WDTCSR ve skutečnosti v ATtiny neexistuje! Registr se správně jmenuje WDTCR!!! Chvíli mi trvalo, pochopit logiku fungování a nastavování WatchDogu, než jsem si troufl na vlastní zápis. Po několika dnech jsem sesmolil funkční podobu Tvých tipů, pro céčkovské začátečníky snad čitelnější"¨:

asm CLI; // zakázání všech přerušení
mcusr =0; // není nutné
wdtcr = 0b00x11xxx; // povolení WD, x -pomocí těchto bitů se nastaví
resetovací interval
...
.... // uživatelský kod

asm WDR; // reset čítače WD

..... // uživat.kod

mcusr =0; // není nutné
wdtcr = 0b00x11xxx; // ukončení činnosti WD
wdtc=0; // musí být oba řádky

Fce CLI() a WDR() nejsou mému překladači známe, proto jsem použil volání assembleru.

Při čtení manuálu jsem ovšem narazil na další nesrovnalosti týkající se systému restartu. Dle dokumentace by všechny příčiny restartu měly být, co se týče dopadu na chod MCU, ekvivalentní. Ve skutečnosti je především nezanedbatelný rozdíl v chování MCU po vypnutí a opětovném zapnutí napájení a po resetu pomocí příslušného pinu. Mám takové tušení, že ani výše popsaný SW reset není ekvivaletní HW resetu.
A moje otázka pro všechny zkušenější zní: Dá se vůbec SW nasimulovat HW reset?

Díky všem za srozumitelné odpovědi, které mohou být v češtině i angličtině.
S pozdavem
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#15 Příspěvek od Andrea »

Jak jsi přišel na to, že ty resety (POR, BOR, externí a watchdog) nejsou ekvivalentní?
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“