Soft reset PIC

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

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
ferdo1

Soft reset PIC

#1 Příspěvek od ferdo1 »

Je možné spraviť softwarový reset PIC - jedná sa o to, aby som počas prerušenia dokázal spraviť reset PICčka - aby mi po návrate z prerušenia nepokračoval odkiaľ tam skočil, ale išiel od adr. 00. Ďakujem
Uživatelský avatar
Hula
Příspěvky: 47
Registrován: 01 dub 2008, 00:00
Kontaktovat uživatele:

#2 Příspěvek od Hula »

Zdravim, ja bych to viděl tak, že po skončení obsluhy přerušení nedáš return,retfie apod...ale goto nula.Asi takhle

org0
nula call init
.......program
....program

org4 ;preruseni
;obsluha preruseni
goto nula ;skok na adresu nula


Akorat ti asi ve stacku zustane adresa intrukce pred kterou prislo preruseni, ale to by nemelo vadit.
Jenda_KL
Příspěvky: 1173
Registrován: 10 zář 2008, 00:00
Bydliště: Kadaň
Kontaktovat uživatele:

#3 Příspěvek od Jenda_KL »

možná ještě nastavit StackPointer na začátek a vyklidit RAM.
Ale to by mělo v INIT být vždy.
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#4 Příspěvek od jankop »

PIC řady 16FXX a nižší nemají přístupný StackPointer, tutíž ho nejde nulovat a ani to není třeba. Zásobník je totiž cyklický. Stačí opravdu skok na inicializační adresu - obvykle 0x00. Ovšem je vhodné ještě před tímto skokem smazat příznak aktivního přerušení.
ferdo1

#5 Příspěvek od ferdo1 »

Vďaka, príznak prerušenia je zmazaný po aktivácii rutiny prerušenia. Len sa bojím, ak nepoužijem return, retfie aby pretečenie Stack nerobilo haluze, nakoľko prerušenie buď prepína dva výstupy (krátke stlačenie tlačítka) alebo spôsobí "vypnutie" činnosti PICčka (dlhé stlačenie tlačítka). V tomto prípade program beží v prerušovacej rutine, na krátke stlačenie nereaguje, pri dlhom by mal program bežať od začiatku. Procík je trvalo napájaný, takže k pretečeniu Stack časom určite príde - simulátor pri pretečení vyhadzoval chybu.
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#6 Příspěvek od jankop »

Nenapsal jsi, o jaký PIC se jedná. Jak jsem ale řekl, u řady 16FXX a nižší je osmiúrovňový cyklický stack, který po přetečení začíná od začátku. Přetečení není nijak kontrolováno ani signalizováno. Nemusíš to tedy hlídat jinak, než že za standardního běhu programu nesmí být vnoření větší než 8x. Ty nemůžeš ovlivnit na jakou pozici zásobníku tvůj call uloží návratovou adresu a nezajímá tě to. Pokud simulátor hlásí přetečení stacku, tak to nejspíš není chyba, ale pouze varování. Reálný procesor se o této nastalé situaci ani nedozví a to přetečení znamená, že se ukazatel zásobníku nastaví zase na počátek.
Naposledy upravil(a) jankop dne 24 lis 2008, 11:18, celkem upraveno 2 x.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#7 Příspěvek od Atlan »

Inak musi to ist urobiť aj inako :)
Uživatelský avatar
meereck
Příspěvky: 55
Registrován: 09 bře 2008, 00:00

#8 Příspěvek od meereck »

a co treba nejaky output pin privest na tranzistor, kterym se bude davat na log0 MCLR pin (na kterem bude samozrejme pullup z Vcc)? Nebo pouzit Watchdog (ale to v tvem pripade okamziteho resetu nelze pouzit)?
Kazdopadne u PIC18 se da pouzit RESET instrukce.
ferdo1

#9 Příspěvek od ferdo1 »

jankop> Ide o 16F627. Práve o to vnorenie 8x ide - vždy po resete skokom na 00 by ostala jedna úroveň visieť, preto chcem robiť ten reset.
Ako som písal, program bude bežať stále a je reálny predpoklad, že k tomu 8násobnému vnoreniu príde.
Skúsim to prepísať a otestovať na reál procíku.
Nad Watchdog som rozmýšľal, nakoniec to možno spravím tak, len sa mi nechcelo zbytočne komplikovať program.
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#10 Příspěvek od jankop »

Kolikrát ještě potřebuješ zopakovat, že nic nezůstane viset. Ukazatel zásobníku se ani při resetu nenuluje. Jeho stav může být po resetu naprosto náhodný. S ohledem na cykličnost je naprosto jedno, v jaké počáteční hodnotě se nachází. Opravdu nerozumíš tomu, že zásobník prostě ošetřovat nemusíš? Co pořád vymýšlíš nesmysly? Když chceš skočit ven z přerušení, tak to prostě udělej. Stack ti v tom naprosto nebrání.
Odpovědět

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