реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос про искусственный холодный старт, нет ли каких подводных камней ?
ttron
сообщение Jan 10 2007, 17:28
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 1-06-05
Из: Москва
Пользователь №: 5 634



Нужно организовать искусственный холодный старт микроконтроллера PIC16F877. Для этого просто сбрасываю в ноль бит POR регистра PCON и перехожу на 0-й адрес (обычно этот бит сбрасывается аппаратно при включении питания). Там программа анализирует этот бит и работает по "холодному" старту, а затем устанавливает бит POR, чтобы все остальные рестарты были "теплые".
Корректно ли так делать, или есть какие-то подводные камни?


--------------------
"Регистрируй, наблюдай, экономь микросекунду, зря вопрос не задавай, не запоминай ерунду" (с) не помню, чье
Go to the top of the page
 
+Quote Post
DL36
сообщение Jan 11 2007, 11:45
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(ttron @ Jan 10 2007, 18:28) *
Нужно организовать искусственный холодный старт микроконтроллера PIC16F877. Для этого просто сбрасываю в ноль бит POR регистра PCON и перехожу на 0-й адрес (обычно этот бит сбрасывается аппаратно при включении питания). Там программа анализирует этот бит и работает по "холодному" старту, а затем устанавливает бит POR, чтобы все остальные рестарты были "теплые".
Корректно ли так делать, или есть какие-то подводные камни?

Наверно так будет не совсем корректно.
Посмотрите на таблицу состояния регистров после сброса. В Вашем случае это выполнено не будет. Если есть свободная нога то ее завести на сброс. После сброса порт будет в третьем состоянии, вывод инициализируем 1 и вперед. Резистор ом так 300 не забыть.

Сообщение отредактировал DL36 - Jan 11 2007, 11:48
Go to the top of the page
 
+Quote Post
xemul
сообщение Jan 11 2007, 16:19
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(ttron @ Jan 10 2007, 17:28) *
Нужно организовать искусственный холодный старт микроконтроллера PIC16F877. Для этого просто сбрасываю в ноль бит POR регистра PCON и перехожу на 0-й адрес (обычно этот бит сбрасывается аппаратно при включении питания). Там программа анализирует этот бит и работает по "холодному" старту, а затем устанавливает бит POR, чтобы все остальные рестарты были "теплые".
Корректно ли так делать, или есть какие-то подводные камни?

