Stránka 1 z 1

problém s přerušením PIC 16f1934

Napsal: 26 čer 2012, 09:25
od cervenyxp
Ahoj,

mám problém s přerušním u pic16f1934

Přerušení TM0 používám pro obsluhu 7segmentového displaye.

Celý program je napsán ve smyčce 100ms a přerušení ovládá jen display.

Náhodně se stane že přerušení se nevrátí do hlavní smyčky a dále funguje jen přerušení. Co může způsobit tento problém ?

Jinak programuji v mikroBasic PRO

Napsal: 26 čer 2012, 09:36
od forbidden
Je správně napsaná obsluha přerušení? Ukládáš do zálohy důležitý registry před obsluhou?

Napsal: 26 čer 2012, 09:46
od cervenyxp
Přerušení je přesně podle návodů k mikrobasic a zálohu registru ? Prosím poraď

Napsal: 26 čer 2012, 09:54
od forbidden
Já ihned při skoku na přerušení ukládám zálohu W a STATUS, případně i jiný, je li to třeba.

Napsal: 26 čer 2012, 10:10
od Chenzee
... a není to tak, že obsluha přerušení je tak dlouhá, že se nestihne provést před vygenerováním dalšího požadavku přerušení. tzn. ukončí se přerušení a ihned se volá nové. Tobě se může zdát, že se ani neukončilo.

Napsal: 26 čer 2012, 21:52
od cervenyxp
Obsluha dlouhá by asi neměla být, zařízení x hodin jede a pak najednou se zacyklí v přerušení protože obsluha segmentovek maká, ostatní stojí

Napsal: 26 čer 2012, 22:06
od forbidden
A máš určitě vymaskovaný přerušení, který nepotřebuješ? Je možný, že třeba nastane přerušení kvůli změně stavu portu, který zrovna nemáš vymaskovaný a vzhledem k tomu, jeho obsluha ani nikdy neskončí. Taková změna na portu může nastat i rušením na nezapojeným/neošetřeným pinu.

Napsal: 26 čer 2012, 22:17
od cervenyxp
T1CON a T2CON mám vynulovaný, tak by to snad mělo být

Napsal: 26 čer 2012, 22:22
od cervenyxp
Napadlo mě to taky, ale divný je že pokud nastavím vnitřní oscilátor na 16MHz udělá to velmi rychle, pokud nastavím oscilátor na 8MHz udělá to náhodně,a přerušení volám prakticky u obou stejně protože upravuji kvuli blikání segmentovek děličku a registr

Napsal: 26 čer 2012, 22:29
od forbidden
Hmm, pokud to udělá "velmi rychle", tak to spusť v simulátoru, tam by to mělo, když to bude chyba v programu, taky skončit zacyklením, případně přetečením nějakýho registru.

Napsal: 26 čer 2012, 23:01
od mikollar
je mozne ze to aj blbo preklada, mam podobnu skusenost ale s mikroC, program krasne bezal no pocase sa seklo prerusenie.

Nakoniec som zistil ze je chyba v prekladaci. Presne ten isty kod v inom prekladaci fungoval nonstop.

Napsal: 27 čer 2012, 08:51
od cervenyxp
Začínám se přiklánět taky k chybě překladače protože :

1. mám nastaven oscilátor na 16MHz a mikroBasicu řeknu 8MHz
- kousne se podelší době
2. mám nastaven oscilátor na 16MHz a mikroBasicu řeknu 16MHz
- kousne se rychle
3. mám nastaven oscilátor na 8MHz a mikroBasicu řeknu 16MHz
- kousne se rychle
4. mám nastaven oscilátor na 8MHz a mikroBasicu řeknu 8MHz
- kousne se po delší době

Proto asi další otázka, zkusit přeložit zvlášť ASM vygenerované mikroBasicem nebo holt napsat v jiném SW ?