Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 24.07.2011, 20:28  
anpaza
Прохожий
 
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
anpaza на пути к лучшему
По умолчанию Re: AVR, UART и режим IDLE

Сообщение от Easyrider83 Посмотреть сообщение
Как у вас во время спячки UART работает? В синхронном режиме что ли? В асинхронном он от тактового генератора работает, который в спячке остановлен.
Я в таком случае заводил линию RX на INT и будил по спаду фронта. Контроллер успевал проснуться и начать прием данных. Ничего не терялось.
Я потому и использую режим IDLE, что по даташиту в оном режиме UART работает. Это вообще единственный режим понижения энергопотребления, при котором UART работает.

Просыпается он у меня по асинхронному таймеру 16 раз в секунду (он у меня заведён на 32 кГц кварц), но, как я понимаю, он просыпается и по прерываниям от UART.
Реклама:
anpaza вне форума  
Непрочитано 24.07.2011, 20:32  
anpaza
Прохожий
 
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
anpaza на пути к лучшему
По умолчанию Re: AVR, UART и режим IDLE

Сообщение от niXto Посмотреть сообщение
Этот баг у нас фичей зовется. ВСЕ контроллеры после выхода из спячки выполняют одну операцию, параллельно в фоне проверяют прерывания, и если прерывание есть - во второй операции переходят по вектору.
Это-то я читал, но там cli() это не следующая команда, а где-то через шесть. К тому же меня бы устроило даже если бы он обработал прерывание по окончании цикла, но он его вообще пропускает. То есть, если бы он устанавливал флаг прерывания по приёму байта и не успел бы его обработать до наступления cli, он бы должен его обработать после sei. На самом же деле он напрочь забывает, что надо бы выполнить прерывание.
anpaza вне форума  
Непрочитано 24.07.2011, 20:51  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: AVR, UART и режим IDLE

anpaza, попробуйте мой способ по прерыванию INT. Режим IDLE - это не совсем сон. А по затратам электричества и вовсе сном назвать сложно.
Easyrider83 вне форума  
Непрочитано 24.07.2011, 22:31  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: AVR, UART и режим IDLE

Сообщение от anpaza Посмотреть сообщение
На самом же деле он напрочь забывает, что надо бы выполнить прерывание.
Копайте код. Значит, кто-то сбрасывает флаг, тем более что у 48 двойной буфер ЮСАРТа, его не так просто заставить "не заметить" байт. Флаг прерывания сбрасывается по РЕТИ или ручками?
niXto вне форума  
Непрочитано 25.07.2011, 03:04  
anpaza
Прохожий
 
Регистрация: 14.02.2011
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
anpaza на пути к лучшему
По умолчанию Re: AVR, UART и режим IDLE

Easyrider83, режим IDLE в шесть раз меньше потребляет чем активный режим (150мкА против ~900 мкА на 1МГц), так что смысл его использовать вполне есть.

В общем, я разобрался с багом. Проблема была вовсе не в режиме IDLE, а как раз в том, что код между cli() и sei() выполняется дольше, чем принимаются два байта. В результате, если я посылал больше двух байт, к приезду третьего оба регистра приёма не успевал очиститься, вледствие чего выставлялся флаг DOR0 (Data OverRun).
anpaza вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU] yurinform Микроконтроллеры, АЦП, память и т.д 5 05.07.2011 19:00
Проблема правильного приема пакета UART AVR Saadov Микроконтроллеры, АЦП, память и т.д 16 27.04.2011 20:11
Проблема с передачей данных между avr по uart code-by Proteus 2 21.01.2011 12:24
Симуляция UART для AVR studio mm12345 Микроконтроллеры, АЦП, память и т.д 0 22.11.2010 15:40
Управление энергопотреблением и режим idle day177 Микроконтроллеры, АЦП, память и т.д 9 28.12.2007 23:53


Часовой пояс GMT +4, время: 08:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot