Страница 1 из 2
пьезоизлучатель HPM14A + attiny2313
Добавлено: Пн фев 08, 2010 11:41:48
MTF
Всем привет !!!! Кто нибуть имел дело с этим излучателем ,у меня возникла следующая проблема проблема
Приладил HPM14A к attiny2313 , + вывод к выводу 1 PortB, - соответственно к минусу , нужно чтобы он
пикал при нажатии на кнопки на моем устройстве.
Вопрос:
к нему случаем не нужен усилитель на транзисторе (по DATASEET
ток 1ма ,напр 5вольт ) ????
и вообще как им управлять ,что то ни как не пойму,
пробовал просто подавать импульс на 0,5сек
не писчит ????? , со встроенным генератором электромагнитный излучатель при этом коде работает , а этот не хочет.
Код: Выделить всё
.equ OutPort = PORTB
*********
*********
sbi OutPort,(1<<OutPin) ;
rcall delay ;вызов задержки 0,5 сек
cbi OutPort,(1<<OutPin) ;
*********
Прошу подсказать как надо управлять пьезоизлучателями , может через таймер ???
Добавлено: Пн фев 08, 2010 12:42:05
Секретный кот
А есть ли у него встроенный генератор?..
Может, надо не один, а серию импульсов подавать, определённой частоты (из даташита)?
Добавлено: Пн фев 08, 2010 14:43:04
dron711
HPM14A-просто излучатель. На него надо подавать импульсы с нужной частотой. Со встроенным генератором HPM14AX. Но они уже от 12 вольт питаются.
Добавлено: Вт фев 09, 2010 00:10:45
MTF
частота HPM14A 4000 ± 500 гц
На него надо подавать импульсы с нужной частотой
я так понял что только через таймер можно заставить писчать , может кто нибуть обьяснить как это сделать ,хоть убей не пойму ?????
Добавлено: Вт фев 09, 2010 01:22:37
Секретный кот
Почему сразу через таймер? Дело вкуса.
Можно тот же самый rcall delay задействовать...
Добавлено: Вт фев 09, 2010 01:53:06
ibiza11
MTF писал(а):...хоть убей не пойму ?????
нужно подать серию импульсов какой-либо частоты звукового диапазона на вывод пьезоизлучателя.
Добавлено: Вт фев 09, 2010 06:58:48
Alex72
Не надо человека в заблуждение вводить. Это пьезоизлучатель со встроенным генератоом. Uпит=5В. Проверь полярность подключения. А вообще просто подключи к нему питание, убедись что он исправен.
Усилитель к нему не нужен, так как ток потребления <1mA. Подключать можно прямо к пину МК
Добавлено: Вт фев 09, 2010 09:32:40
ibiza11
Alex72 писал(а):..Это пьезоизлучатель со встроенным генератоом...
не согласен! вообще с чего вы взяли?
HPM14A - без встроенного генератора
HPM14AХ - со встроенным генератором
Топикстартер, проверьте маркировку.
Добавлено: Вт фев 09, 2010 11:46:56
MTF
HPM14A - 100% без встроенного генератора
ibiza11
нужно подать серию импульсов какой-либо частоты звукового диапазона на вывод пьезоизлучателя.
В принципе я понял что надо подать серию импульсов !!!
Уважаемые коты , так может кто нибуть обьснить , как подается эта самая серия импульсов для пьезоизлучателя HPM14A, мне надо просто пикнуть на нажатие кнопки !!
у меня таймер T0 работает с делением 256 по переполнению ,тактовая частота 4мгц , (T1 нет возможности использовать) , можно ли использовать T0 для подачи серии импульсов ~ 4000гц ????
допустим в основной программе после нажатия кнопки я установил флаг beep = 1 , а в таймере смотреть если beep = 1 ,то подавать серию импульсов а в конце сбросить beep = 0 , если можно то подскажите как это делается програмно ???
Добавлено: Вт фев 09, 2010 17:39:35
Pooher
А код то в чём пишите?
Добавлено: Вт фев 09, 2010 17:41:12
MTF
Pooher Assembler AVR Studio
Добавлено: Вт фев 09, 2010 21:05:51
Neekeetos
MTF писал(а):Pooher Assembler AVR Studio
Возможно если сделать таймерное прерывание то в твоем случае оно будет давать почти 16килогерц, соотв тебе надо получить частоту в 4 раза меньше, для этого заведи счетчик который будет доступен между прерываниями, я правда не знаю хватит ли тебе длительности но вот самый простой алгоритм(а может и нет, я не проверял

).
в прерывании:
Код: Выделить всё
dec counter
brne next
inc counter
in temp,PORTB
andi temp, ИНВЕРСНАЯ_МАСКА_ПИНА_ГДЕ_ВИСИТ_ДИНАМИК (для 1 бита к примеру 0xFD = (0хFF - 0х02)
out PORTB,temp
next:
ldi temp,0x01
and temp,counter
brne no_sound
out PINB,МАСКА_ПИНА_ГДЕ_ВИСИТ_ДИНАМИК (для 1 бита к примеру 0х02)
no_sound:
делаешь свои дела в прерывании
работает так , когда у тебя гдето нажата кнопка и ты хочешь чтобы динамик пискнул , загружаешь в counter учетверенное количество тактов, соотв динамик пропищит их и замолкнет когда counter станет единицей.
Добавлено: Ср фев 10, 2010 00:36:49
MTF
Neekeetos а, если я буду использовать таймер без деления частоты , вот что пришло в голову
Код: Выделить всё
tmkey: .byte 1
T1_OVF:
;код который работает каждые 0,000064 с
cpi beep, 1
brne no_sound
cpi counter ,62 ; ~ 0,004 с 4000гц
brne no_sound
clr counter ; 0
sbi OutPort,(1<<OutPin) ;1
cbi OutPort,(1<<OutPin) ;0
no_sound:
inc counter
lds tmp, tmkey
inc tmp
sts tmkey, tmp
tst tmp
brne tm_exit ;
;код который работает каждые 0,016384 с
***********
***********
***********
tm_exit:
reti
вынесите вердикт ??????
Добавлено: Ср фев 10, 2010 08:24:53
ibiza11
MTF писал(а):вынесите вердикт ??????
у Вас же спаяное устройство! вынести вердикт сами не можете?

Добавлено: Ср фев 10, 2010 10:23:23
Neekeetos
MTF писал(а):Neekeetos а, если я буду использовать таймер без деления частоты , вот что пришло в голову
вынесите вердикт ??????
Лехко
Код: Выделить всё
T1_OVF:
;код который работает каждые 0,000064 с это грубо говоря прерывание с частотой 15625 Гц
cpi beep, 1
brne no_sound ; тут все ок, я на флагах в своем коде экономил но так прямее
cpi counter ,62 ; ~ 0,004 с 4000гц
brne no_sound ;
clr counter ; 0
sbi OutPort,(1<<OutPin) ;1 ; вообще то если пишешь в регистр пин то соотв вывод меняет состояние на обратное, надо оставить одну первую команду
cbi OutPort,(1<<OutPin) ;0 фтопку
no_sound:
inc counter ; счетчик постоянно меняется, даже если звук выключен, соотв ты можешь включить звук когда счетчик больше чем 62 и звук будет пищать 255-x+62 периода а не 63
....
вобщем все окейно но не совсем работает, для частоты 4к надо сделать так:
Код: Выделить всё
T1_OVF:
;прерывание с частотой 15625 Гц
cpi beep, 1
brne no_sound
сbi OutPort,(1<<OutPin) ; OutPort это PORTB например, не PIN(X)
sbrc counter,1 ; выводим единицу в порт только если 1 бит у counter выставлен, это бывает в 4 раза медленней чем прерывание
sbi OutPort,(1<<OutPin) ; раз уж хочется использовать именно регистр PORT
inc counter ; прибавляем счетчик только если звук есть, соотв для запуска звука надо загрузить его длительностью звука
cpi counter ,62 ; ~ 0,004с проверено
brne no_sound ;
clr counter ; 0
no_sound:
Добавлено: Ср фев 10, 2010 11:09:52
MTF
ibiza11
у Вас же спаяное устройство! вынести вердикт сами не можете?
в том то и дело что попробовал и не работает поэтому и попросил посмотреть код в чем может быть дело , так как еще не очень владею
ASM?????
Neekeetos
Спасибо за помощь ,попробовал ваш доработанный код , вот что то не пойму , для того чтобы пикало 1 раз , надо ли использовать задержку после beep = 1
Код: Выделить всё
; после нажатой клавиши
ldi beep , 1
rcall delay ; задержка к примеру около 1сек
clr beep
или я что то не допонял ?????
Добавлено: Ср фев 10, 2010 11:24:53
Neekeetos
MTF писал(а):вот что то не пойму , для того чтобы пикало 1 раз , надо ли использовать задержку после beep = 1
Код: Выделить всё
; после нажатой клавиши
ldi beep , 1
rcall delay ; задержка к примеру около 1сек
clr beep
или я что то не допонял ?????
Задержку не надо никакую, по задумке оно само в фоне пикнет и все. Но вообще прикольно, походу дела надо код еще изменить, тк он при таком раскладе непрерывно должен пикать пока не выключишь, бип то никто не обнулял, так попробуй:
Код: Выделить всё
T1_OVF:
;прерывание с частотой 15625 Гц
cpi beep, 1
brne no_sound
сbi OutPort,(1<<OutPin) ; OutPort это PORTB например, не PIN(X)
sbrc counter,1 ; выводим единицу в порт только если 1 бит у counter выставлен, это бывает в 4 раза медленней чем прерывание
sbi OutPort,(1<<OutPin) ; раз уж хочется использовать именно регистр PORT
inc counter ; прибавляем счетчик только если звук есть, соотв для запуска звука надо загрузить его длительностью звука
cpi counter ,62 ; ~ 0,004с проверено
brne no_sound ;
clr counter ; 0
clr beep; отключаем звук тут
no_sound:
Добавлено: Чт фев 11, 2010 01:08:54
MTF
Neekeetos Все OK писчит , но вот только писчит не очень громко , вообщем огромное спасибо
вопрос не по теме : я не один раз в форуме задавал вопрос ,может вы ответите , в своем устройстве применил TSOP1736 , принимал код как в datasheet avr410 rc5 , хотел сделать чтобы контроллер просыпался от внешнего прерывания TSOP посадил на INT0 , т е от нажатия на пульте , не упростится ли алгоритм приема кода RC5 через внешнее прерывание INT по сравнению с приемом через обычный вход как в avr410 ?????
Добавлено: Чт фев 11, 2010 03:03:26
ibiza11
MTF писал(а):не упростится ли алгоритм приема кода RC5 через внешнее прерывание INT по сравнению с приемом через обычный вход как в avr410 ?????
да вы знаток задавать вопросы) давайте каждый попробует написать алгоритм и проверит, вдруг он упростится!
по делу: Лучше самому один раз разобраться, чем миллион раз задавать один и тот же вопрос на форуме.
Добавлено: Чт фев 11, 2010 07:10:19
Neekeetos
MTF писал(а):Neekeetos Все OK писчит , но вот только писчит не очень громко , вообщем огромное спасибо
ага, можешь сделать как в любом китайском тетрисе:

катушка любая, от 100мкгн, тогда будет орать.
MTF писал(а):
вопрос не по теме : я не один раз в форуме задавал вопрос ,может вы ответите , в своем устройстве применил TSOP1736 , принимал код как в datasheet avr410 rc5 , хотел сделать чтобы контроллер просыпался от внешнего прерывания TSOP посадил на INT0 , т е от нажатия на пульте , не упростится ли алгоритм приема кода RC5 через внешнее прерывание INT по сравнению с приемом через обычный вход как в avr410 ?????
Не знаю я этого не пробовал делать, попробуй по форуму поищи , кажется ктото делал именно в прерывании, чисто теоретически может и проще будет.