POR и BOR программно можно только установить в 1. Сбрасываются в 0 они аппаратно.
Если пишете на асме, то просто перед "goto 0" запишите в пару-тройку-... GPR какую-нибудь сигнатуру и анализируйте ее после сброса. Если на С, то определите пару-тройку-... переменных как persistent (они не будут инициализированы 0 в startup'е), дальше аналогично.
А если хочется совсем исключить вероятность ошибочного распознавания причины сброса, пишите флаг в EEPROM.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jan 14 2007, 15:58
Сообщение #4





Guests






Цитата(DL36 @ Jan 11 2007, 11:45) *
Наверно так будет не совсем корректно.
Посмотрите на таблицу состояния регистров после сброса. В Вашем случае это выполнено не будет. Если есть свободная нога то ее завести на сброс. После сброса порт будет в третьем состоянии, вывод инициализируем 1 и вперед. Резистор ом так 300 не забыть.

Хороший способ. Только внутрисхемное программирование становится невозможным. На сброс (MCLR) при этом подается 13В и на вход, соединенный с ним - тоже, что недопустимо! Нужно предусмотреть "развязку".
Go to the top of the page
 
+Quote Post
DL36
сообщение Jan 14 2007, 18:43
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(@Ark @ Jan 14 2007, 16:58) *
Хороший способ. Только внутрисхемное программирование становится невозможным. На сброс (MCLR) при этом подается 13В и на вход, соединенный с ним - тоже, что недопустимо! Нужно предусмотреть "развязку".

Да для развязки транзистор прийдется поставить.
Хотя автор молчит наверно это ему уже неинтересно.
Go to the top of the page
 
+Quote Post
ttron
сообщение Jan 15 2007, 00:34
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 1-06-05
Из: Москва
Пользователь №: 5 634



Цитата
Хотя автор молчит наверно это ему уже неинтересно.

Всем спасибо. Автор не молчит, у него был день рожденья, который на некоторое время выбил его из колеи праведной жизни tort.gif

Исследования показали, что вобщем все работает нормально (т.е. устанавливать POR в "0" программно можно), это позволит на начальном участке программы опознать старт как холодный. При этом действительно, надо, кроме всего прочего, отследить правильный сброс всех используемых регистров аппаратуры, т.к. реального аппаратного сброса не происходит, поэтому придется все это проделать программно. В моем случае это можно сделать, но, возможно, существуют ситуации, когда такое не пройдет. Тогда, видимо, придется воспользоваться вышеприведенными советами.

В любом случае спасибо все неравнодушным a14.gif


--------------------
"Регистрируй, наблюдай, экономь микросекунду, зря вопрос не задавай, не запоминай ерунду" (с) не помню, чье
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 15 2007, 00:47
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может я не совсем в тему, но вроде как "холодный" старт подразумевает выключение/включение питания, или нет? "Горячий"-же сброс через всякие ватчдоги, BOR, RESET и прочие не гарантирует сброс периферии и других устройств. А также требует реинициализации всей периферии. Особенно проблематично сбросить "горячим" сбросом, когда произошло зависание по причине "защелкивания" входов. Например, для большинства LСD коммутация питания для сброса это просто необходимость. Иначе готовое устройство скорее всего не пройдет тесты на EMI совместимость. Чаще всего LCD по которому "лупили" разрядом, можно сбросить только сняв и вновь подав питание.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jan 15 2007, 02:15
Сообщение #8





Guests






Цитата(rezident @ Jan 15 2007, 00:47) *
Может я не совсем в тему, но вроде как "холодный" старт подразумевает выключение/включение питания, или нет? "Горячий"-же сброс через всякие ватчдоги, BOR, RESET и прочие не гарантирует сброс периферии и других устройств. А также требует реинициализации всей периферии. Особенно проблематично сбросить "горячим" сбросом, когда произошло зависание по причине "защелкивания" входов. Например, для большинства LСD коммутация питания для сброса это просто необходимость. Иначе готовое устройство скорее всего не пройдет тесты на EMI совместимость. Чаще всего LCD по которому "лупили" разрядом, можно сбросить только сняв и вновь подав питание.

Будем говорить применительно к PIC16F877. Процедура (последовательность) сброса - одна и та же, а причины сброса могут быть различны: включение питания, снижения питания, внешний сброс (по MCLR), ошибка четности памяти и т.п.
Состояние регистров по выходу из состояния сброса (начало работы) могут быть различны в зависимости от причины сброса. Кстати, для решения, предложенного DL36, состояние регистров будет соотвествовать внешнему сбросу (по MCLR), а не сбросу по включению питания, как это имеет место при "холодном старте". Состояния регистров могут отличаться! Так что полной имитации "холодного старта" - может и не получиться (см. Data Sheet) . Но нужно ли это в данном конкретном случае - не уверен.
Что касается "зависаний", то сброс по WDT как раз предназначен для вывода устройства из таких состояний. Насколько это надежно - не берусь судить. Например устройство может "зависнуть" и при старте, непосредственно в состоянии сброса (при слишком медленном нарастании напряжения питания). Здесь WDT не поможет. Только включение/выключение.
Go to the top of the page
 
+Quote Post
DL36
сообщение Jan 15 2007, 09:15
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(@Ark @ Jan 15 2007, 03:15) *
Будем говорить применительно к PIC16F877. Процедура (последовательность) сброса - одна и та же, а причины сброса могут быть различны: включение питания, снижения питания, внешний сброс (по MCLR), ошибка четности памяти и т.п.
Состояние регистров по выходу из состояния сброса (начало работы) могут быть различны в зависимости от причины сброса. Кстати, для решения, предложенного DL36, состояние регистров будет соотвествовать внешнему сбросу (по MCLR), а не сбросу по включению питания,

Эту тему можно продолжить, никто не мешает поставить ключик для коммутирования питания, а управлять им с помощью однопереходного транзистора и RC цепочки.
Цитата
как это имеет место при "холодном старте". Состояния регистров могут отличаться! Так что полной имитации "холодного старта" - может и не получиться (см. Data Sheet) . Но нужно ли это в данном конкретном случае - не уверен.
Тут судить можно только зная схему.
Цитата
Что касается "зависаний", то сброс по WDT как раз предназначен для вывода устройства из таких состояний. Насколько это надежно - не берусь судить. Например устройство может "зависнуть" и при старте, непосредственно в состоянии сброса (при слишком медленном нарастании напряжения питания). Здесь WDT не поможет. Только включение/выключение.

Я использую медленное нарастание питания, проблем нет. Можно и супервизор по питанию поставить.
Go to the top of the page
 
+Quote Post
ttron
сообщение Jan 15 2007, 10:33
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 1-06-05
Из: Москва
Пользователь №: 5 634



Цитата(@Ark @ Jan 15 2007, 02:15) *
Цитата(rezident @ Jan 15 2007, 00:47) *

Может я не совсем в тему, но вроде как "холодный" старт подразумевает выключение/включение питания, или нет? "Горячий"-же сброс через всякие ватчдоги, BOR, RESET и прочие не гарантирует сброс периферии и других устройств. А также требует реинициализации всей периферии. Особенно проблематично сбросить "горячим" сбросом, когда произошло зависание по причине "защелкивания" входов. Например, для большинства LСD коммутация питания для сброса это просто необходимость. Иначе готовое устройство скорее всего не пройдет тесты на EMI совместимость. Чаще всего LCD по которому "лупили" разрядом, можно сбросить только сняв и вновь подав питание.

Будем говорить применительно к PIC16F877. Процедура (последовательность) сброса - одна и та же, а причины сброса могут быть различны: включение питания, снижения питания, внешний сброс (по MCLR), ошибка четности памяти и т.п.
Состояние регистров по выходу из состояния сброса (начало работы) могут быть различны в зависимости от причины сброса. Кстати, для решения, предложенного DL36, состояние регистров будет соотвествовать внешнему сбросу (по MCLR), а не сбросу по включению питания, как это имеет место при "холодном старте". Состояния регистров могут отличаться! Так что полной имитации "холодного старта" - может и не получиться (см. Data Sheet) . Но нужно ли это в данном конкретном случае - не уверен.
Что касается "зависаний", то сброс по WDT как раз предназначен для вывода устройства из таких состояний. Насколько это надежно - не берусь судить. Например устройство может "зависнуть" и при старте, непосредственно в состоянии сброса (при слишком медленном нарастании напряжения питания). Здесь WDT не поможет. Только включение/выключение.

Вы совершенно правы. Собственно производитель и накрутил кучу флагов, чтобы можно было распознать причину сброса и адекватно на нее прореагировать. В моем случае надо было "обмануть" программу. Чтобы приблизиться к имитации холодного старта, я программно сбрасываю все нужные мне регистры аппаратуры в состояние, имеющее место при включении питания. В моей ситуации это оказалось сделать возможно. Наверное, бывают ситуации, когда это проблематично.
В любом случае благодарю всех откликнувшихся - небольшая дискуссия позволила упорядочить информацию на эту тему cool.gif


--------------------
"Регистрируй, наблюдай, экономь микросекунду, зря вопрос не задавай, не запоминай ерунду" (с) не помню, чье
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 20:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016