Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.02.2018, 15:00
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
ВОТ БЛИН !!!
Я понял почему ВО ВСЕХ моих устройствах на AVR крайне нестабильный запуск.
Выше я написал, что вачдог теперь работает нормально и кристалл не зависает после 5-6 ресетов напрочь, от чего помогает только откл. питания с нажатым ресетом.
Так вот, вставил я инициализацию вачдога в основную программу и ... он снова стал зависать !
Начал закоменчивать по очереди строки в процедуре старта, убрал настройку таймеров, выключил АЦП, отключил все прерывания ... всё равно зависает.
И зависание именно в момент старта. Это видно на осциллограмме.
В момент запуска контроллера в зависимости от фьюзов существует задержка, 0, 4 и 64 мс. Во времят задержки на пинах МК - 3.6 вольт, далее идет конфигурация пинов и они либо 0, либо +5 (у меня в проекте) становятся.
Но у меня, он не выходит из этого (3.6 вольт) висячего состояния, значит не стартует.
Как оказалось, в самом начале программы, сразу после инициализации стека у меня идет вычитанный где-то давным давно код по обнулению ОЗУ:
Код:
|
clr temp
clr temp2
pernul: st Z+, temp
inc temp2
cpi temp2, 255
brne pernul |
Убрал это обнуление и запуск стал стабильным !
Я передёргивал уже 100500 раз питание, старт на 100%.
Жал ресет 100500 раз, стартует на 100%.
Сколько я мучился с обвязкой питания, менял конденсаторы, подводил питалово толстенными проводами, а оказалось ...
Отсюда вопрос, ПОЧЕМУ этот код делает запуск настолько нестабильным ?
|
|
|
|
11.02.2018, 15:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,915
Сказал спасибо: 2,980
Сказали Спасибо 3,159 раз(а) в 2,144 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
Сообщение от putmannn
|
Как оказалось, в самом начале программы, сразу после инициализации стека у меня идет вычитанный где-то давным давно код по обнулению ОЗУ:
Код:
|
clr temp
clr temp2
pernul:
st Z+, temp
inc temp2
cpi temp2, 255
brne pernul
..... |
|
Вычитанный и не понятый.
Потому, что этот говнокод (с характерной транслитерацией метки) не ОЗУ чистит, а все порты I/O в ноль сбрасывает (нимало не считаясь с тем, что кое-где по сбросу "1" стоит).
P.S. Технический английский - очень прост (чуть менее чем полностью - термины). Имея стойкие трояки в школе и институте - не имею никаких проблем с разбором документации на английском.
__________________
Экзорцист 40-го уровня.
Последний раз редактировалось ForcePoint; 11.02.2018 в 15:18.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
11.02.2018, 15:24
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
Сообщение от ForcePoint
|
Потому, что этот говнокод (с характерной транслитерацией метки) не ОЗУ чистит, а все порты I/O в ноль сбрасывает (нимало не считаясь с тем, что кое-где по сбросу "1" стоит).
|
Проклятый интернет ! Вычитаешь в нём всяких ошибок.
Из-за него я мучился года 3.
Больше я в него ни ногой ! Буду бумажные, проверенные временем советские руководства лучше читать.
|
|
|
|
11.02.2018, 16:53
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
Сообщение от putmannn
|
Проклятый интернет ! Вычитаешь в нём всяких ошибок.
Из-за него я мучился года 3.
Больше я в него ни ногой ! Буду бумажные, проверенные временем советские руководства лучше читать.
|
Вот этот код чистит сторого ОЗУ и РОН.
Когда пишу на АСМе использую эти макросы.
PHP код:
|
;Инициализация стека============================================= ===== .MACRO SPini ldi r16,low(ramend) out spl,r16 ldi r16,high(ramend) out sph,r16 .ENDM ;Сброс памяти RAM (00)============================================ .MACRO Ram_00 ldi zl,low(sram_start) ldi zh,high(sram_start) Flush: clr r25 st z+,r25 cpi zh,high(ramend+1) brne Flush cpi zl,low(ramend+1) brne Flush clr zl clr zh ;очистка регистров (РОН) ldi zl,30 clr zh dec zl st z,zh brne pc-2 .ENDM
|
Последний раз редактировалось МВА; 11.02.2018 в 16:56.
|
|
|
|
12.02.2018, 10:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,106
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
Сообщение от МВА
|
этот код чистит сторого ОЗУ и РОН.
Когда пишу на АСМе использую
|
А зачем?
При запуске программы любая (почти) переменная в памяти должна быть инициализирована, без этого надёжной работы не будет. Но не бездумно - всё в нули! Тем более, что бОльшая часть памяти, как правило, не используется - зачем делать лишнее?
Инициализировать РОН - это вообще на воду дуть, они потому и РОН, что меняются везде и всюду.
Для инициализации пишу подпрограмму initram, там и инициализирую.
|
|
|
|
12.02.2018, 11:08
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: AtMega-8, вачдог и режимы сна.
Сообщение от makakus
|
При запуске программы любая (почти) переменная в памяти должна быть инициализирована,
|
Где-то я об этом же недавно писал. Но иногда, при отладке, когда бывают косяки со стеком, удобней, все-таки, обнулять его, чтобы прошлый мусор не мешал увидеть где и что лежит, в стеке. Он ведь тоже находится в SRAM. А вообще-то этот код я скопипастил у DIHALT (с isielektronik). Я только последнюю метку заменил уменьшением программного счетчика. И там же, в его курсе по asm была рекомендация чистить ОЗУ.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:47.
|
|