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

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

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


Аватара пользователя
evgeniy1957
Встал на лапы
Сообщения: 110
Зарегистрирован: Ср сен 17, 2008 09:00:34
Откуда: Украина

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

Сообщение evgeniy1957 »

Cпасибо! Прошил! По умолчанию матрица получилась в порядке 4321 ну это ладно можно поправить но теперь стоит режим больших цифр без секунд и тоже не хочет переключаться! Я в шоке, кнопки все рабочие а дефект переходит из прошивки в прошивку. Не знаю что еще попробовать. Может проц поменять. Но часы же нормально работают.

Добавлено after 34 minutes 30 seconds:
Перепрошил matrixclock_max7219_mod2_atmega8.hex порядок матриц наладился остальное без изменений. Оставлю пока так, большие цифры мне больше нравятся :))
Человек может посмотреть на другого свысока только тогда, когда помогает ему подняться...
Реклама
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

Всем привет!
WiseLord, не подскажете, если в исходнике частоту кварца изменить на 16 МГц, то править ни чего не нужно будет больше или нет? Если да, то в каких местах?
Заранее спасибо за ответ.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

В matrix.c и mtimer.c доработать инициализацию/прерывания таймеров, чтобы они продолжали работать на прежней частоте. Иначе временные интервалы нажатий кнопок, скорость прокрутки бегущей строки и другие зависящие от них вещи будут работать некорректно - ускоренно.
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Отличные часы но не для лопухов в программировании. Мучаюсь уже долго подгоняя для себя. Подскажите пожалуйста где у вас реализован запуск и звучание будильника. Хочу вообще пищалку ликвидировать, А что надо вычистить не пойму. В программировании не силён, еле осилил добавку нескольких пунктов в меню часов, добавление плеера и uart. Добавил изменение громкости и выбор мелодии для DFPlayer, также ввёл настройку бегущей строки 4 варианта вывода ( отключена, только дата, только датчики, и вариант по умолчанию) и изменение интервала показа правда до 99 сек. Вместо гудка каждый час поставил проговаривание времени голосом. Потом добавлю выбор варианта часового сигнала.
В 8-ку конечно уже не влезает но делаю для 328. Очень много переходов, а с таймерами вообще у меня беда, мне кажется будильник где то там и включается. Ткните пальцем пожалуйста где в коде это реализовано. Проект собираю в atmel studio. И кстати как доработать таймера в сообщении выше , цикл вставить как тут где то делали?
Как хитро вы реализовали проверку при изменении яркости матрицы в меню, я на день застрял не понимая почему ничего не работает в подобных меню у меня. Вот эта не понятка eep.brMax &= 0x0F; Так и не понял сделал свою проверку.
В страшных планах добавление сд карты для чтения событий. Скажите а выводить прямо из файла строку можно на вашем движке?
И по моему зря убрали 3-й вариант отображения цифр, где точка внизу была.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

phoenix75 писал(а):где у вас реализован запуск и звучание будильника.
В main.c в основном цикле вызывается функция checkAlarm() В случае подходящего времени для будильника устанавливается в нужное значение переменная alarmTimer;
Вообще работа с бипером достаточно хитрая - всё ради ужатия кода. Вся логика реализуется в файле mtimer.c.

Таймер 0 настроен на 250Гц. В конце обработчика прерывания такой код:
Спойлер

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

	// 1 second intervals
	if (secTimer) {
		secTimer--;
	} else {
		secTimer = TIME_SEC; // 250
		// Temperature
		if (sensTimer)
			sensTimer--;
		if (scrollTimer)
			scrollTimer--;

		if (alarmTimer)
			alarmTimer--;
	}

	// Beeper
	if (beepTimer) {
		beepTimer--;
	} else {
		if (alarmTimer)
			beepTimer = TIME_SEC;
	}

	if ((beepTimer & 0x0E) > 8) {
		if (secTimer > TIME_SEC / 2)
			PORT(BEEPER) &= ~BEEPER_LINE;
	} else {
		PORT(BEEPER) |= BEEPER_LINE;
	}
secTimer реализует односекундные интервалы. То есть, раз в секунду мы попадаем в else ветку, где снова "заряжаем" этот таймер на одну секунду. Там же уменьшаем, раз в секунду, alarmTimer.

