roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 19:10

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Как подключить к МК пищалку?
СообщениеДобавлено: 01 мар 2010, 18:01 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Имеется пьезо пищалка (только излучатель звука, без генератора), как лучше её подключить к МК?

Собираюсь просто посадить на две выходных ноги (на одной 0, на другой 1), инвертируя с определённой частотой сигнал на них.

Сопротивление пищалки если мерять какое-то гигантское получается, т.е. резисторы не нужны? А ещё часто советуют конденсатор вставлять, для чего?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 01 мар 2010, 18:11 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
раз не меряется сопротивление то нужно ёмкость померять :)

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 01 мар 2010, 18:25 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Подключение нормальное, но надежней последовательно включить резистор на 130-200 Ом.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 02 мар 2010, 14:30 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
А конденсатор нужен? Пьезо пищалка перестаёт проводить ток после того как мембрана выгнется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 02 мар 2010, 14:34 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
скорее после того как внутренняя емкость зарядится до напряжения питания. (а уже вследствие этого пластинка выгнится)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 05 мар 2010, 16:56 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
Вот сдесь посмотри, там должен все найти: viewtopic.php?f=16&t=2785&start=0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 00:02 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Спасибо за внимание и информацию! Подключить пищалку на две ноги МК и попищать на разной высоте получилось! :D

Теперь хочется не заниматься генерацией частоты нот и воспроизведением мелодии в основной программе. Почитал тему про "Рюшечки", решил сделать через ШИМ, как у yak-40, но столкнулся с рядом проблем:

Решил повесить всё на третий, двухбайтовый, счётчик-таймер (у меня mega128), сделал 10-битный быстрый ШИМ, вот так инициализирую:

Код:
   //Вывод PE3 переключается в режим OC3A и
   //сбрасывается при совпадении таймера со счетчиком,
   //WGM3: 0111 = 10-разр. быстрая ШИМ
   //Таймер остановлен
   TCCR3A = 0b10000011;
   TCCR3B = 0b00001000;    

   //Сброс счетчика таймера
   TCNT1H = 0x00;
   TCNT1L = 0x00;

   //Запуск таймера с предделителем 8
   TCCR3B |= 0b10;

   //Установка регистра сравнения (число от 0 до 1023)
   OCR3AH = (char)(nPWM>>8);
   OCR3AL = (char)nPWM;


