Вчера по быстрому собрал схему на макетке, всё сразу заработало! Большое спасибо автору за библиотеку для MAX7219 с возможностями скроллига! Применил готовые модули 8*8 матрица+MAX7219 и часовой модуль DS3231. Правда модули матриц пришлось развернуть на 90 град. относительно их штатного соединения перемычками. Осталось не понятным назначение свечение точек на крайнем правом столбце. Вопрос к автору: если я правильно понял то прошивка писалась на WinAVR и можно ли использовать библиотеку для MAX7219 в CodeVisionAVR? Просто в основном пользуюсь им. И ещё, на сколько сложно переделать прошивку под другой контролёр, например MEGA16 или MEGA32 и будете ли Вы развивать дальше этот проект? В плане развития хотелось бы, всё таки добавить ещё одну матрицу, что позволит сделать по шире шрифт или добавить показания секунд более мелким шрифтом, а также повыситься читаемость сообщений. Так же расширить возможности в настойках - изменение интервала времени прокрутки бегущей строки, её скорость, коррекции времени, звуковой индикации каждого часа. К показаниям температуры, мне кажется, надо добавить знаки + и -. Вообще в плане развития у Вас очень многообещающий проект. Ведь в отличии от других названных выше Вами проектов матричных часов у Вашего очень много свободных ног у контролёра, на которые можно навешивать какие угодно датчики ( хотелось бы давления и влажности).
Осталось не понятным назначение свечение точек на крайнем правом столбце
Секунды в двоичном коде. На экране будильника - дни, на которые будильник установлен.
Maxtor62 писал(а):
если я правильно понял то прошивка писалась на WinAVR
Прошивка писалась под avr-gcc в Linux. Да, в Windows этот компилятор входит в комплект WinAVR. Насчёт Codevision ничего не скажу, проекты в нём видел, но сам никогда в нём (и других Windows-IDE) под AVR код не писал.
Насчёт развития проекта не уверен. Ресурсы ATmega8 практически полностью исчерпаны (те же шрифты много занимают), поэтому тут нужно либо конкретно код оптимизировать, либо переходить на МК пожирнее (ту же ATmega168/328, если не менять разводку, ну или ATmega16/32, с уже новой схемой). Так что, если что-то и поменяется, то это, вероятнее всего, будет уже другой проект. Этот же проект у меня, по большому счёту, побочный продукт от написания библиотеки под MAX7219.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Для "Муся". 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?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Для компиляции в 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 придётся текстовую метку переписать следующим образом:
Здесь буквы "к", "н", "ь", не имеющие аналогов в латинской части кодовой таблицы, заменены своими hex-кодами. Аналогично переписываются и другие строковые константы.
WiseLord, что-то у меня размер файла-hex после компиляции слишком большой - не влазит в 8kb. Хотел на украинский перевести... Компилировал в linux (gcc version 4.7.2 (GCC))
gcc 4.7.2 генерирует больший по размеру код, нежели 4.8.x. Попробуйте сменить компилятор.
Ещё можете попробовать добавить в опции компилятора: CFLAGS (в моём Makefile можно в OPTIMIZE): -ffunction-sections -fdata-sections LDFLAGS: -Wl,-gc-sections
Это позволит вырезать из кода неиспользуемые функции/переменные. У меня экономится около 90 байт.
Спасибо, все получилось! Использовал указанные Вами опции + добавил еще -mrelax -flto. В результате на компиляторе 4.7 код получился меньше исходного на 327 байт.
У меня на 4.8 эти опции ничего не меняют. Возможно, они включены в этой версии по умолчанию, в отличие от 4.7, за счёт чего 4.8 выдаёт при прочих равных код меньшего размера.
Возможно... Относительно Вашего вышло меньше всего на 9 байт. Это наверное из-за более коротких названий на украинском. Если кому интересно прошивка в приатаченом файле.
Вложение:
Комментарий к файлу: Прошивка с украинскими названиями matrixclock-ua.7z [7.87 KiB]
Скачиваний: 486
Уважаемый WiseLord, подскажите пожалуйста, что надо исправить в коде при добавлении ещё одной матрицы кроме "#define MAX7219_ICNUMBER с 3 на 4"? Если исправить только здесь то пропадают первые две цифры в режиме часов и бегущая строка идёт только по первым трём матрицам? Если я правильно понимаю то размер экранного буфера определяется в static uint8_t scrBuf[MAX7219_ICNUMBER * 8], а что определяет эта строка "static uint8_t strBuf[512];"? Хочу попробовать сделать вывод секунд на четвёртой матрице. Опять же, если я правильно понимаю, то для этого можно использовать функцию "void showMainScreen(void)" из display.c? Хватит ли для этого памяти в ATMEGA8?
При выводе строки она сначала выводится в массив str[512]. Потом этот массив просто скроллится по окну буфера scrBuf[24].
Согласен, не самое удачное решение (много ОЗУ требует), у меня есть уже наработки без этого, но пока часов, собранных в железе, нет, особо не потестирую.
Посмотрите константы (смените 23 на 31) ещё здесь. Может, что-то улучшится.
P.S. Посидел 20 минут с Proteus: вот необходимые изменения для поддержки четырёх матриц, проект Proteus и hex во вложении. Секунды отрисовывайте уже сами.
Последний раз редактировалось WiseLord Ср апр 29, 2015 18:43:31, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения