Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: инициализация AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
coolibin
Какие действия обязательны после сброса ATmega8? например, для всех обязательным является устанавление адреса стека.
KRS
Цитата(coolibin @ Jan 31 2008, 10:39) *
Какие действия обязательны после сброса ATmega8? например, для всех обязательным является устанавление адреса стека.

Вот и не правда! Стек может не использоваться! Если не разрешать прерывания и не пользоваться подпрограммами. У меня есть такой хитрый проект где авр используется просто как автомат по генерации определенного сигнала.
=VRA=
Обязательно инициализировать (=настроить) ВСЮ периферию (порты, таймеры, АЦП, УАРТ и т.п.), которую будешь использовать, и отключить ту, которую не будешь (например, WDT). Обязательно правильно выставить фузы (настроить тактирование, BOD, совместимость и т.д.). А указатель стека нужно инициализировать хотя бы для того, чтобы потом не рвать на лысине волосы в поисках загадочных глюков
KRS
Цитата(=VRA= @ Jan 31 2008, 10:58) *
и отключить ту, которую не будешь (например, WDT).

Если у вас после reset включен watchdog, отключить его все равно не удастся.

Цитата(=VRA= @ Jan 31 2008, 10:58) *
Обязательно правильно выставить фузы (настроить тактирование, BOD, совместимость и т.д.).

А это делается при прожигании, а не после reset
VladimirYU
Иногда бывает полезно неиспользуемые ноги портов привести в строго определенное сосотояние. Например сконфигурировав их на выход и записать туда нули.
KRS
Цитата(VladimirYU @ Jan 31 2008, 11:52) *
Иногда бывает полезно неиспользуемые ноги портов привести в строго определенное сосотояние. Например сконфигурировав их на выход и записать туда нули.

Это точно! Особенно на испытаниях при понижении температуры при -10 черте что начинается.
arttab
Цитата(KRS @ Jan 31 2008, 14:10) *
Если у вас после reset включен watchdog, отключить его все равно не удастся.
А это делается при прожигании, а не после reset


с чего это не получиться. процедура отключения написана в доке
adc
Цитата(arttab @ Feb 1 2008, 05:09) *
с чего это не получиться. процедура отключения написана в доке

Ссылочку не дадите где описывается процедура изменения состояния fuse битов программно? biggrin.gif
arttab
Цитата
Ссылочку не дадите где описывается процедура изменения состояния fuse битов программно?

в разделе самомрограммирование указано какие биты и как менять.
У Вас вопрос был по watchdog. вот пример из доки:
void WDT_off(void)
{
/* reset WDT */
_WDR();
/* Write logical one to WDCE and WDE */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
}
раздел называется Timed Sequences for
Changing the
Configuration of the
Watchdog Timer.
adc
Цитата(arttab @ Feb 4 2008, 04:56) *
в разделе самомрограммирование указано какие биты и как менять.
У Вас вопрос был по watchdog. вот пример из доки:
void WDT_off(void)
{
/* reset WDT */
_WDR();
/* Write logical one to WDCE and WDE */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
}
раздел называется Timed Sequences for
Changing the
Configuration of the
Watchdog Timer.

Это обычная процедура отключение вачдок таймера не изменяющая fuse бит wdton!
Почитайте апнот:avr109
KRS
Цитата(arttab @ Feb 4 2008, 04:56) *
в разделе самомрограммирование указано какие биты и как менять.
У Вас вопрос был по watchdog. вот пример из доки:
void WDT_off(void)
{
/* reset WDT */
_WDR();
/* Write logical one to WDCE and WDE */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
}
раздел называется Timed Sequences for
Changing the
Configuration of the
Watchdog Timer.

Только эта последовательнсть не работает если установлен fuse бит wdton
всегда включен - значит всегда включен!
coolibin
а мне кто нибудь подскажет где почитать про fuse,lock биты и как с ними работать через avreal32?
KRS
Цитата(coolibin @ Feb 4 2008, 12:50) *
а мне кто нибудь подскажет где почитать про fuse,lock биты

