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

 
 
> инициализация AVR, какие действия обязательны?
coolibin
сообщение Jan 31 2008, 07:39
Сообщение #1


Местный
***

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



Какие действия обязательны после сброса ATmega8? например, для всех обязательным является устанавление адреса стека.


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 26)
KRS
сообщение Jan 31 2008, 07:49
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(coolibin @ Jan 31 2008, 10:39) *
Какие действия обязательны после сброса ATmega8? например, для всех обязательным является устанавление адреса стека.

Вот и не правда! Стек может не использоваться! Если не разрешать прерывания и не пользоваться подпрограммами. У меня есть такой хитрый проект где авр используется просто как автомат по генерации определенного сигнала.
Go to the top of the page
 
+Quote Post
Guest_=VRA=_*
сообщение Jan 31 2008, 07:58
Сообщение #3





Guests






Обязательно инициализировать (=настроить) ВСЮ периферию (порты, таймеры, АЦП, УАРТ и т.п.), которую будешь использовать, и отключить ту, которую не будешь (например, WDT). Обязательно правильно выставить фузы (настроить тактирование, BOD, совместимость и т.д.). А указатель стека нужно инициализировать хотя бы для того, чтобы потом не рвать на лысине волосы в поисках загадочных глюков
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 31 2008, 08:10
Сообщение #4


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(=VRA= @ Jan 31 2008, 10:58) *
и отключить ту, которую не будешь (например, WDT).

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

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

А это делается при прожигании, а не после reset
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 31 2008, 08:52
Сообщение #5


Местный
***

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



Иногда бывает полезно неиспользуемые ноги портов привести в строго определенное сосотояние. Например сконфигурировав их на выход и записать туда нули.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 31 2008, 08:54
Сообщение #6


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Это точно! Особенно на испытаниях при понижении температуры при -10 черте что начинается.
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 1 2008, 02:09
Сообщение #7


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



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


с чего это не получиться. процедура отключения написана в доке


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
adc
сообщение Feb 1 2008, 04:53
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



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

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


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 4 2008, 01:56
Сообщение #9


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата
Ссылочку не дадите где описывается процедура изменения состояния 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.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
adc
сообщение Feb 4 2008, 05:13
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(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


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 4 2008, 09:01
Сообщение #11


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(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
всегда включен - значит всегда включен!
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 4 2008, 09:50
Сообщение #12


Местный
***

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



а мне кто нибудь подскажет где почитать про fuse,lock биты и как с ними работать через avreal32?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 4 2008, 11:45
Сообщение #13


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(coolibin @ Feb 4 2008, 12:50) *
а мне кто нибудь подскажет где почитать про fuse,lock биты

Лучше всего в даташите на конкретную модель.
Раздел Memory Programming как раз и начинается с LOCK и FUSE битов.
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 4 2008, 12:30
Сообщение #14


Местный
***

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



А ещё вопрос можно? а зачем нужен watchdog таймер? а то как то размыто пишут


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Feb 4 2008, 14:05
Сообщение #15


Местный
***

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



Цитата(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 таймер? а то как то размыто пишут

Для реализации сброса контроллера в случае его зависания по какой-либо причине, например, бесконечный цикл. Это один из механизмов самовостановления работоспособности устройства, и поиска фатальных программных ошибок. Если кратко.
Go to the top of the page
 
+Quote Post
Kirill Trusov
сообщение Feb 5 2008, 06:54
Сообщение #16


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

Группа: Свой
Сообщений: 90
Регистрация: 17-08-07
Пользователь №: 29 867



a eto nado ?
Go to the top of the page
 
+Quote Post
vvs5
сообщение Feb 5 2008, 08:10
Сообщение #17


Участник
*

Группа: Свой
Сообщений: 40
Регистрация: 29-08-05
Из: новосибирск
Пользователь №: 8 054



Цитата(Kirill Trusov @ Feb 5 2008, 09:54) *
a eto nado ?

ИМХО в критических приложениях надо, а для себя как пожелаешь.
опять же имхо, вопрос должен стоять не надо/не надо, а как именно использовать сторожевой таймер в программе.
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 5 2008, 08:25
Сообщение #18


Местный
***

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



ну и как же им пользоватся? при каких условиях он срабатывает? и ещё, что делать с неиспользованными выводами при инициализации?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Feb 5 2008, 08:34
Сообщение #19


Местный
***

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



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

Как и любой таймер при переполнении. Поэтому программа должна постоянно сбрасывать его счетчик командой WDR. Если по какой-либо причине программа где-то "заблудилась" и этого не сделала, происходит сброс МК и полная переинициализации. Анализируя специальный регистр можно лпределить причину вызвавшую сброс. Но лучше все-таки почитать об этом самому в DS на конкретный МК.
Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0.
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 6 2008, 07:54
Сообщение #20


Местный
***

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



Спасибо!


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Feb 8 2008, 18:54
Сообщение #21





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(VladimirYU @ Feb 5 2008, 11:34) *
Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0.

А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 8 2008, 19:20
Сообщение #22


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Brutaller @ Feb 8 2008, 21:54) *
А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?
ничем...
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 9 2008, 11:28
Сообщение #23


Местный
***

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



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

т.е. DDRX = 0x00, PORTX = 0xFF?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Feb 9 2008, 15:54
Сообщение #24





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



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

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

P.S. Изначально в DDRX не надо пулять нули, по умолчанию после сброса там и так они есть ;)
В разделе "Register Description for I/O-Ports" даташита можно это увидеть.
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 9 2008, 18:47
Сообщение #25


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Да в принципе можно и так. Главное в воздухе не оставлять.
Я правда тоже предпочитаю конфигурить на выход и 0
Go to the top of the page
 
+Quote Post
coolibin
сообщение Feb 11 2008, 09:08
Сообщение #26


Местный
***

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



Столкнулся с такой проблемой, есть схема, на схеме есть много разных скажем так блоков, все они подключены к микропроцу, из этих блоков меня интересует только один. А теперь, уважаемые знатоки вопрос, как "заглушить" подключёные, но не интересуещие меня выводы? или это зависит от схемы?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Feb 11 2008, 10:01
Сообщение #27


Местный
***

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



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


Конечно зависит, например, несколько различных функциональных узлов могут быть подключены к одним и тем же выводам МК, а выбор устройств выполняется сигналами CS (chip select). В постейших случаях может оказаться достаточно просто деактивировать выводы портов ( оставить в 3 состоянии, как после сброса) или если позволяет схемотехника, наоборот записмать в них 0 или 1. Это уже обсуждалось в данной теме.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:50
Рейтинг@Mail.ru


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