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

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Как заполнить свободную память?, программная защита
namelos
сообщение Sep 25 2007, 12:38
Сообщение #1


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток, господа эмбеддеры.
Написал программу в AVRStudio-WinAVR 20070525(avr gcc 4.1.2) . В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0" и посчитать CRC всего кода программы для проверки целостности. Подскажите пожалуйста, как мне это реализовать. Если можно поподробнее. Заранее спасибо.

Сообщение отредактировал namelos - Sep 25 2007, 13:31
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 25 2007, 12:50
Сообщение #2


Профессионал
*****

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



А в чем защита если заполнить всю память джампами? А вот грузиться при перепрошивке код будет реально дольше.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 25 2007, 13:00
Сообщение #3


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Цитата
А в чем защита если заполнить всю память джампами?

Использование джампов параллельно WDT, полагаю, снизит вероятность подвисания контроллера. Или Вы думаете, уважаемый GDI, что только WDT уже достаточно?

Сообщение отредактировал namelos - Sep 25 2007, 13:31
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 25 2007, 13:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 namelos - а что для вас означают слова - "..подвисание контроллера.."?
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 25 2007, 14:26
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(namelos @ Sep 25 2007, 16:00) *
Использование джампов параллельно WDT, полагаю, снизит вероятность подвисания контроллера.

Не снизит оно ровным счетом ничего.
Заполнять свободное пространство джампами нет смысла, потому что опкод FFFF, которым заполнен флеш, к зацикливанию не может привести, а следовательно PC самостоятельно выйдет на адрес 0.
Проверку целостности должна выполнять программа-компаньен (загрузчик) размещенная в boot секции, и реагировать на сбой флеша соответвенно - давать возможность перезашить чип.
Но в подавляющем большинстве случаев - достаточно только WDT.
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 25 2007, 14:58
Сообщение #6


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Цитата(defunct @ Sep 25 2007, 18:26) *
Проверку целостности должна выполнять программа-компаньен (булоадер) размещенная в boot секции, и реагировать на сбой флеша соответвенно - давать возможность перезашить чип.

Уважаемый defunct,
Сразу появляется вопрос, как организовать проверку целостности? Что проверять, всю программную часть или только часть?
По вашим суждениям я понял, что заполнение свободной памяти не имеет смысла, но к сожалению не услышал как это сделать. Как я предствляю, заполнить память возможно только изменением hex-файла с дописанием бинерной команды rjmp 0. Есть ли способ попроще?

2 Kuzmi4, под "подвисанием" контроллера- понимаю зацикленную работу контроллера, например при получении в PC aдреса сводного байта памяти с неизвестным содержанием.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 25 2007, 15:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



В приведённом вами примере собачка - идеальный вариант...
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 25 2007, 15:09
Сообщение #8


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Цитата(Kuzmi4 @ Sep 25 2007, 19:02) *
В приведённом вами примере собачка - идеальный вариант...

Согласен, но прочитав о программной защите с помощью джампа на свободной памяти, задумался как добраться до нее. Да и резервная защита не помешает.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Sep 25 2007, 15:37
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Какова гарантия ,что не слетят начальные адресса кода ? smile.gif ,не поможет ни собака ни джампер.
Вообще у меня флеша как правило слетала полностью.

Забивать НЕХ запаритесь ,rjmp - это команда относительного перехода ,тоесть каждая последующий адресс перехода в ней на 1 больше,если охота попасть в одну и туже точку.
Вообще такие проблемы решаются как правило ваянием простенькой утилитки на компе в течении 30-60 минут smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 25 2007, 16:31
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(namelos @ Sep 25 2007, 17:58) *
Сразу появляется вопрос, как организовать проверку целостности? Что проверять, всю программную часть или только часть?

У меня проверяется вся секция основной программы.
Как это делается -
Есть программа упаковщик (на PC), и программа bootloader распаковщик в MK.
упаковщик открывает Hex файл, добавляет к нему одну страничку флеш со служебной информацией (дата/время создания, код железа для которого предназначена прошивка, версия, название, CRC и т.п.), шифрует все это дело. В МК зашивается bootloader, лочится секция бутлоадера и основной программы. Потом запакованный ранее файл шьется в МК уже средствами бутлоадера (расшифровывается внутри МК). Bootloader при старте МК провереяет CRC секции основной программы, с CRC записанной в служебной страничке флеш. Если совпадает - передает управление на адрес 0, если не совпадает - включает красный светодиод (если есть) и ждет команд сверху.

Цитата
По вашим суждениям я понял, что заполнение свободной памяти не имеет смысла, но к сожалению не услышал как это сделать.

перепаковать Hex в Bin, добавить требуемую информацию, и перепаковать Bin обратно в Hex.

Цитата
Как я предствляю, заполнить память возможно только изменением hex-файла с дописанием бинерной команды rjmp 0. Есть ли способ попроще?

Если только добавить заполнитель, то возможно есть соответвующая опция линкера, но я этим особо не интересовался.
Go to the top of the page
 
+Quote Post
fmdost
сообщение Sep 25 2007, 16:46
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(namelos @ Sep 25 2007, 16:38) *
В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0"

Надо бы не
Код
jamp 0

а
Код
$ jamp $

Тогда собачка сделает сброс по таймауту, и это будет настоящий(правильный) сброс.
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 26 2007, 07:27
Сообщение #12


Профессионал
*****

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



Да зачем это делать то? Стертая флешь имеет вполне определенное значение в ячейках, как уже упоминалось 0xFFFF - это команда SBRS R31,7, если программа каким то образом попадет на незашитую область, то просто дойдет до конца памяти программ и попадет на нулевой адрес, если раньше не сработает собака и все не перезагрузит. Зачем изобретать велосипед и бороться с несуществующими проблемами? Другое дело что после подобной перезагрузки(что собакой, что джампом) в ОЗУ будут какие то значения, которые там были на момент сбоя и как это повлияет на дальнейшую работу программы не известно, на и отсюда есть выход - инициализировать переменные перед использованием.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 26 2007, 08:43
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GDI @ Sep 26 2007, 10:27) *
Другое дело что после подобной перезагрузки(что собакой, что джампом) в ОЗУ будут какие то значения, которые там были на момент сбоя и как это повлияет на дальнейшую работу программы не известно
С точки зрения программы содержимое ОЗУ можно рассматривать как такой же случайный мусор, как и при включении питания.
Цитата(GDI @ Sep 26 2007, 10:27) *
, на и отсюда есть выход - инициализировать переменные перед использованием.
Инициализировать надо в любом случае. Ибо при включении питания там тоже может быть что угодно. При написании на С об этом заботится компилятор, точнее модуль cstartup, и он сделает все, что положено (обнулит глобальные переменные, в инициализированные запишет начальные значения). А если код на асме, то инициализировать надо вручную, но все равно это это надо делать в любом случае, даже если не предполагается такой программный рестарт.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Sep 26 2007, 12:12
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Сергей Борщ @ Sep 26 2007, 12:43) *
С точки зрения программы содержимое ОЗУ можно рассматривать как такой же случайный мусор, как и при включении питания.Инициализировать надо в любом случае.

У меня не инициализировались при включении/RESETe регистровые пары X и Y, пока не написал обнуление вручную - "многа думаль". Это было на 90S8515.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 26 2007, 14:39
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Maik-vs @ Sep 26 2007, 15:12) *
"многа думаль". Это было на 90S8515.
Достаточно заглянуть в даташит - там нигде не сказано, что регистры ядра обнуляются при ресете или включении питания. Для регистров периферии такая информация есть, для ядра и ОЗУ - естественно нет, ибо зачем их обнулять аппаратно?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 26 2007, 14:47
Сообщение #16


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Разобрался с Intel-hex файловым форматом, но в конце каждой строки hex файла стоят 2 байта 0D 0A, значение которых пока непонятно. Или они просто заканчивают строку?
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 26 2007, 15:07
Сообщение #17


Профессионал
*****

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



0d 0a = \r\n - это перевод строки


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 26 2007, 15:57
Сообщение #18


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



GDI, спасибо.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 27 2007, 15:27
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(namelos @ Sep 25 2007, 16:38) *
Доброе время суток, господа эмбеддеры.
Написал программу в AVRStudio-WinAVR 20070525(avr gcc 4.1.2) . В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0" и посчитать CRC всего кода программы для проверки целостности. Подскажите пожалуйста, как мне это реализовать. Если можно поподробнее. Заранее спасибо.

Чтобы проц поменьше слетал , очень важно !!! сделать правильную разводку питания на проц.
Как показывает опыт , при правильной разводке питания может даже не потребоваться собака ( если конечно же речь не идёт о сверхмощьных ЭМ помехах вблизи ) . Это первое .
Если хочется побольше надёжность , - совет - не жмитесь и ставьте внешний тактовый генератор . В крайнем случае , если такой возможности нет , то включите у проца бит максимальной амплитуды тактового сигнала . Но внешний генератор вне конкуренции .
Не жмитесь на фильтрацию по питанию .
Очень непомешает внешний супервизор с отличным от Brown-out проца значением . Т.е. например Brown-out проца заводишь на 4 вольта , а внешний применяешь со значением 4,5 вольта ( например MCP-450 производства Microchip ).
Если внешний сброс не применяешь , то через 1 килоом вывод сброса на питание проца , и его же через 0,1 микрофарата об землю.
Собаку я включал последний раз лет 5 назад . При тысячах едениц выпущенной продукции вроде бы нареканий нет.
Что касается rjmp 0 , то как правильно уже было замечено , должно быть jmp 0 , но смысл в этом нулевой .
При старте можно сделать проверку CRC кода (ATMEL в одном из app. показывает как это сделать ) , и если битая память , то заставить девайс перепрошить .
Если всё это делаешь , то забываешь о rjmp 0 и о jmp 0
Удачи
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 27 2007, 16:10
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Yuriy_AVR @ Sep 27 2007, 18:27) *
Собаку я включал последний раз лет 5 назад . При тысячах едениц выпущенной продукции вроде бы нареканий нет.

У Вас либо очень простая программа, либо Вы один из немногих гениев которые не допускают ошибок.
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 27 2007, 20:57
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(defunct @ Sep 27 2007, 20:10) *
У Вас либо очень простая программа, либо Вы один из немногих гениев которые не допускают ошибок.
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.

Ни то , ни другое . Что касается программ , то по обьёму кода программы конечно же разные , но как правило не менее 30-40К памяти программ ( все программы пишу на асме ) Так что не очень они маленькие , я вас уверяю . И проц шуршит аж воротник заворачивается - прерывание на прерывании . И пожалуйста только не надо приводить старые как мир догмы - писали бы на Си . . . Я и на Си могу , но для меня асм комфортнее .
Гением конечно же себя не считаю , и ошибки бывают , кто не грешен ?
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.
biggrin.gif wink.gif cool.gif
Это что же получается - производители вводят в проц апаратные вещи для защиты от кривых программистов ? Неожиданная мысль , очень неожиданная .
На самом деле это не совсем так . Вы не задумывались почему некоторые процы (рядовые) ( например MSC-51) работают на 50 MHz , а у AVRов пока планка в 20-24 MHz ? Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой .Так вот - сбой хотя бы по одному из этих подтактов приводит к разным непредсказуемым последствиям (и подвисаниям в том числе ) . Именно поэтому важна хорошая форма тактовых импульсов , так как на основании её формируются внутренние подтакты . Некоторые производители ( NEC например) применяют для защиты от такого рода вещей специальный аппаратный механизм правильной выборки команды из памяти программ. Именно для подобных вещей держат псов , а не для защиты от программистов !!! .
Небольшое лирическое отступление-: когда - то давно , когда я ещё был студентом , нас то и дело доставал препод по программированию составлением алгоритмов . Всех это уж очень достало , и я один раз в сердцах спросил - когда же вместо вской ерунды мы начнём изучать языки программирования ?.
На что получил ответ , который оценил позднее - язык программирования это инструмент , а программа - это исскусство и часть души . В корявых руках и скрипка Страдивари будет не более чем куском дерева
.
Умный был ( надеюсь ещё есть ) препод .

Лет 10 назад делал одну програмку . Писал , она работала , дописывал , она опять работала , пока в один момент всё не стало работать очень коряво . . . ( справедливости ради надо сказать что у неё была очень сложная структура ) . Разбираться в огромном куске кода небыло никакого желания - крышу срывало.
Было принято волевое решение - взять и разрисовать прогу на блоки , сначала крупные , потом помельче , потом ещё мельче . В итоге ( после месяца спания по 4-5 часов за ночь ) - получилась структурная схема программы. Она была очень тщательно осмыслена и проверена на логику работы .
Меня тогда удивило - по структурной схеме мне только и оставалось что просто тупо подставлять ассемблерные операторы , что у меня получалось очень и очень быстро ( за неделю одолел 32К ). Кстати , предыдущий кусок весил 36К .
Первое включение после компиляции и прошивки и . . . . . каково же было моё удивление , что программа заработала сразу , и без малейших шороховатостей . Я после включения не изменил в программе ни одной буквы , так до сих пор и работает . После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени , затем начинаю на бумаге делать наброски , потом всё чётче и чётче вырисовывается программа , нечто наподобе проявки фотографии , или прорисовки художника. Совет - хотите писать хорошие программы - делайте именно так - я вас уверяю - времени в итоге тратится меньше , сохраняется "бумажная копия" работы программы ( в которой может разобраться при необходимости практически любой грамотный человек , даже далёкий от программирования ). А ошибки ищются на ура . И никакой язык программирования не сравнится по наглядности ( Си в том числе ) . . . Поэтому лично для меня какие из операторов подставить в программу - асм или Си особого значения не имеет .
От кривых рук программиста не спасёт ни собака , ни другие аппаратные вещи .
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Sep 27 2007, 22:56
Сообщение #22


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

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



bb-offtopic.gif
Цитата
После этого случая я любую программу пишу именно так - сначала хорошо обдумываю всю структуру программы , тратя на это прилично времени

Подтверждаю. Из своего немалого опыта программирования для PC вынес (правда, не сразу) эту же мысль - чем больше времени потратишь на тщательное продумывание программы (прежде чем прикасаться к клавиатуре), тем меньше общее время "продумывание+написание+отладка+доведение_до_ума".
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2007, 23:27
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вставлю-ка я свои 5 копеек:
Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7. Но никто почему-то не обратил внимания на то, что при R31.7=1 процессор может и не выйти на нулевой адрес. Так что заполнение имеет некоторый смысл (по крайней мере, заполнение последнего слова памяти).
Go to the top of the page
 
+Quote Post
ae_
сообщение Sep 28 2007, 02:09
Сообщение #24


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(aaarrr @ Sep 28 2007, 08:27) *
Вставлю-ка я свои 5 копеек:
Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7.
...

