|
|
  |
atmega88pa, принудительный сборос - програмно |
|
|
|
Oct 8 2012, 16:47
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(max_mart @ Oct 8 2012, 19:30)  volatile unsigned char example=0x00; Совершенно излишне: Код volatile unsigned char example; тот же результат даст.
|
|
|
|
|
Oct 8 2012, 17:20
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(max_mart @ Oct 8 2012, 19:59)  хотите сказать, что она все время будит инициализироваться нулевой при самом первом запуске(по питанию)? При любом перезапуске так будет (они все через один вектор идут). Цитата(max_mart @ Oct 8 2012, 19:59)  А не может быть такого, что там может быть записан мусор Не может такого быть, если условия эксплуатации не нарушены.
|
|
|
|
|
Oct 8 2012, 17:30
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(prottoss @ Oct 8 2012, 18:26)  Сброс по WDT работает так же как и сброс от внешнего RESET. За исключением того, что при этом взводится флаг WDRF в MCUSR, который держит в 1-ке бит WDE в WDTCSR (обратите внимание на X вместо 0 в «состоянии после сброса» для WDE). Т.е. после сброса по WDT этот самый WDT оказывается гарантированно разрешённым, а после сброса по RESET — ну, зависит от фьюза WDTON :-) Т.е. мало просто использовать вызов вызов рекомендованных Reset()/mcu_reset(), надо добавить при старте очистку источников сброса в MCUSR и запрет WDT.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Oct 8 2012, 17:50
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
MCUSR = 0; сделать всегда, так как оставшийся от сброса по WDT бит (1 << WDRF) не даст ни запретить WDT, ни, как выше было сказано, изменить время (а уж оно-то по сбросу будет поставлено на минимальное).
После чего запретить либо сбросить WDT, в зависимости от того, используется ли он по прямому назначению.
Если WDT использовался только для сброса контроллера, то надо его запретить. Он разрешён после своей сработки и через 16 мс сработает опять.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Oct 8 2012, 20:13
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(max_mart @ Oct 8 2012, 21:01)  Сначала инициализирую МК,потом отключаю watchdog и сбрасываю флаг WDRF функцией WDT_Off(функцию взял прямо из даташита) Тоже как-то взял из даташита - но она в 4 такта не уложилась... Цитата(max_mart @ Oct 8 2012, 22:36)  Да и еще момент: Не может быть такого, что дапустим сразу при первом запуске МК(подачи питания) флаг WDRF установится в 1 или же он строго устанавливается только по срабатыванию ресета от вотчдог? Цитата This bit is set if a Watchdog System Reset occurs. The bit is reset by a Power-on Reset, or by writing a logic zero to the flag. То есть если флаг установился (сбросом по wdt), то вернуть его в 0 может только запись 0 или Power-on Reset (но не BOD или Ext Reset). Цитата(max_mart @ Oct 8 2012, 22:36)  И порты сбрасываются все в состояние, как выхода в высокоомном состоянии(состояние высокого импенданса)? Да все в Z-state. Initial Value для DDRx и PORTx = 0.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|