|
Звук через PWM
| |
AVRик | Дата: Суббота, 09.03.2013, 23:12 | Сообщение # 1 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей !!! Вот такой вопрос мучает. Как сформировать звук в микроконтроллере. Принцип приведенный ниже, подбор коэффициентов деления из таблицы, воспроизведение одной ноты. В таблице их семь штук, в порт выходит потенциал, но звука нет. Я понимаю нужно что бы менялось периодически напряжение в OC0A, как это дописать еще не придумал. ldi r18,7 -это седмая нота в таблице коэффициентов деления. Нужна помощь.
m: ; Формирование звука ldi r18,7 lsl r18 ; Умножение номера на2 mov YL,r18 ; Создаем первое слагаемое ldi YH,0 ; Старший байт равен нулю ldi ZL,low(tabkd*2) ; второе слагаемое начало таблицы ldi ZH,high(tabkd*2) ; add ZL,YL ; Складыаем два 16-разр слагаемых adc ZH,YH ; lpm YL,Z+ ; читаем младший байт коэфф. деления lpm YH,Z ; Читаем младший байт коэфф. деления out OCR0A,YL ; Вывод звука в порт rcall sbros sbic PINB,5 ;Если РВ5=0 (кнопка нажата), пропустить след. строку rjmp m ;Возврат к началу цикла rcall delay ;Вызов подпрограммы задержки на дребезг контактов rjmp main ;================== Таблица коэффициентов деления ================== tabkd: .dw 4748,4228,3768,3556,3168,2822,2514
Сообщение отредактировал AVRик - Суббота, 09.03.2013, 23:23 |
|
| |
mimino | Дата: Понедельник, 11.03.2013, 02:14 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир! Вы, видимо, неправильно поняли смысл того, что нужно делать. Те частоты, которые вы задаете - это частоты, с которой должен срабатывать таймер. А в подпрограмме обработки прерывания таймера нужно просто переключать тот порт, к которому подключена пищалка в противоположное состояние. Таким образом будет меняться частота переключения вывода, а, значит, и высота тона. При этом нужно таймер настроить на режим, при котором он будет сбрасываться при достижении значения OCR0A, а не своего физического 16-битного максимума.
|
|
| |
AVRик | Дата: Понедельник, 11.03.2013, 22:11 | Сообщение # 3 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей, а если таймер на АЦП и ШИМ один работает одновременно, так как таймеров не имеется Tiny 13 ?Добавлено (11.03.2013, 22:11) --------------------------------------------- А как это программно выполнить: переключение порта OCR0A, и как настроить таймер на сброс ? Когда работает непрерывно АЦП и ШИМ.
Сообщение отредактировал AVRик - Понедельник, 11.03.2013, 21:33 |
|
| |
mimino | Дата: Понедельник, 11.03.2013, 22:22 | Сообщение # 4 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, я не понял о чем Вы.... Как это таймер на АЦП и ШИМ?
|
|
| |
AVRик | Дата: Понедельник, 11.03.2013, 22:53 | Сообщение # 5 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| АЦП постоянно измеряет, при наступлении события при измерении, контроллер должен издать звук, но Tiny 13A имеет один таймер и то 8 разрядов ?Добавлено (11.03.2013, 22:53) --------------------------------------------- Сергей, как в данном случае написать программу ?
|
|
| |
mimino | Дата: Понедельник, 11.03.2013, 23:02 | Сообщение # 6 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Так разве АЦП использует таймер? Задайте ему непрерывный режим измерения, и тогда он будет работать сам по себе, а таймер сам по себе
|
|
| |
AVRик | Дата: Вторник, 12.03.2013, 14:10 | Сообщение # 7 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Благодарю, Сергей за подсказку, а я думал, что все сложнее будет.
|
|
| |
mimino | Дата: Среда, 13.03.2013, 17:20 | Сообщение # 8 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Да нет, все проще, чем кажется)
|
|
| |
AVRик | Дата: Понедельник, 08.04.2013, 21:26 | Сообщение # 9 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Добрый вечер Сергей !!! Программный модуль звука, я написал и на макете испытал. Месяц думал, но вчера меня осенило, все получилось.
|
|
| |
mimino | Дата: Понедельник, 08.04.2013, 22:43 | Сообщение # 10 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир! Поздравляю Вас! А у меня со временем не только не появляется больше свободного времени, а только становится все меньше. Просто скоро собираюсь в командировку, все силы уходят на подготовку
|
|
| |
AVRик | Дата: Вторник, 09.04.2013, 23:00 | Сообщение # 11 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей! Вопросик про прерывания: если в программе есть прерывания и присутствует подпрограмма, то вероятность ее исполнения подпрограммы где-то не более 1 сек. Это правильный ход программы ? Больше она не работает.Добавлено (09.04.2013, 23:00) --------------------------------------------- Еще вопросик: из подпрограммы может вызываться подпрограмма ?
|
|
| |
mimino | Дата: Среда, 10.04.2013, 11:04 | Сообщение # 12 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| Владимир, не совсем понял вопрос, как это вероятность исполнения не больше 1 сек. Насчет второго вопроса, да, может. Но не слишком увлекайтесь, не более нескольких вложенных подпрограмм.
|
|
| |
AVRик | Дата: Четверг, 11.04.2013, 13:56 | Сообщение # 13 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Сергей ! Вопрос такого плана: в программе используется прерывание АЦП. При измерении тока более 17 мА программа должна выдать сигнал, который вызыается подпрограммно, но работает эта подпрограмма всего 1 секунду. Немогу понять почему ?
|
|
| |
mimino | Дата: Четверг, 11.04.2013, 20:22 | Сообщение # 14 |
Полковник
Группа: Администраторы
Сообщений: 227
Статус: Offline
| То есть звук генерируется всего одну секунду, а затем прекращается?
|
|
| |
AVRик | Дата: Четверг, 11.04.2013, 22:37 | Сообщение # 15 |
Лейтенант
Группа: Проверенные
Сообщений: 73
Статус: Offline
| Совершенно верно, пока причину ненашел. Добавлено (11.04.2013, 22:37) --------------------------------------------- Сергей !!! Нашел !!! После серий экспериментов проб и ошибок. Убрал лишнее в звуковом модуле, пошла родимая !!!
|
|
| |
| |