SBRS - Skip if Bit in Register is Set
16-bit Opcode: 1111_111r_rrrr_0bbb

Соответственно, опкод SBRS R31, 7 = 0xFFF7.
Среди документированных я не нашёл инструкцию с опкодом 0xFFFF.
Интересно, что делает контроллер, встретив такую инструкцию, пропускает?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2007, 02:24
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



AVR Studio декодирует так. Можно эмулятором проверить для надежности.
Go to the top of the page
 
+Quote Post
ae_
сообщение Sep 28 2007, 02:47
Сообщение #26


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(aaarrr @ Sep 28 2007, 11:24) *
AVR Studio декодирует так. Можно эмулятором проверить для надежности.

Вот дизасемблер АВРстудии:
+00000008: CFFA RJMP PC-0x0005 Relative jump
+00000009: FFFF ??? Data or unknown opcode
+0000000A: 0000 NOP No operation
+0000000B: FFFF ??? Data or unknown opcode

"...эмулятором проверить для надежности." - это шутка?
Эмулятор даже документированные фичи не все отрабатывает.
Go to the top of the page
 
+Quote Post
GDI
сообщение Sep 28 2007, 06:42
Сообщение #27


Профессионал
*****

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



Цитата
значение 0xFFFF - это код команды SBRS R31, 7

Я это узнал из дизасма IARа, а разработчики этого компилятора учавствуют в разработке опкодов команд для АВР. Правда это был дизасм кода из еепром, ну не встречается у меня в программе такого опкода...smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
AlexG_changed
сообщение Sep 28 2007, 07:26
Сообщение #28


Участник
*

Группа: Validating
Сообщений: 64
Регистрация: 16-06-05
Пользователь №: 6 073



В процессе отладки с JTAG-ICE на ATmega128 сам наблюдал как попадая на незапрограммированную область процессор доходит до конца флэша и начинает выполнение программы с начала.

Сообщение отредактировал AlexG - Sep 28 2007, 07:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2007, 07:59
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(defunct @ Sep 27 2007, 19:10) *
WDT не защищает от помех, WDT может защитить от программных ошибок - зацикливания, тупиковых состояний КА и т.п.

Watchdog за многие годы спасал один раз и отнюдь не от программых ошибок - индустриальные PCшки попалась и ушла на объекты партия с какими-то дивными сбоями при работе DMA контроллера Ethernet - сносило крышу начисто. Watchdog чуть-чуть-чуть смягчил проблему до того, как через пару дней были приняты меры по обкладыванию работы с Ethernet подушками для обхода дефекта и последующей замены железа на рабочее. В принципе до этого эффекта Watchdog в этом софте размером порядка 300K даже не активировался. Давить программные ошибки Watchdog-ом чистый моветон sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 28 2007, 08:49
Сообщение #30


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Yuriy_AVR @ Sep 28 2007, 00:57) *
Это что же получается - производители вводят в проц апаратные вещи для защиты от кривых программистов ? Неожиданная мысль , очень неожиданная .
На самом деле это не совсем так . Вы не задумывались почему некоторые процы (рядовые) ( например MSC-51) работают на 50 MHz , а у AVRов пока планка в 20-24 MHz ? Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой .Так вот - сбой хотя бы по одному из этих подтактов приводит к разным непредсказуемым последствиям (и подвисаниям в том числе ) . Именно поэтому важна хорошая форма тактовых импульсов , так как на основании её формируются внутренние подтакты . Некоторые производители ( NEC например) применяют для защиты от такого рода вещей специальный аппаратный механизм правильной выборки команды из памяти программ. Именно для подобных вещей держат псов , а не для защиты от программистов !!! .


Есть у меня одна неразрешенная загадка: в одной программе на MEGA8, интенсивно использующей инструкции Ldd/Std, иногда наблюдались ошибки на границах страницы ОЗУ 0x00..0x100. Это может быть тоже гонка фронтов?

А на счет заполнения- NOP - и вся любовь smile.gif
Затем, после rjmp Start, обязательно, CLI и инициализация всего, чего надо, как будто
мы не знаем ничего о начальных значениях портов. Теперь у нас "взбрык" от сброса внешне ничем не отличается.
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 28 2007, 08:51
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Yuriy_AVR @ Sep 27 2007, 19:27) *
Если внешний сброс не применяешь , то через 1 килоом вывод сброса на питание проца , и его же через 0,1 микрофарата об землю.


В который раз повторяю: нежелательно вешать на ресет ёмкости! Почему? А обьясните мне что будет при пропадании питания?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2007, 08:56
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ae_ @ Sep 28 2007, 06:47) *
"...эмулятором проверить для надежности." - это шутка?
Эмулятор даже документированные фичи не все отрабатывает.

Тогда без эмулятора, руками - делов то.
Старая студия (3.56) в дизассемблере выдает тоже SBRS R31, 7.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Sep 28 2007, 09:17
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Petka @ Sep 28 2007, 12:51) *
В который раз повторяю: нежелательно вешать на ресет ёмкости! Почему? А обьясните мне что будет при пропадании питания?

Cработает BOD-если он включен и правильно настроен порог,т.е ничего страшного не будет.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 28 2007, 09:41
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 WHALE - не совсем. я так подозверваю что Petka имел ввиду чт оесли уровень на ресете будет падать медленнее чем на питании МК , то мы потом поимеем геморрой...
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 28 2007, 09:51
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kuzmi4 @ Sep 28 2007, 13:41) *
2 WHALE - не совсем. я так подозверваю что Petka имел ввиду чт оесли уровень на ресете будет падать медленнее чем на питании МК , то мы потом поимеем геморрой...

кроме того. ресет на защищён диодом на питание. т.к. ресет используется для высоковольтного программирования. итого, что будет проиходить с контроллером, когда у него уровень на ресете выше питания? потом. если питание пропадало на время, меньшее чем время разряда конденсатора, то на контроллер не придёт сигнал ресета =( хотя должен. на BOD надейся, а сам не плошай.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 28 2007, 10:18
Сообщение #36


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Yuriy_AVR @ Sep 27 2007, 23:57) *
Дело в том , что у AVRов выборка команды производится за 1 такт генератора , но за 4 внутренних такта , которые формируются специальной внутренней аппаратной схемой


Это откуда же такое тайное знание? Вы видели исходник? wink.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 28 2007, 10:35
Сообщение #37


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Sep 28 2007, 02:27) *
Вставлю-ка я свои 5 копеек:
Как уже упоминалось ранее, значение 0xFFFF - это код команды SBRS R31, 7. Но никто почему-то не обратил внимания на то, что при R31.7=1 процессор может и не выйти на нулевой адрес.

Вы имеете в виду, выход на адрес 0x0001 вместо 0x0000. Да действительно возможно, но не проще ли будет по адресу 0x0001 поставить JMP туда же куда делается в инструкции по адресу 0x0000. Тем более вы упускаете тот факт, что процессор может прыгнуть в несуществующую область памяти, при чтении которой возвращается тот же 0xFFFF, вероятность прыжка в несуществующую область памяти прямопропорциональна количеству оной, например для M16 вероятность прыжка в несуществующую область памяти = (128 - 16)/128 = 7/8 = 0.875

Цитата(zltigo @ Sep 28 2007, 10:59) *
В принципе до этого эффекта Watchdog в этом софте размером порядка 300K даже не активировался. Давить программные ошибки Watchdog-ом чистый моветон sad.gif

