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

techalex

Всем добрый день.
Не нашел похожей темы, поэтому создал новую. Интересует возможность передачи телеметрии в канале звука вот такого виделинка:
hobbyking.com/…/__15295__5_8g_200mw_FPV_Wireless_A…
Сделать хочу на какой нибудь тинке или меге и на передающей стороне и на принимающей, отсюда вопрос как согласовать ттл выход с аудио входом.
Audio input level: 0.5~2.0Vp-p
Audio input impedance: 10K/Ohm

И еще вопрос как огранизовать собственно протокол передачи(это же почти модем по сути), может есть готовые библиотеки для этих микроконтроллеров?

Musgravehill
techalex:

возможность передачи телеметрии в канале звука

rcopen.com/forum/f123/topic287932/27 и далее.
Медленный аудиоканал можно как резерв использовать - ставите мощное видео, заводите GPS координаты на звук и на OSD. Если улетело и упало - есть шанс узнать координаты.

techalex

Спасибо, почитаю.
Мне просто не нужна полноценная телеметрия и осд, только напряжение да координаты. поэтому не хочется ничего более докупать. думал на коленке по быстрому на авр сваять.

Musgravehill

Алексей, такую связку пробовали? code.google.com/p/opendiyantracker/…/Connections или даже упрощенную:
не знаю, если вместо Ардуино взять сигнал с GPS 9600 бод и сразу через делитель загнать в Аудио канал? Принятый аудио сигнал с модуляцией - по этой же схеме - очистить от постоянной составляющей и использовать как цифровой сигнал “с GPS” - подать в AVR и на экранчик от Нокиа? Деталек и осциллографа под руками нет - проверить сейчас не смогу. Но телеметрия FRsky непринужденно парсится ATmega8 и выводится на экран 3310. Аудиоканал еще не пробовал.

techalex

Ага, вот в принципе примерно то что нужно ))
Единственное что напрягает это 9600, лень считать какая это частота, но вполне вероятно что сигнал уже не пролезет через аналоговую часть самого передатчика, особенно если она настроена в основном на речевой диапазон ~2500гц. Но попробовать стоит, спасибо за ссылку )

avisenja

На передачу лучше делайте так, проверено на практике

Musgravehill
techalex:

Единственное что напрягает это 9600

www.ecolan.ru/imp_info/introduction/magest/ хорошо написано
www.dsplib.ru/content/fsk/fsk.html

Перевод одного бита в пачку прямоугольных импульсов на выходе. Для МК надо переделывать.

#define R2      (.70710678118654752440f)

void
send(int bit)
{
    int c ;
    switch (bit) {
    case 0:                               //'0' is 4 cycles @ 1200 Hz  - растягиваем период, снижая частоту за счет промежуточного output(R2) ;
        for (c=0; c<4; c++) {
            output(0.f) ;
            output(R2) ;
            output(1.f) ;
            output(R2) ;
            output(0.f) ;
            output(-R2) ;
            output(-1.f) ;
            output(-R2) ;
        }
        break ;
    case 1:
        for (c=0; c<8; c++) {   //'1' is 8 cycles @ 2400 Hz.  Частота в 2 раза выше, потому что не выводим промежуточную output(R2) ;
            output(0.f) ;
            output(1.f) ;
            output(0.f) ;
            output(-1.f) ;
        }
        break ;
    default:
        abort() ;
    }
}
avisenja:

На передачу лучше делайте так, проверено на практике

Так пищалки подключают к МК - жертвуют 2 ножки, зато переход состояний 0-1 => 1-0 дает более громкий звук. Ошибаюсь, там общей точки нет.

А так работает?

avisenja

Завалы будут перед пачкой и после, поэтому используйте два выхода порта, но не синхронно, а по переменке через 3е-состояние, амплитуду какую надо подберите 2к-илоомами на выходе.
Вход то-же по другому, нарисую позже, сейчас времени нет (сдохла моя WEBASTO, а морозы на носу, вот сижу и ремонтирую датчик пламени)

