Здравия желаю всем коллегам!
Скоро возвращаюсь в свой родимый QTH (Витебск) после длительной командировки .
Есть идея реанимировать свой старый проект онлайн-приёмника receiver.by. Однако затея у меня более грандиозная: использовать максимальную скорость переключения частоты для слушателя(практическ и мгновенную). Кто ранее пользовался приёмником помнит, что время перестройки составляло до 15 сек (непосредственно время переключения частоты около 5 сек + время задержки вещающей программы IceCast).
С вещающей стороной данного вопроса я уже разобрался - это будет ffmpeg для linux.
Сам интерфейс ввода частоты придётся немного доработать и управлять уже не "кнопками" дегена, а непосредственно PLL-кой (LC72137) со своего МК.
Так вот читаю даташит на сей синтезатор... может я что-то не так понимаю - не пинайте сильно, а лучше поправьте пожалуйста...
Насколько я правильно понял у данной мс такой алгоритм работы:
Три режима работы:
1. IN1 Mode (управляющее слово 0x82 или 0b00010100) и далее 24 бита данных - даёт команду коэффициента деления, шага частоты, диапазон перестройки
2. IN2 Mode (управляющее слово 0x92 или 0b10010100) и далее 24 бита данных - даёт команду для служебных функций
3. Out Mode (управляющее слово 0xA2 или 0b01010100) и далее 24 бита данных выводится по порту DO из МС.
Выводить данные из PLL-синтезатора мне нет нужды. Поэтому достаточно ли управлять так:
1. Сначала подаём 0x82 + данные
2. Потом подаём 0x92 + данные ?
Если у кого есть какие-нить заготовки исходного кода буду тоже премного благодарен.
Добавлено через 32 минут(ы):
Управлять PLL синтезатором планирую с помощью PIC18F2550. Вот каким образом:
Код:
// Все три порта на выход
// RC0 => CE, RC1 => DI, RC2 => CLK
#define m_CE LATCbits.LATC0
#define m_DI LATCbits.LATC1
#define m_CLK LATCbits.LATC2
/////////////////////
UsartFunc(0x82); // init IN1
m_CE = 1; // включаем CE
UsartFunc(0b11111111); // данные 1-ый байт
UsartFunc(0b11111111); // данные 2-ой байт
UsartFunc(0b11111111); // данные 3-ий байт
m_CE = 0; // выключаем CE
UsartFunc(0x92); // init IN2
m_CE = 1; // включаем CE
UsartFunc(0b11111111); // данные 1-ый байт
UsartFunc(0b11111111); // данные 2-ой байт
UsartFunc(0b11111111); // данные 3-ий байт
m_CE = 0; // выключаем CE
/////////////////////
void UsartFunc(unsigned char dataByte) // dataByte - байт переданных данных
{
static byte i;
for(i = 0; i < 8; i++){
m_DI = UBit(dataByte, i); // перевести RC1 в состояние i-того бита байта переданных данных
m_CLK = 1; // сигнал CLK в "1" _-
m_CLK = 0; // сигнал CLK в "0" -_
}
}// end UsartFunc
BOOL UBit(unsigned char byteB, unsigned char bit0)
{
if(((byteB >> bit0) & 1) > 0)
{
return 1;
}else{
return 0;
}
}