Позволю себе несогласиться с вашим выводом.
Про моветон можете говорить в форуме по АРМ, у которого имеется возможность обработать или "задампить" крашевую ситуацию (DABT/PABT/UNDF). У AVR'ра нет обработчиков исключений и в промышленных изделиях только WDT может подстраховать в случае серьезного программного сбоя. WDT в AVR можно рассматривать как обработчик исключений. Считаю, что конечный продукт на AVR с отключенным WDT - дилетанство, такое же как если в изделии оставить чип в отладочном режиме (фуз OCDEN).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2007, 10:49
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(defunct @ Sep 28 2007, 13:35) *
Считаю, что конечный продукт на AVR с отключенным WDT дилетанство...

Речь шла не о том использовать или нет Watchdog - использовать, а о том, что латать Watcdog-ом программные ошибки, а не фатальные сбои аппаратуры неправильно - софтово система должна быть живучей, обрабатывающей нештатные ситуации и самовыбирающейся из всевозможных положений. Естественно это стоит трудов, времени и кода....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 28 2007, 11:07
Сообщение #39


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Sep 28 2007, 13:49) *
Речь шла не о том использовать или нет Watchdog - использовать, а о том, что латать Watcdog-ом программные ошибки, а не фатальные сбои аппаратуры неправильно - софтово система должна быть живучей, обрабатывающей нештатные ситуации и самовыбирающейся из всевозможных положений. Естественно это стоит трудов, времени и кода....

Тогда вы возможно не так поняли мой первый пост.
Никто никогда не застрахован от программных ошибок, которые часто проявляются в полевых условиях, а не на стадии цикла тестирования. В ARM с отловом таких ошибок проще - по факту abort'a, сразу есть и место ошибки и стек (в AVR только по WDT). Отлаживать и устранять приходится по дампу памяти снятому в полевых условиях - такой процесс иногда затягивается на месяцы, и пока проблема устраняется, WDT скрывает проблему от потребителя (системе ж надо как-то работать), но он ни в коем случае не скрывает проблему от разработчика.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 28 2007, 11:18
Сообщение #40


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(defunct @ Sep 28 2007, 14:35) *
Вы имеете в виду, выход на адрес 0x0001 вместо 0x0000. Да действительно возможно, но не проще ли будет по адресу 0x0001 поставить JMP туда же куда делается в инструкции по адресу 0x0000. Тем более вы упускаете тот факт, что процессор может прыгнуть в несуществующую область памяти, при чтении которой возвращается тот же 0xFFFF, вероятность прыжка в несуществующую область памяти прямопропорциональна количеству оной, например для M16 вероятность прыжка в несуществующую область памяти = (128 - 16)/128 = 7/8 = 0.875


lol.gif Допустим, для MEGA16 PC "13-bit wide", как пишут на несравненном атмеле.
Я так понимаю: старшие биты уже в нулях. Далее, пусть глюк пошел по адресной шине.
Ну и что - будет не 0xFFFF, а выборка случайной команды по модулю 2^16 или 2^13, т.е. конкретный глюк.
Таким образом, в прямую пропорциональность вероятности прыжка... не верю
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 28 2007, 11:22
Сообщение #41


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Petka @ Sep 28 2007, 12:51) *
В который раз повторяю: нежелательно вешать на ресет ёмкости! Почему? А обьясните мне что будет при пропадании питания?

sad.gif
Обьясняю :
Если вы рассмотрите структуру порта , то увидите что каждый порт защищён защитными диодами , причём один диод на землю анодом ( защита от отрицательных напряжений ) , другой диод катодом об питание процессора . Так вот при выключении питания верхний диод будет смещён в прямом направлении и разрядит ёмкость на питание . . . Непойму в чём проблема ? Неужели это надо обьяснять ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 28 2007, 11:38
Сообщение #42


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(_Pasha @ Sep 28 2007, 14:18) *
для MEGA16 PC "13-bit wide"

точно. упустил.

Цитата
Таким образом, в прямую пропорциональность вероятности прыжка... не верю
да ее нет. Но предложение добавить команду перехода по адресу 0x0001 остается в силе, тем более для МК с >=16k флеш, это можно сделать не жертвуя вектором INT0.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 28 2007, 11:39
Сообщение #43


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Yuriy_AVR @ Sep 28 2007, 14:22) *
sad.gif
Обьясняю :
Если вы рассмотрите структуру порта , то увидите что каждый порт защищён защитными диодами , причём один диод на землю анодом ( защита от отрицательных напряжений ) , другой диод катодом об питание процессора . Так вот при выключении питания верхний диод будет смещён в прямом направлении и разрядит ёмкость на питание . . . Непойму в чём проблема ? Неужели это надо обьяснять ?


Проблема в том, что на сбросе этого диода НЕТ.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 28 2007, 11:45
Сообщение #44


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Rst7 @ Sep 28 2007, 14:18) *
Это откуда же такое тайное знание? Вы видели исходник? wink.gif

Достаточно хотя бы посмотреть в документации на любой AVR тактирование ALU , и попытаться разобраться как вообще происходит работа за 1 такт . MSC-51 делили такты на 12 от нечего делать ? Сейчас MSC-51 как правило делят на 4 , или поступают аналогично AVR.
Если верите больше своим глазам , то можите поставить эксперимент :
берёте AVR , запускаете на 16 MHz например . Затем вместо 16 MHz запаивает например 27 MHz ( можно найти кристаллы , которые запустятся на этой частоте ) . Так вот работать они будут медленнее чем на 16 MHz . Почему надеюсь обьяснять ненадо ?

Цитата(Rst7 @ Sep 28 2007, 15:39) *
Проблема в том, что на сбросе этого диода НЕТ.

Да , ошибся , извиняюсь . Так а кто его мешает поставить ? ( желательно Шоттки )
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 28 2007, 11:47
Сообщение #45


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Yuriy_AVR @ Sep 28 2007, 14:45) *
Затем вместо 16 MHz запаивает например 27 MHz ( можно найти кристаллы , которые запустятся на этой частоте ) . Так вот работать они будут медленнее чем на 16 MHz . Почему надеюсь обьяснять ненадо ?

Думаю надо. Загадки это хорошо, но коль скоро вы подняли тактовую до 27Mhz и оно у вас как-то работает, (fully static логика) работать должно быстрее либо вообще никак.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 28 2007, 11:55
Сообщение #46


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(defunct @ Sep 28 2007, 15:38) *
да ее нет. Но предложение добавить команду перехода по адресу 0x0001 остается в силе, тем более для МК с >=16k флеш, это можно сделать не жертвуя вектором INT0.

А как быть с другими зверьками помельче? ИМХО, только заполняя нулями неиспользованные ячейки.

А вообще, насчет вероятностных методов, о чем Вы,defunct, заговорили - это вовсе не бред. Теоретически, можно и ловушки какие-нибудь ставить, исходя из свойств как кода, так и системы в целом. Другой вопрос - целесообразность
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 28 2007, 11:57
Сообщение #47


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Yuriy_AVR @ Sep 28 2007, 15:45) *
Да , ошибся , извиняюсь . Так а кто его мешает поставить ? ( желательно Шоттки )


не придумывайте велосипед. есть такой вид микросхем, ресеттеры/мониторы питания называются. размер их будет поменьше чем резистор + диод + конденсатор
Go to the top of the page
 
+Quote Post
IceS
сообщение Sep 28 2007, 12:56
Сообщение #48


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387



