|
инициализация AVR, какие действия обязательны? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
Guest_=VRA=_*
|
Jan 31 2008, 07:58
|
Guests

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

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

|
Цитата(=VRA= @ Jan 31 2008, 10:58)  и отключить ту, которую не будешь (например, WDT). Если у вас после reset включен watchdog, отключить его все равно не удастся. Цитата(=VRA= @ Jan 31 2008, 10:58)  Обязательно правильно выставить фузы (настроить тактирование, BOD, совместимость и т.д.). А это делается при прожигании, а не после reset
|
|
|
|
|
Feb 4 2008, 01:56
|

Профессионал
    
Группа: Свой
Сообщений: 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....
|
|
|
|
|
Feb 4 2008, 05:13
|

Местный
  
Группа: Свой
Сообщений: 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
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Feb 4 2008, 14:05
|
Местный
  
Группа: Свой
Сообщений: 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 таймер? а то как то размыто пишут Для реализации сброса контроллера в случае его зависания по какой-либо причине, например, бесконечный цикл. Это один из механизмов самовостановления работоспособности устройства, и поиска фатальных программных ошибок. Если кратко.
|
|
|
|
|
Feb 5 2008, 08:10
|
Участник

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

|
Цитата(Kirill Trusov @ Feb 5 2008, 09:54)  a eto nado ? ИМХО в критических приложениях надо, а для себя как пожелаешь. опять же имхо, вопрос должен стоять не надо/не надо, а как именно использовать сторожевой таймер в программе.
|
|
|
|
|
Feb 5 2008, 08:34
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(coolibin @ Feb 5 2008, 11:25)  ну и как же им пользоватся? при каких условиях он срабатывает? и ещё, что делать с неиспользованными выводами при инициализации? Как и любой таймер при переполнении. Поэтому программа должна постоянно сбрасывать его счетчик командой WDR. Если по какой-либо причине программа где-то "заблудилась" и этого не сделала, происходит сброс МК и полная переинициализации. Анализируя специальный регистр можно лпределить причину вызвавшую сброс. Но лучше все-таки почитать об этом самому в DS на конкретный МК. Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0.
|
|
|
|
|
Feb 8 2008, 18:54
|
Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779

|
Цитата(VladimirYU @ Feb 5 2008, 11:34)  Как я уже отмечал, если говорить об AVR, то из личного опыта рекомендую сконфигурировать их на выход и записать туда 0. А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины?
|
|
|
|
|
Feb 9 2008, 11:28
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228

|
Цитата(Brutaller @ Feb 8 2008, 20:54)  А чем хуже подключить внутренние pull-up резисторы на неиспользуемые пины? т.е. DDRX = 0x00, PORTX = 0xFF?
--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
|
|
|
|
|
Feb 9 2008, 15:54
|
Группа: Новичок
Сообщений: 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" даташита можно это увидеть.
|
|
|
|
|
Feb 11 2008, 10:01
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(coolibin @ Feb 11 2008, 12:08)  Столкнулся с такой проблемой, есть схема, на схеме есть много разных скажем так блоков, все они подключены к микропроцу, из этих блоков меня интересует только один. А теперь, уважаемые знатоки вопрос, как "заглушить" подключёные, но не интересуещие меня выводы? или это зависит от схемы? Конечно зависит, например, несколько различных функциональных узлов могут быть подключены к одним и тем же выводам МК, а выбор устройств выполняется сигналами CS (chip select). В постейших случаях может оказаться достаточно просто деактивировать выводы портов ( оставить в 3 состоянии, как после сброса) или если позволяет схемотехника, наоборот записмать в них 0 или 1. Это уже обсуждалось в данной теме.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|