Часы на светодиодных матрицах с драйверами MAX7219

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


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

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

Но никаких гарантий. У меня работали матрицы типа 19881BEG, а там разводка другая.

Я просто свою рабочую схему по даташитам на матрицы перенёс на 15881, ну и для A-варианта повернул. И очень надеюсь, что ошибок не допустил.

Во вложении то, что у меня точно работает, можете, на всякий случай, сравнить с рисунком выше по описаниям 15881 и 19881
Вложения
matrixclock_max7219.lay6.7z
(12.58 КБ) 871 скачивание
Maxtor62
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Чт авг 29, 2013 10:16:34
Откуда: Иркутск

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Maxtor62 »

Изображение
Вчера по быстрому собрал схему на макетке, всё сразу заработало! Большое спасибо автору за библиотеку для MAX7219 с возможностями скроллига! Применил готовые модули 8*8 матрица+MAX7219 и часовой модуль DS3231. Правда модули матриц пришлось развернуть на 90 град. относительно их штатного соединения перемычками. Осталось не понятным назначение свечение точек на крайнем правом столбце. Вопрос к автору: если я правильно понял то прошивка писалась на WinAVR и можно ли использовать библиотеку для MAX7219 в CodeVisionAVR? Просто в основном пользуюсь им. И ещё, на сколько сложно переделать прошивку под другой контролёр, например MEGA16 или MEGA32 и будете ли Вы развивать дальше этот проект? В плане развития хотелось бы, всё таки добавить ещё одну матрицу, что позволит сделать по шире шрифт или добавить показания секунд более мелким шрифтом, а также повыситься читаемость сообщений. Так же расширить возможности в настойках - изменение интервала времени прокрутки бегущей строки, её скорость, коррекции времени, звуковой индикации каждого часа. К показаниям температуры, мне кажется, надо добавить знаки + и -. Вообще в плане развития у Вас очень многообещающий проект. Ведь в отличии от других названных выше Вами проектов матричных часов у Вашего очень много свободных ног у контролёра, на которые можно навешивать какие угодно датчики ( хотелось бы давления и влажности).
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

Maxtor62 писал(а):Осталось не понятным назначение свечение точек на крайнем правом столбце
Секунды в двоичном коде. На экране будильника - дни, на которые будильник установлен.
Maxtor62 писал(а):если я правильно понял то прошивка писалась на WinAVR
Прошивка писалась под avr-gcc в Linux. Да, в Windows этот компилятор входит в комплект WinAVR. Насчёт Codevision ничего не скажу, проекты в нём видел, но сам никогда в нём (и других Windows-IDE) под AVR код не писал.

Насчёт развития проекта не уверен. Ресурсы ATmega8 практически полностью исчерпаны (те же шрифты много занимают), поэтому тут нужно либо конкретно код оптимизировать, либо переходить на МК пожирнее (ту же ATmega168/328, если не менять разводку, ну или ATmega16/32, с уже новой схемой). Так что, если что-то и поменяется, то это, вероятнее всего, будет уже другой проект. Этот же проект у меня, по большому счёту, побочный продукт от написания библиотеки под MAX7219.
муся
Родился
Сообщения: 16
Зарегистрирован: Вт дек 09, 2008 22:36:10
Откуда: Санкт -Петербург

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение муся »

Вопрос к Maxtor62

Что надо менять в прошивке для DS3231 и если надо менять, то не могли бы выложить файлы прошивки.

С уважением.
Maxtor62
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Чт авг 29, 2013 10:16:34
Откуда: Иркутск

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Maxtor62 »

Для "Муся". DS1307 и DS3231 по основным своим адресам регистров и командам идентичны. Поэтому в прошивке я ничего не менял и прошивал ту что выложил автор.
Кстати хотелось бы кое что в ней для себя поменять. Но, установив у себя WinAVR не получается откомпелировть проект. Если использовать Makefile автора то выдаётся ошибка: cc1.exe: error: no iconv implementation, cannot convert from UTF-8 to ks0066-ru. Если создаю свой Makefile, с соответствующим указанием в нём всех составляющих проекта, то получаю: undefined reference to "ds18*20SearhDevices" и дальше по каждой ссылке на процедуры из библиотек проекта, не смотря на то что они указаны в Makefile. Уважаемый автор, может что подскажите по данной проблеме? Может у Вас всё же есть возможность где то прогнать проект в WinAVR?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

Для компиляции в windows в консоли (cmd) заходите в каталог с проектом и даёте команду make. При установленном WinAVR она уже должна быть доступна (прописана в PATH).

Сейчас проверю в VirtualBox, собирается ли проект под Windows.

P.S.