beepTimer - это переменная, за счёт которой реализуется сам сигнал. Будучи установлена в некоторое значение, она с частотой таймера 250Гц постепенно декрементируется до нуля. Кроме того, как только это происходит, в случае активного будильника она каждую секунду снова "подбрасывается" до TIME_SEC=250. То есть, если мы хотим "бипнуть", мы просто функцией startBeeper() ставим эту переменную в нужное значение, после чего она сама "скатится" до нуля. Ну, или это будет делать каждую секунду alarmTimer.

Ну и в самом низу - собственно управление бипером. По мере "скатывания" в ноль, у переменной beepTimer младшие разряды несколько раз (16 раз в секунду) проходят числа от 0 до 15. Собственно, тут вся логика - пока младшие биты > 8 - пищим (в первой половине секунды), если меньше - выключаем бипер.
phoenix75 писал(а):Вот эта не понятка eep.brMax &= 0x0F
Просто ограничение максимальной яркости значением 15, путём обнуления старших четырёх битов.
phoenix75 писал(а):зря убрали 3-й вариант отображения цифр
Он остался в варианте для трёх матриц. На четырёх он и смотрелся не очень, да и не влезали в ATmega8 сразу оба варианта после добавления всех датчиков.
Реклама
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Спасибо за ответ. Именно на этот участок кода и думал но не понял как работает. А ограничение яркости если изменить значение 0f на другое не работают нормально кнопки изменения значений, убавляет сразу на 2 и прибавление не работает, точнее прибавление идет а эта строка делает -1. Ладно буду дальше разбираться.
Реклама
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Извините обращусь ешё раз. Вроде всё работает но обнаружилась проблема не отображает показания датчиков ни дтш22 ни 180. Перекидывал 22-й на разные пины ничего. Если загрузить скетч из idi показания есть в мониторе, значит датчик рабочий. Посмотрите пожалуйста что наваял https://yadi.sk/d/5mJjbNtBxUEGQ. Отредактированный файл епрома и распиновка в архиве.
А то может я на ерунде какой застрял. Глаза уже замылились.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Работает ли оригинальный код с учётом поправки на другую разводку?
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Загрузил вариант без правок, тоже в строке нули показывает. Вначале строки вообще нет, после передёргивания датчика строка появляется но температура 0.0 и влажность 0.0. Откомпилировал ваш код заработало. Но датчик всё равно передёргивать надо, без этого строка не появляется. Где то я накосячил. :facepalm: Может намекнёте где ошибся.
Аватара пользователя
hector
Грызет канифоль
Сообщения: 251
Зарегистрирован: Сб янв 23, 2016 10:30:29

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

Сообщение hector »

Работают себе часы с марта месяца.
За текущее время ушли вперед на 1.5 минуты
Раз было - "отвалился" где-то на месяц датчик давления, а так как температура снималась с него - перестала отображаться температура дома. Потом вдруг опять появился..
Вопрос к WiseLord:
- можно ли как-то ввести коррекцию в DS3231?
Как показало время - они довольно не точные.
Тут как-то делают: http://radiokot.ru/forum/viewtopic.php? ... 1#p2888811
Вложения
IMG_20161024_081458202.zip
(662.87 КБ) 228 скачиваний
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Проект совместим с DS1307, а рецепты коррекции, специфичные, для DS3231, для DS1307 уже работать не будут.
Genri5
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт авг 23, 2012 08:19:06

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

Сообщение Genri5 »

hector писал(а):Работают себе часы с марта месяца.
За текущее время ушли вперед на 1.5 минуты
Раз было - "отвалился" где-то на месяц датчик давления, а так как температура снималась с него - перестала отображаться температура дома. Потом вдруг опять появился..
Вопрос к WiseLord:
- можно ли как-то ввести коррекцию в DS3231?
Как показало время - они довольно не точные.
Тут как-то делают: http://radiokot.ru/forum/viewtopic.php? ... 1#p2888811
Я собрал часики на плате предложенной dark-м : http://radiokot.ru/forum/viewtopic.php? ... start=1000 - в конце июня.
С того времени часы не ушли не взад, не вперед. Секунды я не сверял, но минуты совпадают с компьютерным временем. Единственный недостаток, который я заметил - это расхождение показаний температуры датчиков DHT22, BMP180. Хотя они лежат рядом, температура BMP180 точнее на градус. Я собрал еще портативные часы на ардуино с BMP280 и данные с BMP180 практически совпадают, а вложность DHT22 отличантся с BMP280, тоже на 1-цу. DHT22 по температуре и влажности врет на 1-цу.
Genri5
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт авг 23, 2012 08:19:06

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