Цитата(Petka @ Sep 28 2007, 15:57) *
не придумывайте велосипед. есть такой вид микросхем, ресеттеры/мониторы питания называются. размер их будет поменьше чем резистор + диод + конденсатор

Только к ним еще резюк надо (как правило они с открытым стоком/коллектором) wink.gif , а так действительно тот же MAX809 в SOT23 и резюк займут меньше места.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 28 2007, 13:28
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Petka @ Sep 28 2007, 14:57) *
не придумывайте велосипед. есть такой вид микросхем, ресеттеры/мониторы питания называются. размер их будет поменьше чем резистор + диод + конденсатор

Если внимательно перечитаете что мной написано , то увидите что там как раз и предлагался преимущественно супервизор ( и даже назван какой например ( MCP-130 - 450 ), и написано что в случае . . . бедности применять "резистор + конденсатор + диод +. . ." .
И никто и не спорил что интегральный супервизор на голову выше "резистор + конденсатор + диод +. . ." Но супервизору и самому нужна блокировочная ёмкость по питанию. А подтягивающий резюк уже встроен в этот супервизор .
Моя фраза "Если внешний сброс не применяешь" задумывалась как "Если внешний супервизор не применяешь" , что возможно и вызвало некоторое недопонимание . Т.е под сбросом в данном случае подразумевался супервизор , а не пин проца .
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 28 2007, 14:03
Сообщение #50


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Yuriy_AVR @ Sep 28 2007, 17:28) *
Если внимательно перечитаете что мной написано , то увидите что там как раз и предлагался
...........
...........
в случае . . . бедности применять "резистор + конденсатор + диод +. . ." .

sad.gif Такого вы не предлагали, это раз. Схему с конденсатором и диодом я не рекомендую использовать даже в "случае бедности" т.к. и в этом случае надёжность будет только хуже чем просто резистор 1-10кОм на питание.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 28 2007, 14:16
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Yuriy_AVR @ Sep 28 2007, 14:45 - и всё же, расскажите как вы запустили авр-ку на 27 мегагерцах?? И почему она у вас должна была работать медленнее??
Я когда запускаю аврку на 20 МГЦ - она у меня работает быстрей чем на 16-ти....
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 28 2007, 14:20
Сообщение #52


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Kuzmi4 @ Sep 28 2007, 18:16) *
2 Yuriy_AVR @ Sep 28 2007, 14:45 - и всё же, расскажите как вы запустили авр-ку на 27 мегагерцах?? И почему она у вас должна была работать медленнее??

А может кварц, был 27Мгц не на первой гармонике?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 28 2007, 14:23
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Тогда вопрос многоуважаемого Yuriy_AVR - почему будет работать медленней имеет простой ответ - 9 МГЦ ессно меньше 16!!!
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 28 2007, 20:18
Сообщение #54


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Kuzmi4 @ Sep 28 2007, 18:23) *
Тогда вопрос многоуважаемого Yuriy_AVR - почему будет работать медленней имеет простой ответ - 9 МГЦ ессно меньше 16!!!

Очень похоже, что кварц на 27 эта 3 гармоника. Что-то давнее говорит мне, что на первой гармонике кварцы до 10 МГц или около этого только могут работать.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Proton
сообщение Sep 29 2007, 04:41
Сообщение #55


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

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Цитата(mdmitry @ Sep 29 2007, 03:18) *
Очень похоже, что кварц на 27 эта 3 гармоника. Что-то давнее говорит мне, что на первой гармонике кварцы до 10 МГц или около этого только могут работать.

Данные действительно устарели. Посмотрите информацию о кварцах с обратной(инвертированной) мезаструктурой, частота первой гармоники у них может доходить до 250МГц и более.


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 30 2007, 09:41
Сообщение #56


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Petka @ Sep 28 2007, 17:03) *
sad.gif Такого вы не предлагали, это раз. Схему с конденсатором и диодом я не рекомендую использовать даже в "случае бедности" т.к. и в этом случае надёжность будет только хуже чем просто резистор 1-10кОм на питание.

07.gif Пожалуйста повнимательнее читайте !!!. Позволю себя процетировать :

"Очень непомешает внешний супервизор с отличным от Brown-out проца значением . Т.е. например Brown-out проца заводишь на 4 вольта , а внешний применяешь со значением 4,5 вольта ( например MCP-450 производства Microchip )".

Я это не писал ? Только немного ошибся в названии супервизора , вместо MCP-450 правильно должно быть MCP-100-450 ( машинальная ошибка ). Это во первых .
А теперь приведите аргументы против резистор + конденсатор + диод.
Аргументы типа нерекомендую не считаю аргументами . . .
wink.gif
Go to the top of the page
 
+Quote Post
Petka
сообщение Sep 30 2007, 18:29
Сообщение #57


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Yuriy_AVR @ Sep 30 2007, 13:41) *
А теперь приведите аргументы против резистор + конденсатор + диод.

1) Не все программаторы будут дожидаться пока конденсатор разрядится. И не произойдёт вход в режим программирования.
2) AVR работают от 1.8 вольт. Какой это диод надо поставить что бы надёжно происходила разрядка конденсатора?
3) Ресет является логическим входом и напряжение на нём большее 0.2 и меньшее 0.9 от напряжения питания считается булево неопределённым. Зачем подавать такой сигнал на вход контроллера?

А теперь обьясните что такое волшебное обеспечивает ёмкость на ресете? Задержку при подаче питания? Так она и так обеспечивается внутренней схемой сброса. Дополнительные компоненты, которые увеличивают стоимость, размер платы, и уменьшают надёжность?
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Sep 30 2007, 20:30
Сообщение #58


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Kuzmi4 @ Sep 28 2007, 17:16) *
2 Yuriy_AVR @ Sep 28 2007, 14:45 - и всё же, расскажите как вы запустили авр-ку на 27 мегагерцах?? И почему она у вас должна была работать медленнее??
Я когда запускаю аврку на 20 МГЦ - она у меня работает быстрей чем на 16-ти....

сейчас сильно болеею , отвечу поздже

Цитата(Petka @ Sep 30 2007, 21:29) *
1) Не все программаторы будут дожидаться пока конденсатор разрядится. И не произойдёт вход в режим программирования.
2) AVR работают от 1.8 вольт. Какой это диод надо поставить что бы надёжно происходила разрядка конденсатора?
3) Ресет является логическим входом и напряжение на нём большее 0.2 и меньшее 0.9 от напряжения питания считается булево неопределённым. Зачем подавать такой сигнал на вход контроллера?

А теперь обьясните что такое волшебное обеспечивает ёмкость на ресете? Задержку при подаче питания? Так она и так обеспечивается внутренней схемой сброса. Дополнительные компоненты, которые увеличивают стоимость, размер платы, и уменьшают надёжность?


1) 0,1 uF достаточно малая ёмкость , и я ещё не видел ни одного программатора ( включая в том числе и AVRISP и AVRISP MKII и JTAG и JTAG ICE MKII и CHIPPROG+ , ну и конечно же любимый многими PONYPROG , ну и т.д.) который бы не работал с указанной ёмкостью. Итог - я не считаю это аргументом.

2) MBR0520L например , или PRLL5817 ( этот менее распространён , да и несколько хуже по всем характеристикам ) .

