Цифровой приёмник на TEA5767 c часами на DS1307

Обсуждаем контроллеры компании Atmel.
Ответить
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Информацию по Pin1 и Pin2 вычитал из вложения на прошивку fm7segm-a62ae17.
Там 2 файла - pin1_article.png и pin2_forum.png.
Та вот pin2 схема с термометром и без транзисторов.
Pin1 схема с транзисторами и без термометра.


А сейчас наоборот. У меня схема подключения которая с термометром но без транзисторов.
Транзисторы я добавил. Выходит что мне нужна прошивка fm7segm_pin1_cc_tr?

Как изменить eeprom для поддержки индкодера и rda5807m?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Да, нужна эта прошивка.

Настройки EEPROM:
Для байта eepromFMTuner по адресу 0x1A вписывается:
TEA5767 = 1
RDA5807 = 2 (по умолчанию)
TUX032 = 3
RDA5802 = 4

Для байта eepromEncRes по адресу 0x06:
0 - без энкодера
другое число - число фаз на щелчок (значение по умолчанию 4)
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Прошил другой прошивкой, всё стало в норму.
Но если не подключены часы - на дисплее всё равно мельтешение. (ссылка на видео приложена). Если в режиме работы приемника - всё нормально.

Просьба к автору - можно ли реализовать работу MCU на 5 разрядный дисплей? Если можно, то куда цеплять пятый разряд (чтобы можно было высвечивать частоту за 100 Мгц)?
На вывод PC3 MCU можно цеплять? Вас не затруднит переделать прошивку под 5 разрядный дисплей? (там вроде точка между целым и десятичным частоты уже не будет смещаться)?

https://youtu.be/XJ35b4BRVLU
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Самому мне не очень интересно это делать, но могу пояснить, что поменять в коде.
1. Добавить в pins.h ещё один разряд DIG_4 на свободную ножку (крайний левый, так как нумеруются они справа налево).
2. Установить в segm.h DIGITS в 4. После этого массив ind[], хранящий выводимое число вырастет на 1 байт.
3. Соответственно обработать новый разряд в функции инициализации и прерываниях: гашение и зажигание. В switch это будет case: 4.
4. Вывод времени можно, по идее, не трогать, он останется в пределах тех же столбцов, а вот вывод частоты можно упростить до одной строчки:

Код: Выделить всё

segmNum(freq, 2, CH_EMPTY, tunerStereo())
Здесь freq - выводимое число, 2 - позиция десятичной точки, CH_EMPTY - пустой символ, рисующийся слева, tunerStereo - точка наличия приёма.
5. Если надо помимо частоты поменять вывод других чисел - по аналогии менять параметры segmNum() в других showXXX() функциях в segm.c, там по смыслу должно быть понятно.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Но вы же компилируете в какой-то среде? В линуксе.
Я сижу в окошках.
Описали вы с энтузиазмом. Вам как профессионалу заменить нужные строчки и откомпилировать много труда не составит.
А я даже не знаю как это все собрать в одну прошивку.
Помогите котенку, ну пожалуйста :)) !
Заодно появится еще одна прошивка на 5 разрядов, а я буду тестером.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Для компиляции достаточно установленных avr-gcc и make. В винде это всё входит в комплект в WinAVR. Для сборки достаточно в консоли дать команду make all, находясь в каталоге проекта. Предварительно в Makefile можно настроить тип индикаторов под себя. Для понимания можно посмотреть на скрипт массовой сборки build_all.sh

Любые IDE или текстовые редакторы - это уже необязательно или по желанию. Всё равно, всё что от них по сути нужно - это тот же вызов make all. Лично я для этого использую QtCreator и ранее описывал как его ко всему этому подключить. Но не возбраняется использовать любую другую среду, умеющую либо работать с Makefile, либо вызывать внешние команды.
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

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 минут?
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

WiseLord писал(а): 2. Установить в segm.h DIGITS в 4.
Может быть не 4 а 5, ведь уже будет 5 разрядов?
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

WiseLord писал(а): а вот вывод частоты можно упростить до одной строчки:

Код: Выделить всё

segmNum(freq, 2, CH_EMPTY, tunerStereo())
Здесь freq - выводимое число, 2 - позиция десятичной точки, CH_EMPTY - пустой символ, рисующийся слева, tunerStereo - точка наличия приёма.

Мы это