Да, действительно, проект не собирается в Windows. Это из-за того, что в windows нет iconv (error: no iconv implementation, cannot convert from UTF-8 to ks0066-ru), который позволяет текстовые строки в программе (они в коде написаны прямо по-русски, в кодировке UTF-8) перевести в кодировку KS0066-RU (используется в знакосинтезирующих дисплеях, и, для совместимости с другими моими проектами, здесь).

Чтобы собрать в Windows этот проект нужно:
1. В Makefile закомментировать строчку CS = -fexec-charset=ks0066-ru, отключив тем самым конвертацию.
2. В исходниках в файле display.c все текстовые константы (типа "Воскресенье", "·C в комнате" и прочие) перевести в кодировку KS0066-RU. Для простоты - можно просто по-английски временно всё переписать, а потом уже использовать эту кодировку.
3. Использовать avr-gcc посвежее, как минимум, версии 4.8, например, avr-gcc-4.8_2013-03-06_mingw32.zip, так как тот, что в WinAVR отсюда, например, слишком старый и генерирует код, который не влезает в процессор. Внести соответствующие правки в Makefile.

Если не выполнить 2 пункт, кириллические строки будут отображаться "крякозябрами".

Во вложении исправленные Makefile/display.c и используемая в шрифтах кодировка. По крайней мере, у меня в WindowsXP в VirtualBox сейчас получилось собрать (с англоязычными текстовыми метками).

На выходных я постараюсь перенести текстовые метки из кода в EEPROM, тогда, думаю, проблема сборки под Windows уйдёт сама собой. Понадобится только WinAVR и >=avr-gcc-4.8. Дополнительный бонус - текстовые метки можно будет поменять прямо в eeprom, без перекомпиляции.

P.P.S.

Пару слов о том, как всё-таки оставить при этом русскоязычные надписи. Возьмём, например, текстовую метку.

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

const char wd0[] PROGMEM = "Воскресенье";
У кодировки ks0066-ru особенность в том, что кириллические символы там присутствуют только те, аналогов которым нет в латинской части кодовой таблицы. Скажем, русские "В", "о", "с" заменяются латинскими "B", "o", "c", а вот для буквы "к" аналога уже нет, и придётся использовать её по коду из таблицы, 0xBA (см. также файл font-ks0066-ru-08.c).
Таким образом, без перекодировки с помощью iconv придётся текстовую метку переписать следующим образом:

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

const char wd0[] PROGMEM = "Boc""\xBA""pece""\xBD""\xC4""e";

Здесь буквы "к", "н", "ь", не имеющие аналогов в латинской части кодовой таблицы, заменены своими hex-кодами. Аналогично переписываются и другие строковые константы.
Вложения
matrixclock-compile-in-windows.7z
(346.4 КБ) 982 скачивания
Maxtor62
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Чт авг 29, 2013 10:16:34
Откуда: Иркутск

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Maxtor62 »

WiseLord большое Вам спасибо за быстрый и качественный ответ. С вашими подсказками всё получилось!
Аватара пользователя
dark
Встал на лапы
Сообщения: 127
Зарегистрирован: Ср июн 04, 2008 00:22:30
Откуда: Украина, Ковель
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение dark »

WiseLord, что-то у меня размер файла-hex после компиляции слишком большой - не влазит в 8kb. Хотел на украинский перевести...
Компилировал в linux (gcc version 4.7.2 (GCC))
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

gcc 4.7.2 генерирует больший по размеру код, нежели 4.8.x. Попробуйте сменить компилятор.

Ещё можете попробовать добавить в опции компилятора:
CFLAGS (в моём Makefile можно в OPTIMIZE): -ffunction-sections -fdata-sections
LDFLAGS: -Wl,-gc-sections

Это позволит вырезать из кода неиспользуемые функции/переменные. У меня экономится около 90 байт.
Аватара пользователя
dark
Встал на лапы
Сообщения: 127
Зарегистрирован: Ср июн 04, 2008 00:22:30
Откуда: Украина, Ковель
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение dark »

Спасибо, все получилось!
Использовал указанные Вами опции + добавил еще -mrelax -flto. В результате на компиляторе 4.7 код получился меньше исходного на 327 байт. :))
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

У меня на 4.8 эти опции ничего не меняют. Возможно, они включены в этой версии по умолчанию, в отличие от 4.7, за счёт чего 4.8 выдаёт при прочих равных код меньшего размера.
Аватара пользователя
dark
Встал на лапы
Сообщения: 127
Зарегистрирован: Ср июн 04, 2008 00:22:30
Откуда: Украина, Ковель
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение dark »

Возможно...
Относительно Вашего вышло меньше всего на 9 байт. Это наверное из-за более коротких названий на украинском.
Если кому интересно прошивка в приатаченом файле.
matrixclock-ua.7z
Прошивка с украинскими названиями
(7.87 КБ) 533 скачивания
Stail564
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс янв 11, 2015 11:08:49

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Stail564 »

Всем привет, а подскажите плс как скомпилировать прошивку под ATMEGA328? Или может кто нибудь может это сделать?.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

Нужен небольшой патч на исходники, в связи с другими именами регистров таймеров:
Спойлер

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

diff --git a/Makefile b/Makefile
index d377925..c8c559a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 TARG=matrixclock
 
 SRCS = main.c max7219.c font-ks0066-ru-08.c mtimer.c i2c.c ds1307.c ds18x20.c display.c alarm.c
-MCU = atmega8
+MCU = atmega328
 F_CPU = 8000000L
 
 CS = -fexec-charset=ks0066-ru
diff --git a/max7219.c b/max7219.c
index c453f73..f8f2e8d 100644
--- a/max7219.c
+++ b/max7219.c
@@ -281,8 +281,8 @@ void max7219LoadFont(const uint8_t *font)
 
 void scrollTimerInit(void)
 {
-   TIMSK |= (1<<TOIE2);                     /* Enable Timer2 overflow interrupt */
-   TCCR2 |= (1<<CS22) | (1<<CS21) | (1<<CS20);      /* Set timer prescaller to 1024 (7812 Hz) */
+   TIMSK2 |= (1<<TOIE2);                     /* Enable Timer2 overflow interrupt */
+   TCCR2B |= (1<<CS22) | (1<<CS21) | (1<<CS20);   /* Set timer prescaller to 1024 (7812 Hz) */
 
    return;
 }
diff --git a/mtimer.c b/mtimer.c
index 3476b40..fb7e84d 100644
--- a/mtimer.c
+++ b/mtimer.c
@@ -15,8 +15,8 @@ static volatile uint8_t cmdBuf;
 
 void mTimerInit(void)
 {
-   TIMSK |= (1<<TOIE0);                     /* Enable Timer0 overflow interrupt */
-   TCCR0 |= (0<<CS02) | (1<<CS01) | (1<<CS00);      /* Set timer prescaller to 64 (125kHz) */
+   TIMSK0 |= (1<<TOIE0);                     /* Enable Timer0 overflow interrupt */
+   TCCR0B |= (0<<CS02) | (1<<CS01) | (1<<CS00);   /* Set timer prescaller to 64 (125kHz) */
 
    tempConvertTimer = 0;
 
Stail564
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс янв 11, 2015 11:08:49

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Stail564 »

СПАСИБО огромное, сейчас буду пробовать...ну никак не могу научится компилировать исходник под виндовс...
Stail564
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс янв 11, 2015 11:08:49

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Stail564 »

Все заработало спасибо еще раз.
Stail564
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс янв 11, 2015 11:08:49

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Stail564 »

Если перепутать 11 и 12 ногу МК то получаются тикающие часы (дип корпус) ))))))))
Аватара пользователя
dark
Встал на лапы
Сообщения: 127
Зарегистрирован: Ср июн 04, 2008 00:22:30
Откуда: Украина, Ковель
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение dark »

Изображение
В процессе...
Осталось сделать корпус.
WiseLord, спасибо за конструкцию! :beer:
Maxtor62
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Чт авг 29, 2013 10:16:34
Откуда: Иркутск

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение Maxtor62 »

Уважаемый WiseLord, подскажите пожалуйста, что надо исправить в коде при добавлении ещё одной матрицы кроме "#define MAX7219_ICNUMBER с 3 на 4"? Если исправить только здесь то пропадают первые две цифры в режиме часов и бегущая строка идёт только по первым трём матрицам? Если я правильно понимаю то размер экранного буфера определяется в static uint8_t scrBuf[MAX7219_ICNUMBER * 8], а что определяет эта строка "static uint8_t strBuf[512];"? Хочу попробовать сделать вывод секунд на четвёртой матрице. Опять же, если я правильно понимаю, то для этого можно использовать функцию "void showMainScreen(void)" из display.c? Хватит ли для этого памяти в ATMEGA8?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Часы на светодиодных матрицах с драйверами MAX7219

Сообщение WiseLord »

При выводе строки она сначала выводится в массив str[512]. Потом этот массив просто скроллится по окну буфера scrBuf[24].

Согласен, не самое удачное решение (много ОЗУ требует), у меня есть уже наработки без этого, но пока часов, собранных в железе, нет, особо не потестирую.

Посмотрите константы (смените 23 на 31) ещё здесь. Может, что-то улучшится.

P.S. Посидел 20 минут с Proteus: вот необходимые изменения для поддержки четырёх матриц, проект Proteus и hex во вложении. Секунды отрисовывайте уже сами.
Последний раз редактировалось WiseLord Ср апр 29, 2015 18:43:31, всего редактировалось 1 раз.
Ответить

Вернуться в «Статьи»