3) Ну и в чём проблема ? Всё в рамках закона .
Падение на MBR0520L при температуре -25 градусов !!! ( самый, самый худший случай ) 0,28 вольта .
При обычных условиях и того лучше - 0,22 вольта и с увеличением температуры ещё падает . Имеем : 1,8 х 0,9 =1,62 вольта ; 1,8 х 0,2 =0,36 вольта . 1,9-0,28 =1,62 !!! 0,36 > 0,28 !!! И это при самых худших условиях !!!
Какие у вас ещё аргументы ?

Что касается последнего вопроса , то ответ краток - гораздо лучшую помехозащищённость по ВЧ .
Попробуете и убедитесь сами .
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 30 2007, 20:39
Сообщение #59


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Немного оффтопа, но хочется поблагодарить всех за ответы и пожелать Yuriy_AVR поскорей поправиться.
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 30 2007, 20:49
Сообщение #60



*****

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



Цитата(Yuriy_AVR @ Oct 1 2007, 00:30) *
1) 0,1 uF достаточно малая ёмкость , и я ещё не видел ни одного программатора ( включая в том числе и AVRISP и AVRISP MKII и JTAG и JTAG ICE MKII и CHIPPROG+ , ну и конечно же любимый многими PONYPROG , ну и т.д.) который бы не работал с указанной ёмкостью. Итог - я не считаю это аргументом.

Попробуйте отладить какой-нить контроллер с DebugWire с емкостью на сбросе.
Цитата
Что касается последнего вопроса , то ответ краток - гораздо лучшую помехозащищённость по ВЧ .
Попробуете и убедитесь сами .

И откуда же лезут такие помехи? По питанию? Дык питание нужно строить. Из эфира? Тоже решается более другими средствами.
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 30 2007, 22:34
Сообщение #61


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Yuriy_AVR @ Sep 30 2007, 23:30) *
сейчас сильно болеею , отвечу поздже

Вы просто уходите от ответа, на другие вопросы вам ничто не мешало написать километровые ответы.
На самом деле дела обстоят так:
если вдруг попадется AVR способный работать на 27Mhz, то в силу полностью статической логики он будет работать быстрее чем на 16Mhz в 27/16 раз. То что вы воткнули кварц на 27Mhz и чип работал медленнее чем на 16Mhz может свидетельствовать лишь о проблеме с осциллятором либо с самим кварцем, и частота тактирования у вас была не 27Mhz.
Go to the top of the page
 
+Quote Post
Petka
сообщение Oct 1 2007, 07:01
Сообщение #62


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Yuriy_AVR @ Oct 1 2007, 00:30) *
3) Ну и в чём проблема ? Всё в рамках закона .

Дело в том, что конденсатор заряжается НЕ мнгновенно и в момент заряда конденсатора напряжение на ресете не будет попадать в рамки положенного для логики.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 1 2007, 14:29
Сообщение #63


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



х.. с ним с кварцем,насчет RC цепочки по сбросу хотелось бы понять-она таки нужна или нет?Хотелось
бы услышать мнение гуру,как они формируют сброс.Может,заодно и от резистора избавиться,пулл-апом
обойтись? 07.gif


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 1 2007, 15:50
Сообщение #64


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(WHALE @ Oct 1 2007, 17:29) *
насчет RC цепочки по сбросу хотелось бы понять-она таки нужна или нет?

Я так понимаю, что когда включен BOD, то на резете емкость не нужна.
Если BOD'a нет, RC выполняет его роль, но только в одну сторону (power-on reset), и чем больше емкость тем надежней получается "POR".
Если есть кнопка сброс на резете, то емкость хотя бы небольшая нужна.
Go to the top of the page
 
+Quote Post
Yuriy_AVR
сообщение Oct 1 2007, 20:04
Сообщение #65


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 12-01-07
Из: Крым
Пользователь №: 24 378



Цитата(Petka @ Oct 1 2007, 10:01) *
Дело в том, что конденсатор заряжается НЕ мнгновенно и в момент заряда конденсатора напряжение на ресете не будет попадать в рамки положенного для логики.

А супервизор срабатывает мгновенно ? sad.gif Типичное время срабатывания супервизора при заданном вами напряжении 1,8 вольт составляет порядка нескольких микросекунд . Время заряда ёмкости до напряжения питания определяется как t=0,9RC ( для вывода сброса ) , т.е. при номиналах , указанных мной , составляет порядка 90 микросекунд . Я , например , при программировании использую время запуска тактового генератора 64 микросекунды . Т.е. время зарядки ёмкости сопоставимо с запуском тактового генератора и при появлении активного уровня сброса , генератор работает уже стабильно .
При применении внешнего супервизора необходимо выставлять минимальное время запуска генератора , иначе , если время запуска генератора выставлено большим , то применение внешнего супервизора с малым временем срабатывания приведёт к ситуации когда тактовый генератор ещё не запустился , а сброс уже находится в активном состоянии . Вот это и называются грабли . . .
А что собственно будет с процессором , если микросекунд эдак 30-50 на выводе сброса будет неопределённое состояние ? Да ничего собственно и не будет . . . Затем достигнет порога логической 1 и всё зашуршит на ура .

Цитата(defunct @ Oct 1 2007, 18:50) *
Я так понимаю, что когда включен BOD, то на резете емкость не нужна.
Если BOD'a нет, RC выполняет его роль, но только в одну сторону (power-on reset), и чем больше емкость тем надежней получается "POR".
Если есть кнопка сброс на резете, то емкость хотя бы небольшая нужна.

Вообще то мой взгляд на проблему таков : Быстрое нарастание активного состояния на выводе сброса при запускающемся тактовом генераторе ( но ещё не запустившемся окончательно ) очень плохо .
Именно поэтому я применяю следующую схему : питание на супервизор подаётся через интегрирующую RC цепочку . Диод MBR0520L включён анодом к сбросу и катодом соответственно к питанию . Параллельно диоду резистор 1 К ( супервизор с внутренним резистором в десятки килоом ) .
Интегрирующая цепочка обеспечивает задержку включения для гарантированного запуска генератора + обеспечивает фильтрацию по питанию . Если включён внутренний BOD я всё равно рекомендую ставить ёмкость с резистором .
Вообще я совсем не сторонник применения RC в качестве BOD . В качестве подтяжки сброса и дополнительного фильтра да , но не иначе . И вообще я не сторонник большого значения ёмкости - всё должно быть без фанатизма . Приведённые мной значения кажутся мне оптимальными .

Цитата(WHALE @ Oct 1 2007, 17:29) *
х.. с ним с кварцем,насчет RC цепочки по сбросу хотелось бы понять-она таки нужна или нет?Хотелось
бы услышать мнение гуру,как они формируют сброс.Может,заодно и от резистора избавиться,пулл-апом
обойтись? 07.gif

пулл-апом обойтись неполучится - слишком большое значение сопротивления

Цитата(defunct @ Oct 1 2007, 01:34) *
Вы просто уходите от ответа, на другие вопросы вам ничто не мешало написать километровые ответы.
На самом деле дела обстоят так:
если вдруг попадется AVR способный работать на 27Mhz, то в силу полностью статической логики он будет работать быстрее чем на 16Mhz в 27/16 раз. То что вы воткнули кварц на 27Mhz и чип работал медленнее чем на 16Mhz может свидетельствовать лишь о проблеме с осциллятором либо с самим кварцем, и частота тактирования у вас была не 27Mhz.

От ответа не ухожу , привык сдерживать свои слова . Но чтобы небыло bb-offtopic.gif заведу специальную тему , но несколько поздже , уж пожалуйста извените . Коротко написать не получится . rolleyes.gif