Лучше всего в даташите на конкретную модель.
Раздел Memory Programming как раз и начинается с LOCK и FUSE битов.
coolibin
А ещё вопрос можно? а зачем нужен watchdog таймер? а то как то размыто пишут
VladimirYU
Цитата(coolibin @ Feb 4 2008, 12:50) *
а мне кто нибудь подскажет где почитать про fuse,lock биты и как с ними работать через avreal32?


Про биты в даташитс на соответствующий контроллер, про avreal32 на сайте автора.
http://www.ln.ua/~real/avreal/index.html

Цитата(coolibin @ Feb 4 2008, 15:30) *
А ещё вопрос можно? а зачем нужен watchdog таймер? а то как то размыто пишут

Для реализации сброса контроллера в случае его зависания по какой-либо причине, например, бесконечный цикл. Это один из механизмов самовостановления работоспособности устройства, и поиска фатальных программных ошибок. Если кратко.
Kirill Trusov
a eto nado ?
vvs5
Цитата(Kirill Trusov @ Feb 5 2008, 09:54) *
a eto nado ?

ИМХО в критических приложениях надо, а для себя как пожелаешь.
опять же имхо, вопрос должен стоять не надо/не надо, а как именно использовать сторожевой таймер в программе.
coolibin
ну и как же им пользоватся? при каких условиях он срабатывает? и ещё, что делать с неиспользованными выводами при инициализации?
VladimirYU
Цитата(coolibin @ Feb 5 2008, 11:25) *
ну и как же им пользоватся? при каких условиях он срабатывает? и ещё, что делать с неиспользованными выводами при инициализации?

Как и любой таймер при переполнении. Поэтому программа должна постоянно сбрасывать его счетчик командой WDR. Если по какой-либо причине программа где-то "заблудилась" и этого не сделала, происходит сброс МК и полная переинициализации. Анализируя специальный регистр можно лпределить причину вызвавшую сброс. Но лучше все-таки почитать об этом самому в DS на конкретный МК.
Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0.
coolibin
Спасибо!
Brutaller
Цитата(VladimirYU @ Feb 5 2008, 11:34) *
Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0.

А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?
singlskv
Цитата(Brutaller @ Feb 8 2008, 21:54) *
А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?
ничем...
coolibin
Цитата(Brutaller @ Feb 8 2008, 20:54) *
А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?

т.е. DDRX = 0x00, PORTX = 0xFF?
Brutaller
Цитата(coolibin @ Feb 9 2008, 14:28) *
т.е. DDRX = 0x00, PORTX = 0xFF?

Ну да, оставляешь(в соотв. битах DDRX нули) нужные тебе пины в качестве входа, а в нужные биты PORTX ставишь единицы, и к ним подключаются pull-up резисторы.

P.S. Изначально в DDRX не надо пулять нули, по умолчанию после сброса там и так они есть ;)
В разделе "Register Description for I/O-Ports" даташита можно это увидеть.
KRS
Цитата(coolibin @ Feb 9 2008, 14:28) *
т.е. DDRX = 0x00, PORTX = 0xFF?

Да в принципе можно и так. Главное в воздухе не оставлять.
Я правда тоже предпочитаю конфигурить на выход и 0
coolibin
Столкнулся с такой проблемой, есть схема, на схеме есть много разных скажем так блоков, все они подключены к микропроцу, из этих блоков меня интересует только один. А теперь, уважаемые знатоки вопрос, как "заглушить" подключёные, но не интересуещие меня выводы? или это зависит от схемы?
VladimirYU
Цитата(coolibin @ Feb 11 2008, 12:08) *
Столкнулся с такой проблемой, есть схема, на схеме есть много разных скажем так блоков, все они подключены к микропроцу, из этих блоков меня интересует только один. А теперь, уважаемые знатоки вопрос, как "заглушить" подключёные, но не интересуещие меня выводы? или это зависит от схемы?


Конечно зависит, например, несколько различных функциональных узлов могут быть подключены к одним и тем же выводам МК, а выбор устройств выполняется сигналами CS (chip select). В постейших случаях может оказаться достаточно просто деактивировать выводы портов ( оставить в 3 состоянии, как после сброса) или если позволяет схемотехника, наоборот записмать в них 0 или 1. Это уже обсуждалось в данной теме.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.