Информацию по Pin1 и Pin2 вычитал из вложения на прошивку fm7segm-a62ae17.
Там 2 файла - pin1_article.png и pin2_forum.png.
Та вот pin2 схема с термометром и без транзисторов.
Pin1 схема с транзисторами и без термометра.
А сейчас наоборот. У меня схема подключения которая с термометром но без транзисторов.
Транзисторы я добавил. Выходит что мне нужна прошивка fm7segm_pin1_cc_tr?
Как изменить eeprom для поддержки индкодера и rda5807m?
Прошил другой прошивкой, всё стало в норму.
Но если не подключены часы - на дисплее всё равно мельтешение. (ссылка на видео приложена). Если в режиме работы приемника - всё нормально.
Просьба к автору - можно ли реализовать работу MCU на 5 разрядный дисплей? Если можно, то куда цеплять пятый разряд (чтобы можно было высвечивать частоту за 100 Мгц)?
На вывод PC3 MCU можно цеплять? Вас не затруднит переделать прошивку под 5 разрядный дисплей? (там вроде точка между целым и десятичным частоты уже не будет смещаться)?
Самому мне не очень интересно это делать, но могу пояснить, что поменять в коде.
1. Добавить в pins.h ещё один разряд DIG_4 на свободную ножку (крайний левый, так как нумеруются они справа налево).
2. Установить в segm.h DIGITS в 4. После этого массив ind[], хранящий выводимое число вырастет на 1 байт.
3. Соответственно обработать новый разряд в функции инициализации и прерываниях: гашение и зажигание. В switch это будет case: 4.
4. Вывод времени можно, по идее, не трогать, он останется в пределах тех же столбцов, а вот вывод частоты можно упростить до одной строчки:
Здесь freq - выводимое число, 2 - позиция десятичной точки, CH_EMPTY - пустой символ, рисующийся слева, tunerStereo - точка наличия приёма.
5. Если надо помимо частоты поменять вывод других чисел - по аналогии менять параметры segmNum() в других showXXX() функциях в segm.c, там по смыслу должно быть понятно.
Но вы же компилируете в какой-то среде? В линуксе.
Я сижу в окошках.
Описали вы с энтузиазмом. Вам как профессионалу заменить нужные строчки и откомпилировать много труда не составит.
А я даже не знаю как это все собрать в одну прошивку.
Помогите котенку, ну пожалуйста !
Заодно появится еще одна прошивка на 5 разрядов, а я буду тестером.
Для компиляции достаточно установленных avr-gcc и make. В винде это всё входит в комплект в WinAVR. Для сборки достаточно в консоли дать команду make all, находясь в каталоге проекта. Предварительно в Makefile можно настроить тип индикаторов под себя. Для понимания можно посмотреть на скрипт массовой сборки build_all.sh
Любые IDE или текстовые редакторы - это уже необязательно или по желанию. Всё равно, всё что от них по сути нужно - это тот же вызов make all. Лично я для этого использую QtCreator и ранее описывал как его ко всему этому подключить. Но не возбраняется использовать любую другую среду, умеющую либо работать с Makefile, либо вызывать внешние команды.
WiseLord писал(а):
1. Добавить в pins.h ещё один разряд DIG_4 на свободную ножку (крайний левый, так как нумеруются они справа налево).
#define DIG_0 D
#define DIG_0_LINE (1<<7)
#define DIG_1 D
#define DIG_1_LINE (1<<5)
#define DIG_2 D
#define DIG_2_LINE (1<<3)
#define DIG_3 D
#define DIG_3_LINE (1<<4)
#define DIG_4 D
#define DIG_4_LINE (1<<2)
Так что-ли? Что значит (1<< цифра)? Как здесь определяется вывод MCU?
Для меня это всё темный лес. Неужели вам трудно скомпилировать прошивку, для вас это дело 3 минут?
WiseLord писал(а):5. Если надо помимо частоты поменять вывод других чисел - по аналогии менять параметры segmNum() в других showXXX() функциях в segm.c, там по смыслу должно быть понятно.
Нет не нужно, только частота приемника.
А как все это собрать в прошивку? Я по всякому запускал makefile и у меня ничего не получается?
make makefile.sh
*** No rule to make target makefile.sh. Stop.
make build_all.sh
*** Nothing to be done for build_all.sh
Эта запись означает, что для четвёртого (считаем справа, начиная с нулевого) разряда выбран порт PD2. Запись (1<<3) означает сдвинутую на 3 позиции единицу, то есть число 0b00001000. Запись (1<<0) - число 0b00000001. И так далее. Достаточно стандартная запись для микроконтроллерного кода.
Да, в 5. И не забыть обработать DIG_4 в коде (case и т.п.) по аналогии с прочими разрядами.
Для других прошивок нужно поменять соответствующие параметры в Makefile. Либо собирать без правки:
Всё сделал как вы писали, но на дисплее пятый разряд не горит.
При смене номера программы, меняется значение частоты на дисплее и при переходе свыше 100 кГц, точка остается на месте и значение вроде правильно
пишется на дисплее, но 1 впереди не горит.
Я еще менял строку в файле - segm.c :
/* Co to next digit */
if (++pos > 3)
pos = 0;
на if (++pos > 4) pos = 0;
Но все равно не горит 1 в значении частоты на дисплее.
Может где в коде задается размер значения частоты в четыре разряда кроме так где я менял?
Может где указан тип для переменной частоты и пятый разряд потому туда и не входит?
Где еще нужно менять код?
P.S. На этот пятый разряд сигнал подавал методом времено с четвертого на пятый кинул провод - пятый разряд работает.
Спасибо за .patch файл.
Правда долго я разбирался как мне его применить.
Выяснил что его используют линуксо-man'ы. Мне пришлось пересохранить .patch файл, скачать программу patch для windows, и после танцев с бубном пропатчил.
И вот что получилось - при включении индикация часов - 4 разряда. Индикация частоты приемника 4 или 5 разрядов. Когда я меняю частоту на приемнике и она становится больше 100 кГц, то на дисплее все правильно, но когда я выключаю приемник (перевожу в stand-by), часы уже показывают 4 разряда + единица слева.
Где-то в коде надо изменить часы, чтобы были всегда 4 разряда.
Я проверял в proteus - часы отображались как положено. Хотя момент перехода с приёмника >100МГц на часы я мог и пропустить
Patch - это обычный текстовый файл. Его можно и глазами просмотреть, и руками нужное в код вписать. Строки кода, начинающиеся с плюса - добавляемые, с минуса - удаляемые, прочие - контекст.
Чтобы поправить время, в конце функции segmTimeHM() просто занулите 5-й разряд (ind[4] = CH_EMPTY;), который, да, может быть засвечен в предыдущем режиме.