Цитата(namelos @ Sep 30 2007, 23:39) *
Немного оффтопа, но хочется поблагодарить всех за ответы и пожелать Yuriy_AVR поскорей поправиться.

Большое спасибо

Цитата(xemul @ Sep 30 2007, 23:49) *
Попробуйте отладить какой-нить контроллер с DebugWire с емкостью на сбросе.

И откуда же лезут такие помехи? По питанию? Дык питание нужно строить. Из эфира? Тоже решается более другими средствами.


Бр.....рррр. Стоять ! ! ! Мухи отдельно , котлеты отдельно . Мы говорим о сбросе или о DebugWire ?
Как говорит мой знакомый Одессит - это разные вещи . Когда DebugWire , то естественно ёмкость - лишняя деталь , но когда DebugWire это прототип , то на нём ёмкость не столь критична .

Про необходимость качественного питания и разводки я упоминал отдельно .
"Из эфира? Тоже решается более другими средствами."
Хотелось бы знать какими ?
Попробуйте для начала пощёлкать рядом с AVRом люминесцентной лампой , ватт на 40 - 60 ( хорошо бы при этом стартерок неновенький ) . И тогда мы с вам и продолжим разговор . a14.gif
А вы теоретик или практик , простите за любопытство ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 1 2007, 20:57
Сообщение #66


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Yuriy_AVR @ Oct 1 2007, 23:04) *
Если включён внутренний BOD я всё равно рекомендую ставить ёмкость с резистором .

Ваши взгляды расходятся со взглядами Atmel. Atmel рекомендует устанавливать start-up time наиболее коротким когда используется BOD, RC цепь лишь только внесет задержку, в итоге в MCUCSR получим букет признаков сброса - POR/BOD/RESET.
Цитата
Вообще я совсем не сторонник применения RC в качестве BOD .

Обратите внимание, выше я отметил, что RC может обеспечить только одну функцию - power-on-reset, но никак не полностью заменить функциональность BOD. BOD обеспечивает сброс как при нарастании так и при спаде напряжения питания.
Go to the top of the page
 
+Quote Post
xemul
сообщение Oct 1 2007, 21:44
Сообщение #67



*****

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



Цитата(Yuriy_AVR @ Oct 2 2007, 00:04) *
Бр.....рррр. Стоять ! ! ! Мухи отдельно , котлеты отдельно .

Стою, боюсь smile.gif
Цитата
Мы говорим о сбросе или о DebugWire ?
Как говорит мой знакомый Одессит - это разные вещи . Когда DebugWire , то естественно ёмкость - лишняя деталь , но когда DebugWire это прототип , то на нём ёмкость не столь критична .

Я и в серийных коробочках на АВР с dW не обрезаю себе возможность отладки "в поле" предлагаемым Вами способом. dW в серийной прошивке, естесно, запрещается, ресет остается на внутреннем пуллапе.
Можно продолжать бороться с бедами контроллеров 5-10-летней давности, но за прошедшее время потроха контроллеров слегка изменились. В частности, АВР могут в большинстве случаев вполне успешно обходиться без внешнего супервайзера. Оставшиеся случаи стОит рассматривать отдельно.
Цитата
Про необходимость качественного питания и разводки я упоминал отдельно .
"Из эфира? Тоже решается более другими средствами."
Хотелось бы знать какими ?

Да вполне обычными - если со смехотехникой (в том числе, с выбором контроллера, соответствующего условиям эксплуатации) все в порядке, остается трассировка платы и разумное конструктивное исполнение.
Цитата
Попробуйте для начала пощёлкать рядом с AVRом люминесцентной лампой , ватт на 40 - 60 ( хорошо бы при этом стартерок неновенький ) . И тогда мы с вам и продолжим разговор . a14.gif

Попробуйте не таскать шнурок на ногу сброса через всю плату. Или попробуйте для продолжения разговора пощёлкать рядом с AVRом люминесцентной лампой, отрезав этот шнурок под корень (т.е. по сбросу ничего, кроме внутреннего пуллапа), и отследить причину сброса. Если будет что-то кроме POR...
Странна сама постановка вопроса. Исполнение платы или соответствует ЭМ обстановке, или не очень. Если последнее, то Вы о чем?
Цитата
А вы теоретик или практик , простите за любопытство ?

Я практикующий лекарь, по совместительству художник.
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Oct 2 2007, 03:01
Сообщение #68


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

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Цитата(Yuriy_AVR @ Oct 2 2007, 00:04) *
Вообще то мой взгляд на проблему таков : Быстрое нарастание активного состояния на выводе сброса при запускающемся тактовом генераторе ( но ещё не запустившемся окончательно ) очень плохо .

Не могли бы пояснить, почему Вы так думаете?
Go to the top of the page
 
+Quote Post
namelos
сообщение Nov 29 2007, 11:47
Сообщение #69


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Не хочется заводить новую тему, но раз зашел разговор о супервайзерах. Возник вопрос: а если плате используется несколько контроллеров, то для каждого контроллера необходим свой супервайзер или можно обойтись одним для всех?
Спасибо заранее.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 29 2007, 12:19
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Интересная деталь. Может быть поможет вам в споре.
Если установить на ногу сброса резистор 10к и ёмкость 0.1mkf на землю, то при первом программировании что-то происходит, и микросхема больше не отвечает. Проверено многократно на нескольких программаторах и на JTAG ICE MKII. Речь идёт только о микросхемах atmega48/88. На других с таким глюком не сталкивался. Если её первый раз зашить (откинув ёмкость), то в последующих разах - всё отлично программится. Исследований никаких не проводил с этим делом. Нет денег и времени на это.

Мы делали запрос на Atmel в самом начале пути и в рекомендациях Atmel отсутствует ёмкость на ресете. Рекомендуется резистор или перемычка на питание.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 29 2007, 14:49
Сообщение #71


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SasaVitebsk @ Nov 29 2007, 15:19) *
Интересная деталь. Может быть поможет вам в споре.

Мне кажется, это как-то перекликается с doc2545.pdf p.358 (Part may hang in reset)
Go to the top of the page
 
+Quote Post
Flasher
сообщение Dec 2 2007, 21:43
Сообщение #72


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



Поддерживаю. Только при таком подходе языки высокого уровня немного ускорят разработку ПО. к тому же все равно если приходится закручивать очень много винтиков то шуруповерт будет гораздо предпочтительнее отвертки.
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Jan 31 2008, 20:17
Сообщение #73


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

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Цитата(defunct @ Sep 28 2007, 15:35) *
... Считаю, что конечный продукт на AVR с отключенным WDT - дилетанство, такое же как если в изделии оставить чип в отладочном режиме (фуз OCDEN).


Не могли бы мне обьяснить назначение фуза OCDEN. Вроде бы официальное название его "разрешение отладки", но при любом значении, отладка по JTAGу всегла работает.
И почему плохо оставлять этот фуз включенным (OCDEN=0, как я понял)?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 31 2008, 21:27
Сообщение #74


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AndreyKeil @ Jan 31 2008, 23:17) *
Не могли бы мне обьяснить назначение фуза OCDEN. Вроде бы официальное название его "разрешение отладки", но при любом значении, отладка по JTAGу всегла работает.
И почему плохо оставлять этот фуз включенным (OCDEN=0, как я понял)?

Работает JTAG, но например войдя в режим PowerSafe/PowerDown работа JTAG'a прекратится и вы словите "связь с чипом потеряна".