Сообщение Genri5 »

Genri5 писал(а): Я собрал еще портативные часы на ардуино с BMP280 и данные с BMP180 практически совпадают, а вложность DHT22 отличантся с BMP280, тоже на 1-цу. DHT22 по температуре и влажности врет на 1-цу.
Подправлю не BMP280, а BMЕ280.
Проверил секунды и с секундами тоже все отлично. Так что, hector, ищите причину в вашем "железе".
Аватара пользователя
ksa69
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Ср фев 02, 2011 16:22:32

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

Сообщение ksa69 »

Genri5 писал(а):Единственный недостаток, который я заметил - это расхождение показаний температуры датчиков DHT22, BMP180. Хотя они лежат рядом, температура BMP180 точнее на градус. Я собрал еще портативные часы на ардуино с BMP280 и данные с BMP180 практически совпадают, а вложность DHT22 отличантся с BMP280, тоже на 1-цу. DHT22 по температуре и влажности врет на 1-цу.
DHT22-- невысокая точность по температуре, температуру надо ds1820 измерять, это первое. По влажности Вы так вообще хотите того, чего в принципе быть не может-- DHT22 по даташиту влажность +-5%RH -- это означает, что плюс-минус 5 единиц. А вы хотите получить, то на что этот датчик в принципе не способен.
Аватара пользователя
hector
Грызет канифоль
Сообщения: 251
Зарегистрирован: Сб янв 23, 2016 10:30:29

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

Сообщение hector »

Genri5 писал(а): Проверил секунды и с секундами тоже все отлично. Так что, hector, ищите причину в вашем "железе".
Понятно, что в "железе", DS3231 с китайских модулей: https://ru.aliexpress.com/item/DS3231-A ... 6237e7875c
Верно, китайцы их понятия не имеют настраивать. Или может ихняя калибровка "сидит" в микросхеме памяти, что присутствует на платке?
В любом случае, точность этих DS3231 - никакая .. :(
Такое впечатление, что кварцевый генератор внутри них абсолютно некалиброван.
У меня есть электронные часы на PIC16F628, с возможностью подстройки хода до 0.1 сек в сутки. Так вот они идут намного точнее - за пол-года расхождение 1..2 сек (после подстройки).
Может есть какой алгоритм разовой настройки DS3231 на точный ход? :?
Вообщем, вот с этого времени: http://radiokot.ru/forum/viewtopic.php? ... 0#p2662790
ушли вперед на 97 секунд, т.е. убегают вперед на 12 секунд в месяц.
Многовато для DS3231 - верно?

У кого еще какая статистика по китайским DS3231?
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Привет всем. Выложу здесь результаты своих мучений. Просил добавить в проект поддержку Dfplayer но очень умные и знающие промолчали :)) . Проект только для атмега328. Меню яркость теперь выглядит так :
1- яркость
2- громкость (0-30)
3-мелодия будильника (1-10)
4-опции бегущей строки (1-отключена, 2-дата, 3-датчики, 4-как и было по умолчанию)
5-интервал строки (1-99)
6-вариант часового сигнала (1-3)
отредактированный епром в папке my eeprom.
Вот и всё, может кому нужно такое. Если есть ошибки так я лузер :( .

Ссылка на скачивание
https://yadi.sk/d/g4BK6nr4xiyMk
https://cloud.mail.ru/public/FtKz/WWBA3wwca

Добавлено after 8 hours 25 minutes 19 seconds:
Побеспокою Вас ешё раз. Объясните пожалуйста про маски в display.h. Хочу сделать меню с прокруткой а то сокращения мне не нравятся но не пойму как организован вывод. Когда бежит строка нету цифр. Подскажите как одновременно вывести строку с цифрами и почему лесенка получается как на видео видео https://youtu.be/RlPTvLq1UL0. Используется маска MASK_BR_UNITS.
Объясните пожалуйста, просто взялся курочить ваше творение для самообразования.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Есть три основных буфера:
1. fb[32]. Это - именно то, что отображается (сканируется) в данный момент. Для удобства вращения (подстройки под конфигурацию индикаторов) этот буфер ещё конвертируется в fbRaw, но это не суть важно.
2. fbStr[250]. В этот буфер мы заносим текст (строку), который хотим отобразить.
3. fbNew[32]. Это вспомогательный буфер.

Что можно сделать:
1. Занести "картинку", в том числе текст (matrixFbNewAddString(),matrixFbNewAddStringEeprom() ) в буфер fbNew, после чего по маске вызвать функцию matrixSwitchBuf(mask, effect). При этом данные, соответствующие маске, из fbNew попадут в fb с нужным эффектом вертикальной прокрутки. Достигается это постепенным переносом данных из fbNew в fb и вызовом matrixWrite().
2. Занести текст (строку) в буфер fbStr (matrixScrollAddString(), matrixScrollAddStringEeprom(), load*String() и т.п.) и дать команду matrixHwScroll(MATRIX_SCROLL_START) (обычно через вызов startScroll(type)). При этом fbNew очистится, и в него справа начнут постепенно по прерыванию набиваться данные из fbStr() с фиксацией картинки через matrixWrite(). Получается эффект прокрутки строки.

Режим частичной прокрутки не предусмотрен.

Если его всё же нужно реализовать, то менять надо display.c:
- void startScroll(uint8_t type) - очищать "разлетанием" не всю строку (поднулить в MASK_ALL первые биты, чтобы оставалось число-параметр слева)
- matrixHwScroll() - аналогично, не очищать весь fbNew
- ISR (TIMER2_OVF_vect) - сдвиг делать не от i = 0.

Тогда, теоретически, можно будет добиться того, что строка будет прокручиваться частично, оставляя слева нетронутое число.

Возможно, проще будет начать в обратном направлении - от прерывания таймера. Завести некоторый глобальный флаг (переменную), означающую, нужно ли частично или полностью прокручивать строку. Например, при scrollPos = 0 - будет обновляться при прокрутке вся строка, а при scrollPos = 10 первые 10 знакомест прокручиваться не будут. А затем, на основании этого флага, и прочие маски-очистки учитывать.

P. S. Попробовал реализовать вышесказанное - вроде как работает. Во вложении патч, в котором эксперимента ради строка с датой выводится в "частичном" режиме.
Вложения
part_scroll.patch.7z
(879 байт) 186 скачиваний
Аватара пользователя
phoenix75
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср янв 13, 2016 13:52:42
Откуда: Клин

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

Сообщение phoenix75 »

Спасибо за ответ. Буду потихоньку разбираться :)) .
Genri5
Открыл глаза
Сообщения: 42
Зарегистрирован: Чт авг 23, 2012 08:19:06

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

