Страница 1 из 4
Пара вопросов по МК AVR
Добавлено: Пт апр 09, 2010 21:23:09
saint981
Подскажите, плз, начинающему, как решить 2 вопроса:
1-й генерация AVR ATtiny2313, ATmega8 звука
2-й включение/отключение питания МК одной кнопкой, т.к. есть необходимость сделать один девайс, где надо реализовать так питание.
Тренируюсь в программировании МК на WinAVR
Re: Пара вопросов по МК AVR
Добавлено: Пт апр 09, 2010 21:37:10
Engineer_Keen
1 зависит от типа звука (синтез или воспроизведение записи), в любом случае - МК+ЦАП+УНЧ
2 при нажатии на кнопку переход в режим power-down (потребление - микроамперы), при повторном нажатии - соответственно переход в обычный режим, естественно все по прерыванию (INT1-2 или pin change)
Re: Пара вопросов по МК AVR
Добавлено: Пт апр 09, 2010 21:44:26
saint981
по 1-му вопроса, - просто должна быть генерация сигнала в диапозоне от 600 до 2000 Гц в зависимости от необходимости;
по 2-му - принцип понятен, а как на практике это все выполнить, то бишь оба вопроса хотя бы общие наброски программ.
Re: Пара вопросов по МК AVR
Добавлено: Пт апр 09, 2010 22:07:26
Engineer_Keen
Так какой сигнал? Прямоугольный? Тогда берем таймер, настраиваем предделитель - получаем нужную частоту (грубо), записываем в регистр сравнения число (подбираем частоту - точно). Настраиваем прерывание - совпадение таймера с регистром. В процедуре обработки - сбрасываем таймер, выводим наш сигнал.
Вкл/Выкл примерно будет так: Настраиваем прерывание (pin change) на какую-нибудь ногу, берем какой-нибудь ненужный бит в регистре для запоминания режима (лучше SE в MCUCR). Записываем в MCUCR биты для режима power down. При нажатии на кнопку - прерывание, в нем проверяем в каком режиме находимся, если в активном (SE=0), то делаем SE=1 и выполняем команду SLEEP, если уже спим, тогда SE=0 и выход из подпрограммы...
Проги писать уже глаза закрываются
Все, я
SBI MCUCR,SE
SLEEP
Re: Пара вопросов по МК AVR
Добавлено: Пт апр 09, 2010 22:16:53
saint981
сигнал прямоугольной формы, а по программам все-таки хотелось бы подробней, если можно потом.
Спасибо за ответы!
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 19:55:10
saint981
добрый вечер, ув. коты! прошу меня не пинать и не роутить через vlan на обучалку.
прочитал досконально даташит на tiny2313, книги белова и уяснил, что для перевода в режим
sleep необходимо по внешнему прерыванию сделать прерывание и проверить/записать в бит SE - 1, а в биты SM0 (бит 4) и SM1 (бит 6) комбинацию для выбора режима МК. Т.е. получается
power save mode биты 7 6 5 4 надо записать 0111, а проснуться по разрешенному внешнему прерыванию на выводе INT0 - записав в биты ISC01 ISC00 11. ТАк подобно сделано в примере для МК м8535 - т.е афтар персчитал значения каким-то образом и врпоге указал так:
MCUCR=0x75
asm("slep")
Подскажите, подойдет такая форма усыпления МК? какое значение MCUCR мне необходимо выставить?
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 20:58:08
ARV
раз уж вы тренируетесь на WinAVR, почему бы вам не использовать модуль avr/sleep.h и его макросы set_sleep_mode() и sleep_mode() ???
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 21:52:46
saint981
я пытаюсь тренироваться на cvavr и winavr! но хоть какая-то инфо по режиму sleep нарыл на cvavr.
можно, ув. ARV немного описать этот модуль?
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 22:59:46
ARV
saint981 писал(а):можно немного описать этот модуль?
можно:
avr/sleep.h – Управление энергосберегающими режимами и режимами «сна»
В этом модуле определен ряд макросов и функций, реализующих общий интерфейс управления режимами «сна».
Использование инструкции SLEEP позволяет снизить общее энергопотребление в некоторых применениях. Микроконтроллеры AVR реализуют несколько различных вари-антов «сна», для которых в модуле определены следующие константы (о поддержке вы-бранным контроллером соответствующего режима следует справиться в документации к контроллеру, не все константы определены для любого контроллера):
SLEEP_MODE_IDLE – режим «бездействия» Idle
SLEEP_MODE_PWR_DOWN – режим «отключения» Power Down
SLEEP_MODE_PWR_SAVE – режим «экономии» Power Save
SLEEP_MODE_ADC – режим «снижения шума АЦП» ADC Noise Reduction
SLEEP_MODE_STANDBY – режим «ожидания»
SLEEP_MODE_EXT_STANDBY – расширенный режим «ожидания»
Практически управление режимом энергосбережения сводится к вызову макроса set_sleep_mode() для указания нужного режима и последующего включения этого режима макросом sleep_mode(). Следует помнить, что если нет необходимости остановить работу микроконтроллера вплоть до аппаратного сброса, необходимо разрешить прерывания до выполнения этих макросов.
В некоторых случаях может потребоваться большая гибкость в управлении режимами экономии, для чего предусмотрены отдельные функции sleep_enable(), sleep_disable() и sleep_cpu().
Функции и макросы модуля
set_sleep_mode()
set_sleep_mode(mode) – макрос, подготавливающий микроконтроллер к заданному режиму сна. Параметр mode – одна из определенных ранее констант режима. Этот макрос эквивалентен переходу в режим Idle, т.е. остановки тактового генератора и отключения периферии, если это требуется режимом, не происходит. Для полноценного включения режима требуется второй макрос sleep_mode()
sleep_mode()
sleep_mode() – макрос, переводящий микроконтроллер в режим сна. Его реализация такова, что программист вправе считать, что «возврат» из макроса произойдет уже после «пробуждения» контроллера.
sleep_enable()
void sleep_enable(void) – функция, устанавливающая бит разрешения режима сна (SE-бит).
sleep_disable()
void sleep_disable(void) – функция, сбрасывающая бит разрешения режима сна (SE-бит)
sleep_cpu()
void sleep_cpu(void) – функция, «усыпляющая» микроконтроллер, т.е. эквивалент-ная команде SLEEP.
собственно говоря, усыпляют контроллер так:
Код: Выделить всё
#include <avr/sleep.h>
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
константа режима сна может быть любой нужной.
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 23:09:54
AI_Disable
saint981 писал(а):афтар персчитал значения каким-то образом и врпоге указал так:
Аффтар перевёл значение в 16-ричную систему. Иногда это оправданно и удобно, но скажите мне, почему бы в таких случаях, когда нужно побитно работать с регистром, не воспользоваться фитчами winavr-а указывая, даже не номера конкретных битов, а их название(!)?
Код: Выделить всё
MCUCR|=(1<<SM0); //Sleep Mode: Power-down
MCUCR|=(1<<SE); //Sleep Enable
asm("sleep"); //ZZZzzzz... ZZZzzzz... ZZZzzzz...
Чтоб разбудить контроллер, настройте внешнее прерывание.
Re: Пара вопросов по МК AVR
Добавлено: Чт июн 17, 2010 23:43:05
ARV
AI_Disable писал(а):но скажите мне, почему бы в таких случаях, когда нужно побитно работать с регистром, не воспользоваться фитчами winavr-а указывая, даже не номера конкретных битов, а их название(!)?
Код: Выделить всё
MCUCR|=(1<<SM0); //Sleep Mode: Power-down
MCUCR|=(1<<SE); //Sleep Enable
asm("sleep"); //ZZZzzzz... ZZZzzzz... ZZZzzzz...
если следовать стилю WinAVR, то следует воспользоваться макросом _BV():
однако, еще лучше воспользоваться готовыми макросами, как я описал ранее
Re: Пара вопросов по МК AVR
Добавлено: Пт июн 18, 2010 00:20:08
AI_Disable
ARV писал(а):если следовать стилю WinAVR, то следует воспользоваться макросом _BV():
Просто не уважаю я эти макросы

