Появились вопросы по кнопкам.Нашел RIT дважды.Могли бы Вы написать инструкцию по назначению кнопок?
Добрый день! Там все просто. Каждая кнопка выполняет только одну функцию. Кнопки подключены к делителю, таким образом, нажатие кнопки выдает определенное напряжение, которое подается на вход аналого-цифрового преобразователя процессора. Через определенные промежутки времени (уже не помню, через сколько точно, примерно 4-5 миллисекунд) процессор проверяет, нажата ли какая-нибудь кнопка. Если ни одна кнопка не нажата, напряжение на входе ADC процессора равно напряжению питания, т.е. около 5 вольт. Тут одно надо понимать, ADC преобразовывает напряжение на входе в цифру. Напряжению 5 вольт соответствует 1024.
Проверка нажатия вот строки (файл Radio_76.c)
if (AdcBuf>950) // Кнопка не нажата - выходим
{
n=1;
}
}
т.е. если после преобразования переменная AdcBuf меньше 950 (950 взято для запаса, вдруг напряжение по какой-то причине просядет и будет не 1024, а меньше), то программа начнет отрабатывать алгоритм нажатия кнопки и, какая именно нажата. Если не нажата, программа возвращается в основной цикл.
Вот строки, где определяется какая кнопка нажата:
if (Adc_1 < 250) l=0; //AGC, т.е. если Adc меньше 250, то l=0 и т.д.
else if (Adc_1 < 500) l=1; //RIT
else if (Adc_1 < 800) l=2; //Att
else l=3;
Таким образом, в программе, фактически задействованы только три кнопки - AGC (кнопка переключения АРУ - ручная регулировка или авт.), RIT- кнопка включения расстройки. При этом частота приема будет указана на экране, частота передачи будет той, которая была до нажатия кнопки RIT. И последняя кнопка - кнопка включения аттенюатора.
Все эти кнопки без фиксации. При нажатии кнопки функция включается, при повторном - отключается.
Напряжения, при котором включается та или иная фуннкция (но переведенные в цифру) должны соответствовать напряжениям, которые выдает Ваш делитель. То есть, тут надо учитывать точность резисторов. Ну например, при нажатии какой либо кнопки у Вас напряжение на входе ADC равно 2,5 вольта, это 1024*2,5/5,0, т.е. 512. Условие пишем так:
if (Adc_1 < 530) l=0; //AGC
почему именно 530, а не 512. Это вроде запаса, о котором я выше упомянул. Количество кнопок можно добавить, наример в одном варианте их было 12 штук. Но там надо тщательнее измерять. Обычно напряжение выбираются из ряда U1=0,5 вольта, U2=0,5*1,5, U3=0,5*1,5^2 и т.д. Т.е геометрическая прогрессия, где 1,5 коэффициент, который надо выбрать таким образом, чтобы напряжение от первой кнопки было 0,5 вольта, от последней - 4,0 примерно. Т.е. в зависимости от количества, больше кнопок - меньше коэффициент. Можно и проще, каждая кнопка дает напряжение, например на 0,5 вольта больше предыдущей.
На схеме нарисованы 7 кнопок, в программе задействовано кажется 6 (это я имею ввиду собранный и работающий вариант трансивера. Программу мог перепутать. Пока не будем искать соответствие, оно не важно, уточним потом.
Нужно ли где-то в исходниках прописывать частоту опоры SI5351?
Да, конечно. Она прописана в файле Radio_76.c, вот строка:
#define xtal 26691697 // Частота кварца платы приемника
При вызове функции, которая управляет сишкой, этот параметр передается, вот так:
si5351aSetFrequency(frequency+pch_1, xtal);
где указана рабочая частота - frequency, к ней прибавляется частота ПЧ - pch_1 и передается частота кварца - xtal. Частоту кварца, в принципе, можно указать где угодно. Компилятор найдет.. Но все же, надо придерживаться какого -то порядка. Если, генерируемая частота будет отличаться от нужной, значит кварц генерит другую частоту и цифру в программе надо скорректировать. После прогрева, измеряете. Например если частота, которую выдает сишка, больше на 10 процентов, чем нужно, значит кварц выдает другую частоту, чем прописано в программе и, вот эту частоту теперь и надо записать в программе, т.е. увеличить именно на 10 процентов.
Я примеры взял из первой попавшейся программы, может у Вас другой исходник (уже не помню какой). Короче поищите в своем исходнике, потом, ежели что, уточним.