На ноге PE3 висит пищалка, в зависимости от величины nPWM получается звук разной интенсивности, но одинаковой частоты. :(

В общем, почему так происходит мне теперь понятно:
Вложение:
HearPWM1.jpg
HearPWM1.jpg [ 11.24 КиБ | Просмотров: 11764 ]


Подскажите, плиз, какой режим работы счетчика-таймера мне нужен, чтобы генерировать разные частоты?
СТС? - а как тогда добиться, чтобы сигнал половину периода шел, а половину нет?

P.S. Proteus в своём осциллографе рисует удивительную динамику: как будто сигнал сначала колеблется от 0 до 5в. а потом плавно сползает вниз. Это глюки осциллографа Proteus'a или я чего-то накрутил и получаю отрицательное напряжение? о_О
Вложение:
HearPWM2.jpg
HearPWM2.jpg [ 97.29 КиБ | Просмотров: 7245 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 11:09 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Так, даташит сказал, что нужен CTC с режимом инвертирования сигнала на OCRnA. Вот сделал такой код инициализации:
Код:
//Вывод PE3 переключается в режим OC3A и переключает
//своё состояние при совпадении таймера со счетчиком,
//WGM3: 0100 = CTC
//Таймер остановлен
TCCR3A = 0b01000000;
TCCR3B = 0b00001000;


Но что такой запуск:
Код:
//Установка регистра сравнения (число от 0 до 1023)
OCR3AH = (char)(20>>8);
OCR3AL = (char)20;
//Запуск таймера с предделителем 8
TCCR3B |= 0b10;

Что такой:
Код:
//Установка регистра сравнения (число от 0 до 1023)
OCR3AH = (char)(900>>8);
OCR3AL = (char)900;
//Запуск таймера с предделителем 8
TCCR3B |= 0b10;

Дают один и тот же прямоугольный сигнал с низкой частотой, из пищалки слышно пуканье, видимо это сигнал с частотой максимального значения счётчика. :(

Добавлено спустя 34 минуты 13 секунд:
Разобрался! :D

Фишка в том, как я останавливал таймер при переключении частоты. Двадцать раз прочитал про нюансы обращения с двухбайтовыми регистрами и именно в них напортачил. Вот корректный код постепенно уменьшающий частоту сигнала (управляющий регистр присваивается полностью, сначала старший байт, потом младший):
Код:
//Главный цикл
while(nFreq < 1000) {
   //Уменьшение частоты сигнала
   nFreq += 10;

   //Остановка таймера
   TCCR3A = 0b01000000;
   TCCR3B = 0b00001000;

   //Сброс счетчика таймера
   TCNT3H = 0x00;
   TCNT3L = 0x00;

   //Установка счётного регистра
   OCR3AH = (char)(nFreq>>8);
   OCR3AL = (char)nFreq;

   //Запуск таймера с предделителем 8
   TCCR3A = 0b01000000;
   TCCR3B = 0b00001010;

   //Пауза до следующего переключения частоты
   _delay_ms(100);
}


Последний раз редактировалось Kozinaka 14 июн 2010, 12:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 11:12 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Компилятор сам устанавливает регистры таймеров в нужном порядке, если записать вот так
Код:
OCR3A = nFreq;

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 14:22 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Круть! Спасибо, код стал попонятнее! :)
Перехожу к генерации нот...

Добавлено спустя 2 часа 16 минут 13 секунд:
Теперь трабла со временем: как с помощью таймера-счётчика считать миллисекунды?

Частота кристалла выставлена 16Мгц, следовательно в секунду 16000000 срабатываний.
Ставлю на таймере-счётчике предделитель 128, получаю 16000000 / 128 = 125000 срабатываний в секунду. Дальше счетчику работающему в режиме CTC устанавливаю границу сброса 124, т.е. 125000 / 125 = 1000 срабатываний в секунду! В обработчике прерывания от таймера считаю 1000 раз и включаю\отключаю звук пикалки.
Увы получается не 1 секунда, а где-то 17 секунд. :(

Я правильно считаю?

Вот код инициализации счётчика:
Код:
//ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА 2
TCCR2 = 0b01001101;
OCR2 = 124;


Вот код обработчика прерывания:
Код:
//Обработчик прерывания по нажатию кнопки
ISR(TIMER2_COMP_vect) {
   ++g_nTime;
   if(g_nTime > 1000) {
      g_nTime = 0;
      if(g_bDebug) {
         //Тут остановка пищания 3 таймером         
         g_bDebug = false;
      } else {
         //Тут запуск пищания 3 таймером
         g_bDebug = true;
      }
   }    
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 15:27 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Считаешь-то правильно, только в регистр похоже пишешь совсем не то. У тебя предделитель на 1024 и fast pwm
и вот такое лучше не писать:
Код:
TCCR2 = 0b01001101;

есть же определения битов регистров, их и надо использовать

А предделителя на 128 у второго таймера нет

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 18:31 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Уф! Спасибо тебе, blindman, огромное! :) А то я закис совсем.
В даташите WGM0 и WGM1 то так, то так написаны, а второго счетчика вообще нет, но подразумевается, что он аналог 0-го. А где можно почитать про 2-ой счётчик?

Действительно, я неправильно его инициализировал! Но никогда бы не смог допустить, что у второго таймера нет предделителя 128! Блок предделителя общий на три таймера 1, 2, 3, это даже в даташите есть. :shock:

Сейчас инициализирую счётчик так:
Код:
//Включение прерывания счетчика 0
TIMSK |= 1<<OCIE0;
//Инициализация счетчика 0
TCCR0 = 0x00 | 1<<WGM01 | 1<<CS02 | 1<<CS00;   
//Порог счетчика 0
OCR0 = 124;

Спасибо за рекомендацию, так понятнее и ошибиться сложнее!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 18:37 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Это у тебя или даташит негодный, или не туда смотришь.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 14 июн 2010, 18:47 
Не в сети
Аватара пользователя

Зарегистрирован: 17 ноя 2009, 16:21
Сообщения: 85
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов
Смотрю на даташит вот тут: http://www.gaw.ru/html.cgi/txt/doc/micr ... /index.htm
Видимо при переводе что-то в стружку ушло. :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как подключить к МК пищалку?
СообщениеДобавлено: 15 июн 2010, 03:01 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Даташиты здесь : http://atmel.com/dyn/products/devices.asp?family_id=607 и здесь : http://atmel.com/dyn/products/devices_v ... 0Solutions. Все остальное - эммм... фигня.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO