Как задать частоту ТВ-Тюнеру

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Доброго времени суток !

Кратко о сути.
Строю телевизионный тюнер-приставку. Этакое устройство имеющее в недрах ТВ тюнер (Selteka KS-H-146EA), блок радиоканала и микроконтроллер (Atmega8) с LCD и кнопками.
Устройство собственно - тот же телевизор, только без модуля цветности и кинескопа (экрана)
писать программу начал с нуля, по сему неизбежно встал на грабли.
Вопрос собственно вот в чем. Не могу понять, какие биты послать по i2c тюнеру, чтоб установить необходимую мне частоту.
в даташите к TDA6508 (она стоит в тюнере) написано, что частота задается двумя байтами DB1 и DB2 по такой вот хитрой формуле - N = N14x2^14 + N13x2^13 + ... + N1x2^1 + N0
понятно что это разложение десятичного числа в двоичную (бинарную) форму.
Не пойму как мне устанавливать частоту, ведь для этих 15 бит указанных выше, я смогу послать максимальное число - 111111111111111, что равно в десятичной форме 32767.
Т.е. это явно не может быть явным указанием частоты и нужно мою требуемую частоту, подставлять в какую то хитрую формулу, чтобы биты на выходе уложились в требуемое тюнером.
В общем сижу уже третьи сутки и ломаю голову.

P.S. Гляжу на похожий проект Р-45. Где из ТВ тюнера сделали сканирующий радиоприемник. В исходниках проекта нашел функцию которая задает частоту. Вставил в свой проект, поправил частоту ПЧ, закинул все в Протеус. Глянул i2c дебаггером что приходит в тюнер.
Когда я хочу настроить частоту 146.500 мГц. в тюнер приходит последовательность 0xOE 0x7C (что соответствует числам 14 и 124). В общем, что-то мозг заклинило и не могу сообразить.

вот даташит на TDA6508 - http://www.classiccmp.org/rtellason/chi ... da6508.pdf

Прошу помощи и разъяснения. Спасите мозг от взрыва! )
Вложения
project.rar
Исходники и файл для Протеуса 7.8
(98.14 КБ) 296 скачиваний
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Появилась мысль сделать коробочку - i2c монитор.
Цепануть на ноги тюнера в работающем телеке (есть телек с таким же тюнером) и посмотреть какие коды приходят на каком телеканале (ессно частоту канала знаем).

Кто нить встречал такие девайсы?
только хочется уж автономное устройство, а не приставку к ПК. И бросать тюнер и хвататься за проектирование i2c монитора тоже не охота. А вот повторить какую нить конструкцию - не проблема и не займет много времени.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

блин, повторился пост.

Кароче, пошерстил инет, попадаются только приставки к ПК
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

В пдфке написано что есть еще биты RSA-RSB, которые задают шаг делителя (таблица 4), видимо количество этих шагов и задается битами N14-N0.
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Ситуацию не сильно проясняет, я правда выбрал шаг настройки 50кГц.

В исходном коде для приемника Р-45, частота посылается вот так - ((FrcvWork + 38900)/50);
FrcvWork - заданная частота.
38900 - промежуточная частота 38,9МГц (в примере было ПЧ 37300 - 37,3МГЦ)
50 - я так понимаю делитель

По этой формуле и получается (146500+38900)/50 = 3708, что в HEX форме - 0x0E7C, это собственно и приходит на тюнер.

Надо вспомнить технаревский курс телевидения и уточнить, что там с ПЧ происходит, складывается она или вычитается. Кажется все встает на свои места )
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Забавно, на форуме 483 человека онлайн, а я веду беседу сам с собой )))
Контактная информация:
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

Airatius писал(а):Забавно, на форуме 483 человека онлайн, а я веду беседу сам с собой )))
эх.. я бы поддержал тему, но не могу нигде купить такой тьюнер(с управлением от МК). :))
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

igor-x писал(а):
Airatius писал(а):Забавно, на форуме 483 человека онлайн, а я веду беседу сам с собой )))
эх.. я бы поддержал тему, но не могу нигде купить такой тьюнер(с управлением от МК). :))
Старые телеки и видики - отличный источник полезных запчастей )))
Но вот этот тюнер KS-H-146 и ему подобные, стоят около 200-250 рублей всего
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

Airatius писал(а):
igor-x писал(а): эх.. я бы поддержал тему, но не могу нигде купить такой тьюнер(с управлением от МК). :))
Старые телеки и видики - отличный источник полезных запчастей )))
Но вот этот тюнер KS-H-146 и ему подобные, стоят около 200-250 рублей всего
.. старого телека нет.. видака тоже. в каком магазе этот тюнер почтой отправят?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

igor-x писал(а):.. старого телека нет.. видака тоже. в каком магазе этот тюнер почтой отправят?
По поводу магазинов не знаю, у нас на радиорынке их навалом.
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Написание программы идет неплохо, научился изменять и задавать частоту, сохранять ее и загружать из внешней eeprom. выводить на дисплей и т.п.
тока я чета опять наткнулся на грабли )
нужен спец по дискретной математике.
заданная частота разделяется на два бита, старший и младший путем сдвига регистра.
пример, для заданного числа 3708 старший и младший биты будут:
старший со сдвигом числа на 8 старших бит (0000111001111100) = 00001110 = "14"
младший - собственно остаток, без старших 8 бит = (0000111001111100)=01111100 = "124"
в коде это выглядит так
#define HiBYTE(w) (uint8_t)((w >> 8) & 0x00ff)
#define LoBYTE(w) (uint8_t)((w >> 0) & 0x00ff)

теперь вопрос, как мне обратно сдвинуть регистры чтобы получить в итоге исходное число
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Странный вопрос, вроде операция выделения старшего и младшего байтов сложнее, но ее вы осилили...

Старший сдвинуть на 8 влево и сложить с младшим.

Кстати, смысла в выражении "w >> 0" кроме читабельности кода нет (по аналогии с предыдущей строкой), может его выкинуть? Хотя умный компилятор по идее ее сам выкинет...
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Engineer_Keen писал(а):Странный вопрос, вроде операция выделения старшего и младшего байтов сложнее, но ее вы осилили...

Старший сдвинуть на 8 влево и сложить с младшим.

Кстати, смысла в выражении "w >> 0" кроме читабельности кода нет (по аналогии с предыдущей строкой), может его выкинуть? Хотя умный компилятор по идее ее сам выкинет...
операцию деления двубайтного числа побайтно я честно спер с исходников другого проекта )
но смысл ее и принцип действия понял, однако обратная операция должна по идее быть такой w<<8. но Нихт Арбайтен, как ни странно.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Airatius писал(а):обратная операция должна по идее быть такой w<<8. но Нихт Арбайтен, как ни странно.
Ну да, w<<8, а почему не работает? В смысле результат какой получается? Может с типами что напутали (сдвигать нужно 16-битную переменную, иначе смысла нет).
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

Engineer_Keen писал(а):
Airatius писал(а):обратная операция должна по идее быть такой w<<8. но Нихт Арбайтен, как ни странно.
Ну да, w<<8, а почему не работает? В смысле результат какой получается? Может с типами что напутали (сдвигать нужно 16-битную переменную, иначе смысла нет).
вот скорее всего тип переменной я указал неверный, надо попробовать как в первоначале - uint32_t
домой приду сразу попробую, на работу забыл исходники прихватить
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

все, разобрался, действительно проблема была в типе переменной.
Я как то упустил этот нюанс.

Ну а дальше все просто - byte=Hibyte | LoByte;

и побитный сдвиг влево можно осуществить с помощью w<<8 или так w * 2^8

Спасибо Engineer_Keen
Контактная информация:
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Сообщение осторожно! леоныч!!! »

Всем привет. У меня та же беда. Пытаюсь освоить тв тюнер ks-h-148 на микрухе TDA6508. Пишу на баскоме. Нифига не могу вьехать. Хотя вроде и надо не много, управление данной микросхемой то есть тв тюнером,вывод частоты на дисплей. Управление всего 2 кнопки.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 177
Зарегистрирован: Чт окт 20, 2011 13:35:06
Откуда: Казань

Сообщение Airatius »

осторожно! леоныч!!! писал(а):Всем привет. У меня та же беда. Пытаюсь освоить тв тюнер ks-h-148 на микрухе TDA6508. Пишу на баскоме. Нифига не могу вьехать. Хотя вроде и надо не много, управление данной микросхемой то есть тв тюнером,вывод частоты на дисплей. Управление всего 2 кнопки.
По поводу Баскома не подскажу, а вот по поводу управления тюнером - оказалось все просто. Формулу, которую я привел вставляете в свой проект, естественно с переводом синтаксиса на язык баскома.
Частота тюнеру задается двумя байтами отсылаемыми по i2c. Эти два байта, как я уже говорил ранее, получаются из формулы, единственное, двубайтное получившееся число "располовиниваете" побайтно с помощью сдвига регистров.
Вот собственно и все )

И да, рекомендую скачать исходники проекта "Сканирующий радиоприемник Р-45" - там в принципе все процедуры работы с TDA-6508 есть.

Я так понимаю, раз у Вас всего две кнопки - это перебор частоты F+ и F-
Частоты сохранять не нужно, это сильно упрощает задачу.
Контактная информация:
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Сообщение осторожно! леоныч!!! »

Да смысл сохранять? Разве что последнюю установленную. Я про р-45 смотрел. Но "с" для меня темный лес. Уже второй день бьюсь. Результата ни какого. Формула несомненно пригодиться как и ваш совет. Но пока не знаю за что хвататься............
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

Сообщение осторожно! леоныч!!! »

Вот нарыл программку. Не знаю как перевести. Ничего не понятно.....

/////////////////////////
// for KS-H-146, KS-H-148

#define CONST__GAINoff 0B10001000
#define CONST__GAINon 0B10001001 // Weak Signal Booster ON
#define CONST__LoBAND 0B00000001
#define CONST__MiBAND 0B00000010
#define CONST__HiBAND 0B00001100

////////////////////
void KSH14xPLL(void)
{
uint32_t fPCH1;
uint8_t Band;


Band = CONST__LoBAND;

if(FrcvWork > 155000L) Band = CONST__MiBAND;
if(FrcvWork > 440000L) Band = CONST__HiBAND;


fPCH1 = (uint16_t)((FrcvWork + RCVPCH1)/50);

I2CStart();

I2COutByte(0b11000000); // Tuner Address
I2COutByte(HiBYTE(fPCH1));
I2COutByte(LoBYTE(fPCH1));
I2COutByte((TunerGain)? CONST__GAINon:CONST__GAINoff);
I2COutByte(Band);


I2CStop();
return;
Ответить

Вернуться в «Теория»