Сообщение Genri5 »

hector писал(а):
Genri5 писал(а): Проверил секунды и с секундами тоже все отлично. Так что, hector, ищите причину в вашем "железе".
Понятно, что в "железе", DS3231 с китайских модулей: https://ru.aliexpress.com/item/DS3231-A ... 6237e7875c
Верно, китайцы их понятия не имеют настраивать. Или может ихняя калибровка "сидит" в микросхеме памяти, что присутствует на платке?
В любом случае, точность этих DS3231 - никакая .. :(
Такое впечатление, что кварцевый генератор внутри них абсолютно некалиброван.
У меня есть электронные часы на PIC16F628, с возможностью подстройки хода до 0.1 сек в сутки. Так вот они идут намного точнее - за пол-года расхождение 1..2 сек (после подстройки).
Может есть какой алгоритм разовой настройки DS3231 на точный ход? :?
Вообщем, вот с этого времени: http://radiokot.ru/forum/viewtopic.php? ... 0#p2662790
ушли вперед на 97 секунд, т.е. убегают вперед на 12 секунд в месяц.


Многовато для DS3231 - верно?

У кого еще какая статистика по китайским DS3231?
Если у тебя точность никакая - то не надо писать что все DS3231 такие. У менея таких как у тебя "12 секунд в месяц" нет - пол секунды. :-) И то может я так засинхронизировал при установке времени.
Модуль DS3231 на ардуинке с BME280 тоже работает отлично.
Аватара пользователя
shtvgomel
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Пн сен 05, 2016 01:35:34
Откуда: gomel

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

Сообщение shtvgomel »

Подскажите пожалуйста какой использовать кварц под МК для программирования и если можно, какие фьюзы, тут на форуме написаны какие, в калькуляторе фьюзов они не сходятся по частоте кварца (внешнего).
И ещё не могу определиться какую прошивку использовать, я делал по схеме, использовал готовую плату с Китая на max7219 (3 платы), а прошивки по названию вроде бы подходят любые (не имею возможно часто программировать вот и прошу).
Вложения
Снимок экрана (76).png
(2.54 КБ) 656 скачиваний
кринж
Ответить

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