void segmFmFreq(void)
{
uint16_t freq;

tunerReadStatus();
freq = tunerGetFreq();
if (freq >= 10000) {
segmNum(freq/10, 1, CH_EMPTY, tunerStereo());
} else {
if (freq >= 7600 && eeprom_read_byte(eepromFMStep2) >= 10)
segmNum(freq/10, 1, CH_EMPTY, tunerStereo());
else
segmNum(freq, 2, CH_EMPTY, tunerStereo());
}

return;

меняем на это ?

void segmFmFreq(void)
{
uint16_t freq;

tunerReadStatus();
freq = tunerGetFreq();
segmNum(freq, 2, CH_EMPTY, tunerStereo())
}

return;

Правильно?
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

makeall

Мля..мля...мля...
make: *** [build/segm.o] Error 1

Как то так...
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Достаточно просто make. Цель all (make all) выбирается автоматически.

Функция segmFmFreq() поправлена правильно.

Код: Выделить всё

#define DIG_4 D
#define DIG_4_LINE (1<<2)
Эта запись означает, что для четвёртого (считаем справа, начиная с нулевого) разряда выбран порт PD2. Запись (1<<3) означает сдвинутую на 3 позиции единицу, то есть число 0b00001000. Запись (1<<0) - число 0b00000001. И так далее. Достаточно стандартная запись для микроконтроллерного кода.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

WiseLord писал(а):что для четвёртого (считаем справа, начиная с нулевого) разряда выбран порт PD2.

Но на порте PD2 висит кнопка BTN3(K4)! Согласно схеме свободный порт PC3. Как мне его указать?
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ну так очевидно же - прописать для DIG_4 порт C и линию (1<<3).
Контактная информация:
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Изменил, запустил make, на выходе - fm7segm_pin1_cc_no.hex.
А нужен fm7segm_pin1_cc_tr.hex.
Как изменить?

И по поводу - установить в segm.h DIGITS в 4?
Там изначально уже было 4, менять на 5?
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Да, в 5. И не забыть обработать DIG_4 в коде (case и т.п.) по аналогии с прочими разрядами.
Для других прошивок нужно поменять соответствующие параметры в Makefile. Либо собирать без правки:

Код: Выделить всё

make PINOUT=_PIN1 IND_TYPE=_CC USE_TRANS=_TR
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Сб мар 01, 2014 17:11:45
Откуда: Москва

Сообщение bim1405 »

WP_20160510_001.jpg
(64.08 КБ) 780 скачиваний
Собрал часы-приемник на RDA5807M, конструкция очень понравилась, спасибо.
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Всё сделал как вы писали, но на дисплее пятый разряд не горит.
При смене номера программы, меняется значение частоты на дисплее и при переходе свыше 100 кГц, точка остается на месте и значение вроде правильно
пишется на дисплее, но 1 впереди не горит.

Я еще менял строку в файле - segm.c :

/* Co to next digit */

if (++pos > 3)
pos = 0;

на if (++pos > 4) pos = 0;
Но все равно не горит 1 в значении частоты на дисплее.

Еще меня смущает строки :

void segmFmEditFreq(void)

{
uint16_t freq;
freq = tunerGetFreq();
if (blink > BLINK_TIME) {
if ((freq >= 7600 && eeprom_read_byte(eepromFMStep2) >= 10) ||
(freq < 7600 && eeprom_read_byte(eepromFMStep1) >= 10))
segmNum(freq/10, 1, CH_EMPTY, 0);
else
segmNum(freq, 2, CH_EMPTY, 0);
}
else
{
ind[0] = CH_EMPTY;
ind[1] = CH_EMPTY;
ind[2] = CH_EMPTY;
ind[3] = CH_EMPTY;

}
return;
}


Может где в коде задается размер значения частоты в четыре разряда кроме так где я менял?
Может где указан тип для переменной частоты и пятый разряд потому туда и не входит?
Где еще нужно менять код?
P.S. На этот пятый разряд сигнал подавал методом времено с четвертого на пятый кинул провод - пятый разряд работает.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Потратил 5 минут, получил результат. Не понимаю, в чём загвоздка.

Патч на исходники (на последнюю версию, в отличие от той, что, судя по всему, использовалась Вами) приложен.
Вложения
five-digits.patch.7z
(1.1 КБ) 222 скачивания
Контактная информация:
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Спасибо за .patch файл.
Правда долго я разбирался как мне его применить.
Выяснил что его используют линуксо-man'ы. Мне пришлось пересохранить .patch файл, скачать программу patch для windows, и после танцев с бубном пропатчил.
И вот что получилось - при включении индикация часов - 4 разряда. Индикация частоты приемника 4 или 5 разрядов. Когда я меняю частоту на приемнике и она становится больше 100 кГц, то на дисплее все правильно, но когда я выключаю приемник (перевожу в stand-by), часы уже показывают 4 разряда + единица слева.
Где-то в коде надо изменить часы, чтобы были всегда 4 разряда.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Я проверял в proteus - часы отображались как положено. Хотя момент перехода с приёмника >100МГц на часы я мог и пропустить

Patch - это обычный текстовый файл. Его можно и глазами просмотреть, и руками нужное в код вписать. Строки кода, начинающиеся с плюса - добавляемые, с минуса - удаляемые, прочие - контекст.

Чтобы поправить время, в конце функции segmTimeHM() просто занулите 5-й разряд (ind[4] = CH_EMPTY;), который, да, может быть засвечен в предыдущем режиме.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Вс апр 17, 2011 12:09:57

Сообщение уткодроз »

Спасибо, буду пробовать! :P
Ответить

Вернуться в «AVR»