Пищалки цепляют между выходами, тогда да, промоделируйте в протеусе и всё увидите сами.

П.С. А вообще, в канал звука лучше не лезте, наслаждайтесь видео со звуком, а телеметрию гоните через дишманские китайские воки-токи (20 тугриков при 1ВТ на 430мгц), при выходе из зоны видео, этот вариант сохранит вам телеметрию на долгие километры, срыв видео можно подменить 3D моделью по принятым параметрам, я на компах не пишу проги, а вот Сергей MSV - сделал-бы эту задачку легко, ему по силам.

techalex

Супер сколько вариантов образовалось )) Все попробую ))
Никакие воки-токи и другие варианты я не хотел изначально, потому что на квадрик все это хочу, а не на бпла какой нибудь, а места в квадрике не очень много,
хотелось именно заюзать передатчик который уже и так стоит, а иначе иксби вкорячил бы, их есть уже до 60км задорого и до 6 задешего.
а видео со звуком и так будет ибо стерео, да и что там слушать то, жужжание моторов все заглушает )))

avisenja

Вы-же не писали, что увлекаетесь геометрией и стереомертией:)(шутка), отсюда - такие варианты.😃

Musgravehill
avisenja:

Завалы будут перед пачкой и после, поэтому используйте два выхода порта, но не синхронно, а по переменке через 3е-состояние, амплитуду какую надо подберите 2к-илоомами на выходе.

А какое третье состояние? Один порт в “1”, другой “0”? Не пойму, в чем преимущество двух-портового вывода с общей точкой. Амплитуда не возрастает. С пищалкой ясно - в первый период 0-1, во второй 1-0, диффузор отклоняется в обе стороны по-максимуму. А тут?

techalex

Я тоже не вижу смысла пытаться увеличить амплитуду, все равно на передатчике вот такой вход Audio input level: 0.5~2.0Vp-p ее еще и уменьшать придется

Enigm
Musgravehill:

А какое третье состояние? Один порт в “1”, другой “0”? Не пойму, в чем преимущество двух-портового вывода с общей точкой. Амплитуда не возрастает. С пищалкой ясно - в первый период 0-1, во второй 1-0, диффузор отклоняется в обе стороны по-максимуму. А тут?

Если я правильно помню, то ЗЕТ состояние, это когда типа вывод отключен от схемы,(то есть на нем столько вольт сколько приходит со схемы и ему не препятствует)
Если в контролере нет прямого доступа к состоянию зет, то оно достигается переключением вывода, в состояние вход.

Musgravehill

www.dip.ee.uct.ac.za/~nicolls/…/13_fsk_2up.pdf

When only a short time duration dT is available, the uncertainty theorem puts a constraint on the accuracy of recognizing the difference between the two frequencies df.
dF x dT >= 2 x PI();

For example, the telephone channel is less than 4 KHz wide, and so a rather large separation would be df x 2 KHz. This implies that telephone line FSK information transfer rates will not exceed around 300 b/s.
-------------------------------
Bandwidth BW = 2dF + 2B, where dF is the difference in frequency between the mark and space frequency, and B is the data rate.
-------------------------------
В общем, звуковой канал - это интересно чисто теоретически, руками подергать ножки МК и почувствовать, что к чему.

Boev_Dmitry
Musgravehill:

А какое третье состояние? Один порт в “1”, другой “0”? Не пойму, в чем преимущество двух-портового вывода с общей точкой. Амплитуда не возрастает. С пищалкой ясно - в первый период 0-1, во второй 1-0, диффузор отклоняется в обе стороны по-максимуму. А тут?

на обоих выходах нули - на выходе ноль. на обоих единица - на выходе максимум. на одном 1 на другом ноль - половина от максимума.

1 month later
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 мГц- тупо подмешан в эмиттер второго транзистора.
При достаточно сильном вякании- он смещает рабочую точку, что и вызывает полосы.