|
XMEGA, RTC и программный сброс |
|
|
|
Feb 24 2013, 14:41
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ILYAUL @ Feb 24 2013, 15:40)  Это если Вы выходите 0x0000 ? А если перенести "точку сброса" Имеется в виду что-то такое: Код unsigned char tmp=RST_SWRST_bm; CCP = CCP_IOREG_gc; RST.CTRL=tmp; Нужной фичи можно ожидат в xmega с батарейным питанием, но вот есть ли она там и как сделана - вопрос.
|
|
|
|
|
Feb 24 2013, 15:53
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(ILYAUL @ Feb 24 2013, 18:00)  ИМХО RTC в XMEGA - бесполезная вещь, так , чисто маркетинг. Да ладно. Довольно много изделий на иксмегах с часами на ней и батарейкой чудно работают. Но я ниразу не инициировал системный сброс из программы. Недавно пожаловались что некоторые изделия не включаются при подаче питания (т.е. они включаются но неработают как надо). Оказалось что для восстановления работоспособности надо полностью обесточить процессор (вынуть батарейку) и после этого всё опять чудно работает. Получается что при работе был какойто сбой (отвёртка упала на включённую прлату, молния или опять же метеорит (болид  ) рядышком пролетел), процессор "улетел" и натворил чегото со своими регистрами. И для того чтобы все их снова инициализировать нужно дать ему сброс. Вот я и подумал инициировать системный сброс из программы всегда при подаче питания. Но боюсь часы отставать будут ввиду их выключения на время выполнения сброса.
|
|
|
|
|
Feb 24 2013, 16:33
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(zombi @ Feb 24 2013, 17:53)  Недавно пожаловались что некоторые изделия не включаются при подаче питания (т.е. они включаются но неработают как надо). Оказалось что для восстановления работоспособности надо полностью обесточить процессор (вынуть батарейку) и после этого всё опять чудно работает. А BOD разрешён? Цитата(zombi @ Feb 24 2013, 17:53)  Получается что при работе был какойто сбой (отвёртка упала на включённую прлату, молния или опять же метеорит (болид  ) рядышком пролетел), процессор "улетел" и натворил чегото со своими регистрами. И для того чтобы все их снова инициализировать нужно дать ему сброс. И watchdog не помогает?
|
|
|
|
|
Feb 24 2013, 16:51
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Нужно переделать прорамму так чтобы сброс был не нужен. Цитата(zombi @ Feb 24 2013, 18:53)  процессор "улетел" и натворил чегото со своими регистрами. И для того чтобы все их снова инициализировать нужно дать ему сброс. Программа может сама инициализировать _все_ регистры процессора, в том числе значениями по умолчанию регистры неиспользуемой периферии. И делать это надо регулярно, в основном цикле. А то вдруг космический протон пролетел и какой-нибудь регистр сбился.
|
|
|
|
|
Feb 24 2013, 18:49
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ Feb 24 2013, 20:33)  А BOD разрешён? Конечно, но что от него толку если процессор всегда запитан либо от внешнего блока питания либо от внутренней батарейки. Цитата(_Артём_ @ Feb 24 2013, 20:33)  И watchdog не помогает? watchdog не использую. На думаю что он тоже не всегда поможет, процессор же после сбоя работает, чего то делает, только неизвестно чего и вполне может собаку сбрасывать. Цитата(maksimp @ Feb 24 2013, 20:51)  Нужно переделать прорамму так чтобы сброс был не нужен. Возможно. Цитата(maksimp @ Feb 24 2013, 20:51)  Программа может сама инициализировать _все_ регистры процессора, в том числе значениями по умолчанию регистры неиспользуемой периферии. И делать это надо регулярно, в основном цикле. А то вдруг космический протон пролетел и какой-нибудь регистр сбился. дайте пример кода  Сделал сброс при каждом включении питания. Раз сто уже вкл.-выкл. часы не отстают (или я не могу увидеть это отставание). Как такое может быть
|
|
|
|
|
Feb 25 2013, 15:15
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(demiurg_spb @ Feb 25 2013, 17:29)  Проще и надёжнее ресетнуть по-настоящему  Вот по псевдо настоящему и ресетаю. Померял время теряемое RTC при формировании процессором программного сброса. На всё про всё уходит примерно 65-75 мкс. т.е. на пробуждение, обработку прерывания RTC, выполнение сброса и повторную инициализацию RTC. Даже если предположить что при каждом включении изделия будет теряться аж 3 такта RTC и в день изделие вкючат аж 20 раз получаем потерю всего 60-ти тактов. На фоне 30ppm самого кварца (+-84935 тактов в сутки) это просто мизер. А если при повторной инициализауии RTC стартануть не с нуля а с троечки то вообще можно забыть что часы останавливались Если я где то ошибся поправьте плиз.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|