С включенной отладкой (OCDEN==0) такого не произойдет, т.к. режимы энергосбережения будут просто эмулироваться, цитата из даташита:

If the On-chip debug system is enabled by the OCDEN Fuse and the chip enter Power
down or Power save sleep mode, the main clock source remains enabled. In these
sleep modes, this will contribute significantly to the total current consumption.


Кроме того, включение OCDEN для некоторых AVR'ок подключает регистр OCDR (регистр для общения с отладчиком из отлаживаемой программы). Через этот регистр printf'ом можно выводить сообщения в консоль отладчика. Если вы пользуетесь IAR'овским компилятором и отладчиком, то вероятно уже сталкивались с "Terminal I/O" (и можете себе представить насколько без него хуже). smile.gif

Цитата из даташита:

The OCDR Register provides a communication channel from the running program in the
microcontroller to the debugger. The CPU can transfer a byte to the debugger by writing
to this location.
At the same time, an Internal Flag; I/O Debug Register Dirty – IDRD – is
set to indicate to the debugger that the register has been written. When the CPU reads
the OCDR Register the 7 LSB will be from the OCDR Register, while the MSB is the
IDRD bit. The debugger clears the IDRD bit when it has read the information.
In some AVR devices, this register is shared with a standard I/O location. In this case,
the OCDR Register can only be accessed if the OCDEN Fuse is programmed
, and the
debugger enables access to the OCDR Register. In all other cases, the standard I/O
location is accessed.
Refer to the debugger documentation for further information on how to use this register.



Итого с включенным OCD потребление всегда высокое, потребление больше чем обычно и имеется дырка для скачивания вашей прошивки из чипа. Стоит ли оставлять OCD включенным? Вывод можете сделать сами, а можно опять же довериться цитате из даташита:

Never ship a product with the OCDEN Fuse programmed regardless of the setting of
Lock bits and the JTAGEN Fuse.
A programmed OCDEN Fuse enables some parts of
the clock system to be running in all sleep modes. This may increase the power
consumption.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 11 2008, 17:21
Сообщение #75


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(namelos @ Sep 25 2007, 15:38) *
В целях защиты хотелось бы заполнить сводное место Flash-памяти "rjmp 0"

Защиты от чего? 07.gif


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 11 2008, 19:04
Сообщение #76


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(xemul @ Oct 2 2007, 00:44) *
Можно продолжать бороться с бедами контроллеров 5-10-летней давности, но за прошедшее время потроха контроллеров слегка изменились. В частности, АВР могут в большинстве случаев вполне успешно обходиться без внешнего супервайзера.

+1
У меня так всё и сделано (без супервайзера). Я решил, что если уж атмел может процессоры делать, в которых мульён транзисторов, то уж супервайзер, в котором и два десятка транзисторов не наберётся, он туда уж точно какой надо запихнул.
Цитата(xemul @ Oct 2 2007, 00:44) *
Попробуйте не таскать шнурок на ногу сброса через всю плату. Или попробуйте для продолжения разговора пощёлкать рядом с AVRом люминесцентной лампой, отрезав этот шнурок под корень (т.е. по сбросу ничего, кроме внутреннего пуллапа), и отследить причину сброса. Если будет что-то кроме POR...

У меня процессор все логи, в т.ч. своё включение (от чего он сбросился) во FLASH пишет. А я потом эту FLASH как Mass Storage читаю. FLASH не быстрее чем за месяц заполняется. Так вот, ничего кроме PORF и BORF, я там не видел! А я всегда за этим следил. Вообще то я там WDRF искал и не находил smile.gif . А обстановка с помехами там ещё та! Недалеко 6 кВ 1кА. И всё это тиристорами коммутируется.

Щас пошёл - RESET на землю коротнул. Лог посмотрел. Всё как положено - EXTRF появился!
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 11 2008, 20:34
Сообщение #77


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(galjoen @ Feb 11 2008, 22:04) *
+1
У меня так всё и сделано (без супервайзера). Я решил, что если уж атмел может процессоры делать, в которых мульён транзисторов, то уж супервайзер, в котором и два десятка транзисторов не наберётся, он туда уж точно какой надо запихнул.

У меня процессор все логи, в т.ч. своё включение (от чего он сбросился) во FLASH пишет. А я потом эту FLASH как Mass Storage читаю. FLASH не быстрее чем за месяц заполняется. Так вот, ничего кроме PORF и BORF, я там не видел! А я всегда за этим следил. Вообще то я там WDRF искал и не находил smile.gif . А обстановка с помехами там ещё та! Недалеко 6 кВ 1кА. И всё это тиристорами коммутируется.

Щас пошёл - RESET на землю коротнул. Лог посмотрел. Всё как положено - EXTRF появился!

Вопрос по регистру MCUSR
Кому приходилось пользоваться флагами из регистра MCUSR?
Возьмем для примера tiny15. Рис.14 на стр.15 его описания. (rev.1187D-12/01)
Мне нужно, чтобы при включении питания не устанавливался флаг EXTRF.
На сколько может быть задержан фронт reset относительно фронта VCC, чтобы этот флаг не устанавливался? И каким внутренним сигналом происходит запись в регистр MCUSR?
На этой же странице написано, что сигнал reset гарантированно распознается, если его длительность превышает 500нс. При максимальном сопротивлении подтягивающего резистора 122кОм и входной емкости вместе с емкостью монтажа порядка 4пФ постоянная времени входной цепи уже как раз 500нс. Т.е. при таком раскладе получается, что при включении питания всегда будут устанавливаться два флага PORF и EXTRF. А для улучшения помехозащищенности рекомендуется еще шунтировать вход reset емкостью...
Судя по логике текста описания, если длительность сигнала reset будет меньше 500нс, то он все равно может быть распознан, хотя и не гарантированно.
Непонятно также с флагом BORF, если включена схема Brown-out. Поскольку порог срабатывания этой схемы больше, чем у схемы Power-on, то при включении питания она сработает позже и флаг BORF тоже может оказаться установленным.
Как же при всем при этом идентифицировать причину сброса?


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 11 2008, 21:05
Сообщение #78


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Дон Амброзио @ Feb 11 2008, 23:34) *
Мне нужно, чтобы при включении питания не устанавливался флаг EXTRF.

Из практики (ATmega64 и AT90CAN128) знаю, что EXTRF и как никогда не устанавливается (я RESET ни к чему не подсоединял). Но если что, его ведь сбросить всегда можно (и нужно). Я когда MCUCSR читаю (в числе первых 10 команд), после этого его сразу-же его сбрасываю (все флаги). Чтоб в следующий раз знать от чего сброс произошел.
Цитата(Дон Амброзио @ Feb 11 2008, 23:34) *
Непонятно также с флагом BORF, если включена схема Brown-out. Поскольку порог срабатывания этой схемы больше, чем у схемы Power-on, то при включении питания она сработает позже и флаг BORF тоже может оказаться установленным.

BORF иногда устанавливается. Если при включении дребезг контакта выключателя был. Напряжение питания увеличивалось-уменьшалось (кругом кондёры стоят).
Цитата(Дон Амброзио @ Feb 11 2008, 23:34) *
Как же при всем при этом идентифицировать причину сброса?

А вот так и идентифицировать.PORF=0 значит что-то не так. А что - другие флаги показывают. Но лучше всего опытным путём всё это проверить. Я проверял!

А вообще это bb-offtopic.gif .
Go to the top of the page
 
+Quote Post

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

 


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


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