Автор: WildCat
Генерирование звука в Bascom
Самый простой способ извлечь звук из нашего подопытного - подключить к нему одной лапкой динамик (через резистор!), а второй - подключить динамик к земле. После этого воспользуемся командой "Голос!" (Sound):
Sound Portpin, Soundtime, High/Low-timeгде Soundtime - число импульсов, а High/Low-time - длительность этих импульсов. На самом деле, в справке Bascom об этом сказано не очень понятно и подробно.
Пример:
Sound, Portb.0, 100, 500издаст звук частотой примерно 600 Гц и длительностью примерно 120 мс:
Как видите, вам придется поэкспериментировать с параметрами этой команды. Но если вам нужны точные частоты, используйте функции таймера.
Очевидным применением такой программы является генератор кодов Морзе:
Вот её код: sendmorse.bas
(программа достаточно длинная, чтобы приводить здесь её листинг)
Скорость передачи, высота тона и длительность символов зависит от константы Speed. В данном случае не было необходимости точно рассчитывать все значения. Вроде звучит нормально, и ладно.
Таблица "знакогенератора" находится в блоке данных Morse_alfaber. Собственно, программа при работе делает Lookupstr, чтобы получить код Морзе для очередного символа из передаваемой строки. Она перебирает все символы по очереди и при этом издает "точки" и "тире". Символ "<" означает, что между окружающими его символами не нужно делать паузу при передаче. Это применяется в передаче спецсимволов "KA" и "SK", означающими "Начало передачи" и "Конец передачи" соответственно. Эти спецсимволы передаются слитно, без паузы между буквами.
Синтез тонов DTMF
Двухтональный многочастотный сигнал - Dual Tone Multi-Frequency (DTMF) - используется в телефонии для передачи набираемых на клавиатуре телефона символов, а в радиолюбительских приложениях - для управления, например, репитерами. Это такая система передачи данных, когда складываются два синусоидальных сигнала с разной частотой и результат пересылается приемнику. Такая система кодирования применяется в аналоговых линиях связи, т.к. обладает высокой помехоустойчивостью.
Bascom умеет самостоятельно генерировать DTMF тона:
Dtmfout, Dtmfcode, DtmftimeЗдесь Dtmfcode - десятичное число от 0 до 15, а Dtmftime - длительность передаваемого сигнала в миллисекундах. Как вариант, можно использовать такой код:
Dtmfout, String, DtmftimeОн перебирает все символы из переменной String и генерирует последовательность тонов.
Приведем пример, отсылающий все 16 DTMF-кодов:
dtmf.bas
$regfile = "2313def.dat" $crystal = 4000000 Dim Counter As Byte Enable Interrupts Do For Counter = 0 To 15 Dtmfout Counter , 500 Waitms 250 Next Counter Wait 1 Loop EndКоманда Dtmfout использует Timer1 и генерирует прерывания, поэтому вы не можете использовать Timer1 в других прерываниях.
Соответственно, сигнал снимается с вывода OC1, для AT90S2313 это PortB.3 (15 нога).
Как видите, двухтоновой синтез очень прост, и вы можете легко разработать систему радиоуправления на 16 каналов. Также несложно сделать DTMF-декодер на Bascom, для этого нужен микроконтроллер с АЦП и немножко мозгов. А подключив стандартную клавиатуру 4x4 (как об этом рассказывалось раньше) и динамик, вы получите отличный Bluebox.