Телеметрия в канал звука

ivanbalandin

делал я подобное устройство, летало, скорость передачи 1200, FSK соотношение частот 3/2 на AVR
канал звука больше подвержен помехам, поэтому отказался от использования. кстати увеличивать уровень звукового сигнала не надо, наоборот требуется делитель.
модулятор собран на ATmega8. для генерации несущей используется таймер
то есть при выводе 0 или 1 в таймер просто записывается соответствующее значение. вывод через порт D, в tx_buffer выводимая последовательность байт.
код модулятора:
// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{ //OCR2=0x33+0x1A; PORTD=PORTD^0b00100000;
// Place your code here
if (count_tact) count_tact–; // если счетчик тактов не ноль, уменьшаем
else
{
if ((!bit_count)&&tx_data_size) // нет бит на вывод - инициализация
{
tx_word.data_byte[0]=tx_buffer[tx_count++];
if (tx_count==tx_data_size) {
tx_count=0;
tx_data_size=0;
}
tx_word.data_byte[1]=0xFF; // стоповый бит
tx_word.data_word=tx_word.data_word*2; // сдвиг влево
tx_word.data_byte[0]=tx_word.data_byte[0]&0xFE; // стартовый бит
bit_count=11; //1 стартовый, 8-данные, 2- стоповых
}
if (bit_count) // есть биты на вывод
{
OCR2=0x33+(0x1A*(!(tx_word.data_byte[0]&0x01))); // установка таймера
count_tact=1+(tx_word.data_byte[0]&0x01); // установка счетчика тактов
/**/ PORTD=PORTD&0b11011111;
PORTD=PORTD|(0b00100000*(tx_word.data_byte[0]&0x01));
tx_word.data_word=tx_word.data_word/2; // сдвиг вправо
bit_count–;
}
}
}

демодулятор на ATtiny13 просто переводит частоту в последовательность 0 и 1, которую я подавал на COM порт компьютера (ТТЛ)
используется прерывание по компаратору и таймер для расчета периода несущей.
код:
#include <tiny13.h>
unsigned char count_capt; // захват значения счетчика
unsigned char count_tact; // счетчик тактов частоты
unsigned char bit_flag; // флаг частоты бита
unsigned char bit_capt; // захваченный бит по частоте
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
count_capt=TCNT0; // захват счетчика
TCNT0=0x00; // сброс счетчика
if ((count_capt>0x48)&&(count_capt<0x16)) count_tact=0; // ошибка приема сброс
else
{
bit_capt=(count_capt<0x33); // оценка принимаемого бита по длительности
if (bit_capt==bit_flag) // если сохраненный и захваченный такт совпадают
{
count_tact++;
if (count_tact==(1+bit_flag)) // счетчик достиг предела для значения бита
{
PORTB.2=bit_flag; // вывод бита
count_tact=0; // сброс счетчика
}
}
else
{
count_tact=0; // сброс счетчика тактов
bit_flag=bit_capt; // сохранение значения такта
}
}
}
Кстати, в приемнике перед контроллером, необходимо установить ФНЧ. я ставил активный, на операционнике. это позволит немного улучшить помехоустойчивость, а следовательно и дальность

blade
msv:

Можно пробовать старое, доброе

Гораздо проще- не менее старый и не менее добрый- DTMF код.
Только я уже писал в “Телеметрии…”- канал звука в ТВ передатчиках- помирает гораздо раньше, чем видео (примерно- в два раза по расстоянию)
Да и сам ДТМФ- довольно тихоходный: одна цифра должна звучать не менее 40 мС .
Поэтому реально передавать только азимут и высоту, для работы следящей антенны.
Всё остальное- будет занимать слишком много времени 😦
Да и работа канала звука- ухудшает качество изображения: “полосить” начинает.
Это связано с примитивностью модуляторов в применяемых ТВ передатчиках.

msv
blade:

Гораздо проще…

Для меня реализовать программно DTMF-декодер уж точно не проще… Преимуществ в DTMF никаких не вижу.
Помирает канал звука в моем комплекте практически одновременно с видео и ничего не полосит (даже в копеечном комплекте, в приемнике есть режекторный фильтр на поднесущую звука).
И тем не менее согласен, что особого смысла пихать телеметрию в аудио-канал пожалуй нет… Особенно если все равно есть видео с кучей “пустого места”, куда можно без проблем (даже не убирая постоянную составляющую) запихать много цифровой информации…

blade
msv:

реализовать программно DTMF-декодер уж точно не проще…

Да ничего программно- и не надо: давным давно есть микросхемы и кодеров и декодеров, копейки стОят.

msv:

в приемнике есть режекторный фильтр на поднесущую звука

Ну, не знаю что у Вас за система- я их не одну сотню переставил в охранки- полосят, чуть погромче звук.
И Тайваньские и китайские- все сделаны по одной схеме.
Там дело не в приемнике , а в схеме модулятора передатчика : сигнал звука 5,5 мГц- тупо подмешан в эмиттер второго транзистора.
При достаточно сильном вякании- он смещает рабочую точку, что и вызывает полосы.