Опорник от Владимир_К
415285 просмотров, 466 ответов — стр. 30 из 32
10 января 2025 г. в 12:12#436
Сегодня откорректирую, сейчас не дома..
10 января 2025 г. в 01:14#437
Итак, файл main.c
Найдите строки:
// ++++ функция инициализации МК ++++
void initialization(void)
{
PORTB=0xE7;
DDRB=0x00;
PORTC=0x3E;
DDRC=0x00;
PORTD=0x7C;
DDRD=0x80;
Исправьте следующим образом:
PORTB=0x00;
DDRB=0xE7;
PORTC=0x80;
DDRC=0x0E;
PORTD=0x00;
DDRD=0x7C;
Как видно из текста строки DDR и PORT перепутаны местами. Кто это так пошутил, не знаю...
Сейчас вывод порта PORTC7 включен на вход. То есть к нему подключаете кнопку, второй ее конец на землю. И на этот же вывод подаете плюс питания через резистор 10 ком. Этот порт подтянут к питанию внутренним резистором процессора, для этого PORTC=0x80, то есть седьмой бит установлен в единицу. Но внутренней подтяжки иногда не хватает (а может китайцы там начудили, если процессор от них). Все кнопки без фиксации.
Для переключения RX/TX кнопку надо нажать и удерживать, после отпускания, включается прием.
В этом же файле найдите строку (почти в самом низу):
if (bit_is_clear(PIND, 6)) tx(); //Измените ее вот так:
if (bit_is_clear(PINC, 7)) tx();
Не забудьте перенести в этот исходник откорректированную строку знакогенератора из файла ldc.c исходника тестовой программы. Откомпилируйте. Ну как обычно...
Найдите строки:
// ++++ функция инициализации МК ++++
void initialization(void)
{
PORTB=0xE7;
DDRB=0x00;
PORTC=0x3E;
DDRC=0x00;
PORTD=0x7C;
DDRD=0x80;
Исправьте следующим образом:
PORTB=0x00;
DDRB=0xE7;
PORTC=0x80;
DDRC=0x0E;
PORTD=0x00;
DDRD=0x7C;
Как видно из текста строки DDR и PORT перепутаны местами. Кто это так пошутил, не знаю...

Сейчас вывод порта PORTC7 включен на вход. То есть к нему подключаете кнопку, второй ее конец на землю. И на этот же вывод подаете плюс питания через резистор 10 ком. Этот порт подтянут к питанию внутренним резистором процессора, для этого PORTC=0x80, то есть седьмой бит установлен в единицу. Но внутренней подтяжки иногда не хватает (а может китайцы там начудили, если процессор от них). Все кнопки без фиксации.
Для переключения RX/TX кнопку надо нажать и удерживать, после отпускания, включается прием.
В этом же файле найдите строку (почти в самом низу):
if (bit_is_clear(PIND, 6)) tx(); //Измените ее вот так:
if (bit_is_clear(PINC, 7)) tx();
Не забудьте перенести в этот исходник откорректированную строку знакогенератора из файла ldc.c исходника тестовой программы. Откомпилируйте. Ну как обычно...
10 января 2025 г. в 03:35#438
Сейчас вывод порта PORTC7 включен на вход. То есть к нему подключаете кнопку, второй ее конец на землю.Это который PC6 или PC0? И,соответственно,при включенном RIT при замыкании ноги на землю,RIT должен отключиться?
10 января 2025 г. в 04:09#439
А где ADC7?. Подозреваю, что у Вас процессор не с 32 выводами, т.е. в другом корпусе.
Надо уточнить, атмега бывает в трёх разл. корпусах. Например в ДИП корпусе 28 выводов, и портов PORTC6 и 7 у нее нет.
Если на приеме включен режим RIT, то частоту можно установить любую, даже за пределами диапазона. При переходе на передачу, установится частота, которая была до включения режима RIT.
Так пожелал товарищ, которому отдал трансивер. Порядок управления в этих режимах, можно сделать любым. За
Надо уточнить, атмега бывает в трёх разл. корпусах. Например в ДИП корпусе 28 выводов, и портов PORTC6 и 7 у нее нет.
Если на приеме включен режим RIT, то частоту можно установить любую, даже за пределами диапазона. При переходе на передачу, установится частота, которая была до включения режима RIT.
Так пожелал товарищ, которому отдал трансивер. Порядок управления в этих режимах, можно сделать любым. За
10 января 2025 г. в 04:26#440
А где ADC7?. Подозреваю, что у Вас процессор не с 32 выводами, т.е. в другом корпусе.Все верно,у меня атмега 328 в DIP28.Вы говорили,что S-метр выкинули из программы.То есть освобождаются выводы PC1 PC2 PC3.Может быть на какой-то из них повесить PTT?
10 января 2025 г. в 04:28#441
Если на приеме включен режим RIT, то частоту можно установить любую, даже за пределами диапазона. При переходе на передачу, установится частота, которая была до включения режима RIT.Отлично

10 января 2025 г. в 04:54#442
Для переключения RX/TX кнопку надо нажать и удерживать, после отпускания, включается прием.Это нужно сделать в ****** Основная программа ********* или в ********* Передача ********* ?
В этом же файле найдите строку (почти в самом низу):
if (bit_is_clear(PIND, 6)) tx(); //Измените ее вот так:
if (bit_is_clear(PINC, 7)) tx();
10 января 2025 г. в 05:47#443
Все верно,у меня атмега 328 в DIP28Понятно.
То есть освобождаются выводы PC1 PC2 PC3.Можете использовать любой на свой выбор.
Вот эта строка, которая управляет кнопкой:
if (bit_is_clear(PINC, 7)) tx();
Здесь кнопка на выводе порта С, седьмой вывод. Смотря как удобнее на плате, можете вместо семерки написать 1,2 или 3. Кстати, тут я ошибся, судя по даташиту вывод ADC7 не является портом. Зная, что ADC1 и прочие до ADC5 могут быть как входами преобразователя, так и портами, я это применил и к ADC6, 7, а это не так.
Это нужно сделать в ****** Основная программа ********* или в ********* Передача ********* ?Это нужно сделать везде. И в основной программе и в функции передача.
if (bit_is_clear(PINС, 7)) tx(); Это строка в основном модуле программы. Переписываете ее так:
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.
Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
10 января 2025 г. в 06:21#444
Это нужно сделать везде. И в основной программе и в функции передача.Понял.Благодарю Вас,Владимир!
if (bit_is_clear(PINС, 7)) tx(); Это строка в основном модуле программы. Переписываете ее так:
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.
Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
Отпишусь позднее о результатах,как впаяю кнопку и скомпилирую hex 
10 января 2025 г. в 06:56#445
Отладку я делаю последовательно. Сначала я бы подключил индикатор, затем валкодер. При этом, валкодером должна изменяться частота. Потом переключатель диапазонов. И так далее. Правда есть одна проблема, без Si5351A программа, скорее всего, работать не будет. При обращении к Si5351A, процессор ждет ответа от чипа и, если ответа нет, программа "виснет". Если такое происходит (если у Вас пока не подключена Si), то надо блокировать обращение к чипу.
14 января 2025 г. в 11:58#446
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.После внесения предложенных мной изменений, проект не компилируется. Причина - в этих строках буква C - русская (написана в русской раскладке клавиатуры). Исправьте, переключив клавиатуру на английский.
Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
Сегодня писал для одного проекта, взял этот фрагмент и обнаружил ошибку..
15 января 2025 г. в 05:47#447
После внесения предложенных мной изменений, проект не компилируется. Причина - в этих строках буква C - русскаяА я сразу все проверил
.У меня все нормально собралось
.В выходной плотно посижу с этим проектом.21 января 2025 г. в 11:17#448
После внесения правок имеется следующая картина включения контроллера с валкодером и SI.Нет разделительных точек на индикаторе(в тестовой программе индикатора они есть и на своих местах),нет реакции на валкод(на другом синтезаторе откликается).Проект собрался без ошибок.
22 января 2025 г. в 04:41#449
Цитата: ZTMНет разделительных точек на индикаторе(в тестовой программе индикатора они есть и на своих местах)
Сбросьте исходник тестовой программы, сравню где расхождение.. Сначала разберемся с точками, потом с валкодером. Файл схемы я открыть не могу, он у Вас как видно по расширению, -Сплан-8. У меня седьмая версия и новую не хотелось бы ставить, я ими (в т.ч. Layout) давно не пользуюсь. В основном Диптрейс. Или сбросьте схему в седьмом или экспортируйте в другой формат.
22 января 2025 г. в 07:41#450
Цитата: Владимир_КСбросьте исходник тестовой программы, сравню где расхождение..
Вот
Схема тут же,в архиве 