Пара вопросов по МК AVR
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Пара вопросов по МК AVR
Подскажите, плз, начинающему, как решить 2 вопроса:
1-й генерация AVR ATtiny2313, ATmega8 звука
2-й включение/отключение питания МК одной кнопкой, т.к. есть необходимость сделать один девайс, где надо реализовать так питание.
Тренируюсь в программировании МК на WinAVR
1-й генерация AVR ATtiny2313, ATmega8 звука
2-й включение/отключение питания МК одной кнопкой, т.к. есть необходимость сделать один девайс, где надо реализовать так питание.
Тренируюсь в программировании МК на WinAVR
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Пара вопросов по МК AVR
1 зависит от типа звука (синтез или воспроизведение записи), в любом случае - МК+ЦАП+УНЧ
2 при нажатии на кнопку переход в режим power-down (потребление - микроамперы), при повторном нажатии - соответственно переход в обычный режим, естественно все по прерыванию (INT1-2 или pin change)
2 при нажатии на кнопку переход в режим power-down (потребление - микроамперы), при повторном нажатии - соответственно переход в обычный режим, естественно все по прерыванию (INT1-2 или pin change)
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
по 1-му вопроса, - просто должна быть генерация сигнала в диапозоне от 600 до 2000 Гц в зависимости от необходимости;
по 2-му - принцип понятен, а как на практике это все выполнить, то бишь оба вопроса хотя бы общие наброски программ.
по 2-му - принцип понятен, а как на практике это все выполнить, то бишь оба вопроса хотя бы общие наброски программ.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Пара вопросов по МК AVR
Так какой сигнал? Прямоугольный? Тогда берем таймер, настраиваем предделитель - получаем нужную частоту (грубо), записываем в регистр сравнения число (подбираем частоту - точно). Настраиваем прерывание - совпадение таймера с регистром. В процедуре обработки - сбрасываем таймер, выводим наш сигнал.
Вкл/Выкл примерно будет так: Настраиваем прерывание (pin change) на какую-нибудь ногу, берем какой-нибудь ненужный бит в регистре для запоминания режима (лучше SE в MCUCR). Записываем в MCUCR биты для режима power down. При нажатии на кнопку - прерывание, в нем проверяем в каком режиме находимся, если в активном (SE=0), то делаем SE=1 и выполняем команду SLEEP, если уже спим, тогда SE=0 и выход из подпрограммы...
Проги писать уже глаза закрываются
Все, я
SBI MCUCR,SE
SLEEP
Вкл/Выкл примерно будет так: Настраиваем прерывание (pin change) на какую-нибудь ногу, берем какой-нибудь ненужный бит в регистре для запоминания режима (лучше SE в MCUCR). Записываем в MCUCR биты для режима power down. При нажатии на кнопку - прерывание, в нем проверяем в каком режиме находимся, если в активном (SE=0), то делаем SE=1 и выполняем команду SLEEP, если уже спим, тогда SE=0 и выход из подпрограммы...
Проги писать уже глаза закрываются
Все, я
SBI MCUCR,SE
SLEEP
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
сигнал прямоугольной формы, а по программам все-таки хотелось бы подробней, если можно потом.
Спасибо за ответы!
Спасибо за ответы!
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
добрый вечер, ув. коты! прошу меня не пинать и не роутить через 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 мне необходимо выставить?
прочитал досконально даташит на 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 мне необходимо выставить?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пара вопросов по МК AVR
раз уж вы тренируетесь на WinAVR, почему бы вам не использовать модуль avr/sleep.h и его макросы set_sleep_mode() и sleep_mode() ???
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
я пытаюсь тренироваться на cvavr и winavr! но хоть какая-то инфо по режиму sleep нарыл на cvavr.
можно, ув. ARV немного описать этот модуль?
можно, ув. ARV немного описать этот модуль?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пара вопросов по МК AVR
можно: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();если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: Пара вопросов по МК AVR
saint981 писал(а):афтар персчитал значения каким-то образом и врпоге указал так:
Аффтар перевёл значение в 16-ричную систему. Иногда это оправданно и удобно, но скажите мне, почему бы в таких случаях, когда нужно побитно работать с регистром, не воспользоваться фитчами winavr-а указывая, даже не номера конкретных битов, а их название(!)?
Код: Выделить всё
MCUCR|=(1<<SM0); //Sleep Mode: Power-down
MCUCR|=(1<<SE); //Sleep Enable
asm("sleep"); //ZZZzzzz... ZZZzzzz... ZZZzzzz...
Чтоб разбудить контроллер, настройте внешнее прерывание.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пара вопросов по МК AVR
если следовать стилю WinAVR, то следует воспользоваться макросом _BV():AI_Disable писал(а):но скажите мне, почему бы в таких случаях, когда нужно побитно работать с регистром, не воспользоваться фитчами winavr-а указывая, даже не номера конкретных битов, а их название(!)?Код: Выделить всё
MCUCR|=(1<<SM0); //Sleep Mode: Power-down
MCUCR|=(1<<SE); //Sleep Enable
asm("sleep"); //ZZZzzzz... ZZZzzzz... ZZZzzzz...
Код: Выделить всё
MCUCR |= _BV(SM0);
MCUCR |= _BV(SE);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: Пара вопросов по МК AVR
ARV писал(а):если следовать стилю WinAVR, то следует воспользоваться макросом _BV():
Просто не уважаю я эти макросы
Re: Пара вопросов по МК AVR
ARV, а откуда цитата с описанием макросов WinAVR?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пара вопросов по МК AVR
это я занимался переводом документации к avr-libc и WinAVRwvw писал(а):ARV, а откуда цитата с описанием макросов WinAVR?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
написал прогу с помощью CodeVision для перевода tiny2313 в режим сна и обратно, но хотелось, чтобы подсказали мне, правильно ли описал я работу мк?
кнопка для вкл-выкл мк подключена между землей и выводом PD2, а светодиод к PD5, который служит индикацией режима работы мк. меня интересует - правильно ли записал MCUCR=0b01110011
Заранее спс.
кнопка для вкл-выкл мк подключена между землей и выводом PD2, а светодиод к PD5, который служит индикацией режима работы мк. меня интересует - правильно ли записал MCUCR=0b01110011
Заранее спс.
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
листинг проги в cvar весит 3 кб, а 1,7 кб - старый вариант в winavr (удалить не получилось).
- maglev
- Потрогал лапой паяльник
- Сообщения: 316
- Зарегистрирован: Пт апр 17, 2009 22:45:42
- Откуда: Minsk
- Контактная информация:
Re: Пара вопросов по МК AVR
А я как-то аппаратное решение полюбил. Одной кнопочкой вклю-выключаю. Щас покажу схему.
- Вложения
-
- Image1.gif
- (4.73 КБ) 1170 скачиваний
- >TEHb<
- Друг Кота
- Сообщения: 5732
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Пара вопросов по МК AVR
А никто не подумал тупо о кнопке с фиксацией? Фильтруем дребезг, ставим запуск подольше и готово. Хотя туда - сюда передёргивать питание без надобности на то, конечно, не сильно хорошо.
"Привет!" - соврал он.
-
saint981
- Первый раз сказал Мяу!
- Сообщения: 33
- Зарегистрирован: Вс мар 08, 2009 22:52:27
- Откуда: Ukraine
Re: Пара вопросов по МК AVR
а по подробнее?
тем более что, необходимо именно вкл-выкл мк кнопкой;
как правильно сформировать задержку после нажатия кнопки?
тем более что, необходимо именно вкл-выкл мк кнопкой;
как правильно сформировать задержку после нажатия кнопки?
- >TEHb<
- Друг Кота
- Сообщения: 5732
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Пара вопросов по МК AVR
Обычная кнопка с фиксацией, после неё хватит даже небольшого кондера, а на МК фьюзами ставим или самый долгий запуск или вообще включаем БОД.
"Привет!" - соврал он.