. Становится сложнее читать код человеку, использующего другой компилятор. Так что, правильнее сказать, надо использовать стандартные средства Си. Исключение - названия битов регистров, т.к. эта фитча упрощает чтение (и написание, конечно же) программы, даже если человек пользует другую среду.
Re: Пара вопросов по МК AVR
Добавлено: Пт июн 18, 2010 06:52:47
wvw
ARV, а откуда цитата с описанием макросов WinAVR?
Re: Пара вопросов по МК AVR
Добавлено: Пт июн 18, 2010 11:39:38
ARV
wvw писал(а):ARV, а откуда цитата с описанием макросов WinAVR?
это я занимался переводом документации к avr-libc и WinAVR
Re: Пара вопросов по МК AVR
Добавлено: Пт июн 18, 2010 19:32:10
saint981
написал прогу с помощью CodeVision для перевода tiny2313 в режим сна и обратно, но хотелось, чтобы подсказали мне, правильно ли описал я работу мк?
кнопка для вкл-выкл мк подключена между землей и выводом PD2, а светодиод к PD5, который служит индикацией режима работы мк. меня интересует - правильно ли записал MCUCR=0b01110011
Заранее спс.
Re: Пара вопросов по МК AVR
Добавлено: Сб июн 19, 2010 22:00:09
saint981
листинг проги в cvar весит 3 кб, а 1,7 кб - старый вариант в winavr (удалить не получилось).
Re: Пара вопросов по МК AVR
Добавлено: Сб июн 19, 2010 22:24:25
maglev
А я как-то аппаратное решение полюбил. Одной кнопочкой вклю-выключаю. Щас покажу схему.
Re: Пара вопросов по МК AVR
Добавлено: Сб июн 19, 2010 22:41:44
>TEHb<
А никто не подумал тупо о кнопке с фиксацией? Фильтруем дребезг, ставим запуск подольше и готово. Хотя туда - сюда передёргивать питание без надобности на то, конечно, не сильно хорошо.
Re: Пара вопросов по МК AVR
Добавлено: Сб июн 19, 2010 23:06:46
saint981
а по подробнее?
тем более что, необходимо именно вкл-выкл мк кнопкой;
как правильно сформировать задержку после нажатия кнопки?
Re: Пара вопросов по МК AVR
Добавлено: Сб июн 19, 2010 23:19:24
>TEHb<
Обычная кнопка с фиксацией, после неё хватит даже небольшого кондера, а на МК фьюзами ставим или самый долгий запуск или вообще включаем БОД.