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

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


Ответить

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

Пт мар 06, 2015 11:54:18

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

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

Во вложении то, что у меня точно работает, можете, на всякий случай, сравнить с рисунком выше по описаниям 15881 и 19881
Вложения
matrixclock_max7219.lay6.7z
(12.58 KiB) Скачиваний: 812

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

Ср мар 11, 2015 12:05:15

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

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

Ср мар 11, 2015 12:33:13

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

Насчёт развития проекта не уверен. Ресурсы ATmega8 практически полностью исчерпаны (те же шрифты много занимают), поэтому тут нужно либо конкретно код оптимизировать, либо переходить на МК пожирнее (ту же ATmega168/328, если не менять разводку, ну или ATmega16/32, с уже новой схемой). Так что, если что-то и поменяется, то это, вероятнее всего, будет уже другой проект. Этот же проект у меня, по большому счёту, побочный продукт от написания библиотеки под MAX7219.

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

Чт мар 12, 2015 18:13:05

Вопрос к Maxtor62

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

С уважением.

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

Пт мар 13, 2015 11:07:39

Для "Муся". 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?

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

Пт мар 13, 2015 11:23:26

Для компиляции в 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 KiB) Скачиваний: 912

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

Пт мар 13, 2015 19:47:09

WiseLord большое Вам спасибо за быстрый и качественный ответ. С вашими подсказками всё получилось!

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

Вс апр 12, 2015 23:07:04

WiseLord, что-то у меня размер файла-hex после компиляции слишком большой - не влазит в 8kb. Хотел на украинский перевести...
Компилировал в linux (gcc version 4.7.2 (GCC))

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

Пн апр 13, 2015 18:21:28

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

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

Это позволит вырезать из кода неиспользуемые функции/переменные. У меня экономится около 90 байт.

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

Ср апр 15, 2015 14:47:14

Спасибо, все получилось!
Использовал указанные Вами опции + добавил еще -mrelax -flto. В результате на компиляторе 4.7 код получился меньше исходного на 327 байт. :))

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

Ср апр 15, 2015 15:16:17

У меня на 4.8 эти опции ничего не меняют. Возможно, они включены в этой версии по умолчанию, в отличие от 4.7, за счёт чего 4.8 выдаёт при прочих равных код меньшего размера.

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

Ср апр 15, 2015 15:36:23

Возможно...
Относительно Вашего вышло меньше всего на 9 байт. Это наверное из-за более коротких названий на украинском.
Если кому интересно прошивка в приатаченом файле.
matrixclock-ua.7z
Прошивка с украинскими названиями
(7.87 KiB) Скачиваний: 486

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

Пт апр 24, 2015 12:15:06

Всем привет, а подскажите плс как скомпилировать прошивку под ATMEGA328? Или может кто нибудь может это сделать?.

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

Пт апр 24, 2015 14:32:44

Нужен небольшой патч на исходники, в связи с другими именами регистров таймеров:
Спойлер
Код:
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;
 

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

Пт апр 24, 2015 14:47:39

СПАСИБО огромное, сейчас буду пробовать...ну никак не могу научится компилировать исходник под виндовс...

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

Пт апр 24, 2015 15:38:41

Все заработало спасибо еще раз.

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

Пн апр 27, 2015 11:21:49

Если перепутать 11 и 12 ногу МК то получаются тикающие часы (дип корпус) ))))))))

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

Пн апр 27, 2015 21:58:56

Изображение
В процессе...
Осталось сделать корпус.
WiseLord, спасибо за конструкцию! :beer:

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

Вт апр 28, 2015 18:55:04

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

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

Вт апр 28, 2015 19:05:19

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

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

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

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