roboforum.ru

Технический форум по робототехнике.

Как подключить к МК пищалку?

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Как подключить к МК пищалку?

Сообщение Kozinaka » 01 мар 2010, 18:01

Имеется пьезо пищалка (только излучатель звука, без генератора), как лучше её подключить к МК?

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

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

Re: Как подключить к МК пищалку?

Сообщение Myp » 01 мар 2010, 18:11

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

Re: Как подключить к МК пищалку?

Сообщение avr123.nm.ru » 01 мар 2010, 18:25

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

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 02 мар 2010, 14:30

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

Re: Как подключить к МК пищалку?

Сообщение executer » 02 мар 2010, 14:34

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

Re: Как подключить к МК пищалку?

Сообщение CiSi » 05 мар 2010, 16:56

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

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 14 июн 2010, 00:02

Спасибо за внимание и информацию! Подключить пищалку на две ноги МК и попищать на разной высоте получилось! :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 КиБ) Просмотров: 11759


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

P.S. Proteus в своём осциллографе рисует удивительную динамику: как будто сигнал сначала колеблется от 0 до 5в. а потом плавно сползает вниз. Это глюки осциллографа Proteus'a или я чего-то накрутил и получаю отрицательное напряжение? о_О
HearPWM2.jpg
Аватара пользователя
Kozinaka
 
Сообщения: 85
Зарегистрирован: 17 ноя 2009, 16:21
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 14 июн 2010, 11:09

Так, даташит сказал, что нужен 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 раз.
Аватара пользователя
Kozinaka
 
Сообщения: 85
Зарегистрирован: 17 ноя 2009, 16:21
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов

Re: Как подключить к МК пищалку?

Сообщение blindman » 14 июн 2010, 11:12

Компилятор сам устанавливает регистры таймеров в нужном порядке, если записать вот так
Код: Выделить всёРазвернуть
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!

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

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 14 июн 2010, 14:22

Круть! Спасибо, код стал попонятнее! :)
Перехожу к генерации нот...

Добавлено спустя 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;
      }
   }    
}
Аватара пользователя
Kozinaka
 
Сообщения: 85
Зарегистрирован: 17 ноя 2009, 16:21
Откуда: Москва
прог. языки: C/C++/C#
ФИО: Олег Козлов

Re: Как подключить к МК пищалку?

Сообщение blindman » 14 июн 2010, 15:27

Считаешь-то правильно, только в регистр похоже пишешь совсем не то. У тебя предделитель на 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!

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

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 14 июн 2010, 18:31

Уф! Спасибо тебе, 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;

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

Re: Как подключить к МК пищалку?

Сообщение blindman » 14 июн 2010, 18:37

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

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

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

Re: Как подключить к МК пищалку?

Сообщение Kozinaka » 14 июн 2010, 18:47

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

Re: Как подключить к МК пищалку?

Сообщение blindman » 15 июн 2010, 03:01

Даташиты здесь : 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!

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

След.

Вернуться в Новичкам или основы основ роботостроения.

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

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