20.05.2016, 13:41
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 683
Сказал спасибо: 362
Сказали Спасибо 757 раз(а) в 359 сообщении(ях)
|
Re: WDT
Сообщение от rusyvochka
|
Это через как?
|
Например, через так:
Цитата:
"..When debug mode is enabled transients on RB6 or RB7 could
try to invoke the debugger and may inhibit the WDT. "
Нагуглено вот тут, мало ли что бывает.
Возможно, проверить биты конфигурации, не разрешена ли отладка.
А вдруг?..
|
|
|
|
20.05.2016, 19:06
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Сообщение от j-Roger
|
Возможно, проверить биты конфигурации, не разрешена ли отладка.
А вдруг?..
|
Ну прям обыдно, да. Теории я и сам разводить могу...
Глянуть в архив не досуг?
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
20.05.2016, 19:26
|
|
Прохожий
Регистрация: 01.06.2010
Адрес: Днепропетровск
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WDT
Почему-то нет сохранения основных регистров при входе в прерывание , а также восстановление при выходе (точнее оно есть ,только чёрт знает где) Где гарантия что вы находитесь в 0-банке???
|
|
|
|
20.05.2016, 19:30
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 683
Сказал спасибо: 362
Сказали Спасибо 757 раз(а) в 359 сообщении(ях)
|
Re: WDT
Прошу извинить, это был скорее вариант ответа на вопрос "почему может не работать WDT", нежели совет.
А отладка у Вас да, выключена.
В исходнике, по крайней мере - бит 13 в слове CONFIG1 в единице.
Последний раз редактировалось j-Roger; 20.05.2016 в 19:33.
|
|
|
|
20.05.2016, 22:26
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Сообщение от www.
|
Где гарантия что вы находитесь в 0-банке???
|
Ну я прям в замешательстве...
ORG 0x04 ; Вектор прерываний
BTFSS PIR1,TMR1IF
GOTO No_T1
Lamp_On
BCF PIR1,TMR1IF
BCF INTCON,PEIE
Retfie
---
No_T1 BTFSC INTCON,INTF
GOTO Int_B0 ;
GOTO Int_T0 ; INT TMR0
---
Int_T0 BCF INTCON,T0IF ; сбросил свой флаг
BSF INTCON,GIE ; разоешил глобальные прерываия: для Т1
MOVWF T_W
MOVFF STATUS,T_St
CLRF STATUS ; при входе может быть любой банк
---
Ex_Int_T0 INCF DIG,F
MOVFF T_St,STATUS
SWAPF T_W,F
SWAPF T_W,W
Retfie
----
Int_B0 MOVWF T_W
MOVFF STATUS,T_St
CLRF STATUS ; при входе может быть любой банк
---
MOVFF T_St,STATUS
SWAPF T_W,F
SWAPF T_W,W
Retfie
Ответ методом Ctrl+C, Ctrl+V...
В прерывании от Т1 только бит-орентированные команды, потому контекст не сохраняю, на фоне индикации, ели пришло время, разрешено прерывание от Т1.
Для Т0 и ИНТ свои, два сохранения / восстановления контекста, статус, к стати, обнуляется после сохранения, это разве не 0-ой банк?
Чуть больше текста, но выше писано: между двумя ИНТ, проходит 8 прерываний по Т0, и запрет Т0, разрешение ИНТ. После ИНТ, разрешены Т0, но запрет ИНТ. Дабы произошло, когда ожидается, а все "мухи" в полуволне игнорируются.
Да не первая игрушка по такому построена. Есть схемы с баласным конденсатором, без трансформатора, и гальванически не развязаны коммутируют киловатки на ура. К чему воду лить? Пост, вообще то, по WDT изначально.
Дельное было: проверять удобочитабельность данных перд дешифрацией дабы не вылететь за таблицу, ну и вектор на самопроизвольную смену TRIS. Остальное - лирика, к сожалению, как всегда. (
__________________
Смотрящий под ноги - звёзды видит в лужах.
Последний раз редактировалось rusyvochka; 20.05.2016 в 22:29.
|
|
|
|
24.05.2016, 10:41
|
|
Прохожий
Регистрация: 01.06.2010
Адрес: Днепропетровск
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: WDT
,
в каком банке находится Lamp_On ? , и что в результате вы модифицируете Port или Tris ???
BCF PIR1,TMR1IF -?????
Последний раз редактировалось www.; 24.05.2016 в 10:50.
|
|
|
|
24.05.2016, 16:28
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: WDT
rusyvochka, извините, но имея уже 426 сообщений, Вы не знаете, что при цитировании программного кода нужно заключать его в тэги [CODE] (значок # на панели инструментов)? А то об Ваши фрагменты кода глаза сломать можно.
Теперь ближе к теме.
Сообщение от rusyvochka
|
статус, к стати, обнуляется после сохранения, это разве не 0-ой банк?
|
А до обнуления "статуса" происходит сохранение, но куда? У Вас ячейки для сохранения T_W и T_St находятся именно в 0м банке. Так что, если в момент вызова прерывания был включен какой либо банк, кроме 0го - вот уже и крах программы. Вас спасает только то, что реально в этой "программе" банки ОЗУ через STATUS переключаются только на этапе начальной инициализации, когда прерывания еще не включены. Но рассчитывать на это нельзя! Вы подкладываете себе мину замедленного действия, которая когда нибудь да рванет. И таких мест, со скрытыми ловушками, в этой "программе" достаточно. Вот хотя бы такие "хитрые" конструкции:
Код:
|
#define Data_I2C INDF,0x02 ;FSR=85 - TRISA
#define Wire INDF,0x05 ;FSR=86 - TRISB |
Т.е. под именами Data_I2C и Wire прячутся разряды управления портами, причем не прямо, а косвенно, "предполагая", что в регистре FSR к этому моменту должен быть адрес TRISA или TRISB. А если там окажется что-то другое - результат непредсказуем. И ради чего? Чтобы не переключать явно банки ОЗУ?
Возьмите себе за правило для переключения банков применять встроенный в ассемблер макрос banksel и в ваших программах будет меньше "подводных камней".
А ячейки памяти для сохранения контента (в вашем случае T_W и T_St) нужно принудительно расположить в области адресов 70h-7Fh, которые "видятся" из любого банка ОЗУ.
|
|
|
|
24.05.2016, 21:18
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Цитата:
|
в каком банке находится Lamp_On ? , и что в результате вы модифицируете Port или Tris
|
Bank 0
Цитата:
|
BCF PIR1,TMR1IF -?????
|
- не совсем понял вопрос?
PIR1 - 0Ch - bank 0
Код:
|
#define Nagr_On BSF PORTA,0x00
#define Nagr_Of BCF PORTA,0x00
#define Lamp_On BSF PORTA,0x03
#define Lamp_Of BCF PORTA,0x03
#define Clock_I2C PORTA,0x01
#define Data_I2C INDF,0x02 ;FSR=85 - TRISA
#define Wire INDF,0x05 ;FSR=86 - TRISB
#define Data_Wire PORTB,0x05
#define Bank_0 BCF STATUS,RP0
#define Bank_1 BSF STATUS,RP0 |
Цитата:
|
области адресов 70h-7Fh, которые "видятся" из любого банка ОЗУ
|
Это почему же? Обьясните пож. или где прочитать? Никогда не встречал.
Цитата:
|
И таких мест, со скрытыми ловушками, в этой "программе" достаточно
|
Бл, обидно, но справедливо. Таки правда.
Цитата:
|
нужно заключать его в тэги
|
- сори, честно, не знал P.$. век живи, а у коня голова больше...
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
24.05.2016, 21:28
|
|
Прописка
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: WDT
Сообщение от rusyvochka
|
Цитата:
области адресов 70h-7Fh, которые "видятся" из любого банка ОЗУ
Это почему же? Обьясните пож. или где прочитать? Никогда не встречал.
|
Блин, в даташите же Addresses F0h-FFh, 170h-17Fh and 1F0h-1FFh are
implemented as common RAM and mapped back to addresses 70h-7Fh.
Признайтесь, почему PIC16 а не ардуина?
|
|
|
|
24.05.2016, 21:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,510
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: WDT
Ну в даташите ведь. Memory Map. Там в табличке с регистрами написано, что "accesses 70h-7Fh" для остальных банков. Интересно, как до сих пор вы обеспечивали сохранение контекста, если у вас он сохранялся фактически в разные физические регистры? Отсюда то и ошибки и неразберихи в работе кода.
А с banksel есть другая ловушка. Фактически, эта директива разворачивается в две инструкции (для МК с четырьмя банками) и при всякого рода btfss или $+5 можно просчитаться...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:42.
|
|