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

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

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


Аватара пользователя
shura2000
Вымогатель припоя
Сообщения: 613
Зарегистрирован: Пн фев 23, 2015 21:17:29
Откуда: г. Протвино, МО

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

Сообщение shura2000 »

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

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

Сообщение WiseLord »

dt_andrew писал(а):сообщите пожалуйста о результатах
Как и ожидалось, подобного глюка не наблюдается. Выводятся показания одного DS18B20, температуры/давления BMP180, температуры/влажности DHT22 (дефолтный eeprom) бегущей строкой, после чего адекватно отображается время с будильниками. По дате тоже без проблем.

Сколько у Вас, кстати, датчиков подвешено, насколько длинная строка в буфер кладётся?
Реклама
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

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

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

Сообщение WiseLord »

Для очистки совести перед перепаиванием попробуйте ещё на других файлах eeprom этот эффект выловить. Я у себя на белорусском языке проверял.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

Чудеса, загрузил ЕЕПРОМ английский - проблемы с индикацией будильника нет ( 1 час работало)
загрузил ЕЕПРОМ беларусский - проблемы с индикацией будильника нет ( 1 час работало)
аналогично украинский
загрузил снова русский, чудеса! работает уже пол дня все отлично
это я натренировал что ли ЕЕПРОМ :shock:

upd: рано обрадовался, проблемма вновь проявилась через 12 час работы

посмотрел код функции alarmRawWeekday()
не понятны
rawWeekday >>= 1;
rawWeekday |= 0x40; - заметьте это и есть та злощастная 1 которая при определенных ситуациях вылазит

поправил так

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

int8_t alarmRawWeekday(void)
{
	int8_t rawWeekday = 0x00;
	uint8_t i;

	for (i = 0; i <= ALARM_SUN - ALARM_MON; i++) {
//		rawWeekday >>= 1;
		if (*((int8_t*)&alarm.mon + i))
//			rawWeekday |= 0x40;
			rawWeekday |= (1 << i);
	}

	return rawWeekday;
}
идея - устанавливаем 1 только в том дне на который установлено
2 часа полет нормальный - окончательно сообщу завтра когда более суток проработают
в моем варианте - четкая проверка - установлено пишем 1 в соответствующий бит дня недели

upd2:
почти сутки работы - с моими исправлениями глюка не наблюдается
плохо что его отловить не просто, он может проявится и через 5 мин, так и через 12 часов
потестим еще пару дней,
для очистки совести прошил старый вариант - посмотрю когда вылезет

upd3: глюк со старой прошивкой вылез через 25 мин
прошил свою - тестим до понедельника, чтобы сделать окончательно вывод
Реклама
Аватара пользователя
shura2000
Вымогатель припоя
Сообщения: 613
Зарегистрирован: Пн фев 23, 2015 21:17:29
Откуда: г. Протвино, МО

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

Сообщение shura2000 »

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

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

Сообщение WiseLord »

Ничего подобного.

Изображение
dt_andrew писал(а):не понятны
rawWeekday >>= 1;
rawWeekday |= 0x40; - заметьте это и есть та злощастная 1 которая при определенных ситуациях вылазит
В цикле 7 раз (от 0 до 6, от понедельника до воскресенья) делаем сдвиг переменной rawWeekday, изначально пустой, устанавливая 6-й бит при необходимости (0b01000000 = 0x40). В итоге после всех битов понедельник (если будильник заведён) окажется младшим (0b00000001), воскресенье - старшим (0b01000000).
По идее, этот вариант равносилен Вашему. Раньше, кстати, так и было, но теперешний вариант компилируется в более компактный код, поэтому и использован.

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

             сдвиг на 1    добавление 0x40
i=0 => 0x00000000 => 0x00000000 => 0x01000000 (пн+)
i=1 => 0x01000000 => 0x00100000 => 0x01100000 (вт+)
i=2 => 0x01100000 => 0x00110000 => 0x01110000 (ср+)
i=3 => 0x01110000 => 0x01111000 => 0x01111000 (чт+)
i=4 => 0x01111000 => 0x00111100 => 0x01111100 (пт+)
i=5 => 0x01111100 => 0x00111110 => 0x00111110 (сб-)
i=6 => 0x00111110 => 0x00011111 => 0x00011111 (вс-)
                                      вспчсвп
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

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

сейчас уже 3 день с моим кодом проблеммы нет
я не настаиваю - применять или нет - решать вам
Аватара пользователя
shura2000
Вымогатель припоя
Сообщения: 613
Зарегистрирован: Пн фев 23, 2015 21:17:29
Откуда: г. Протвино, МО

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

Сообщение shura2000 »

Значит у меня опять епром глюкнул
masy
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн фев 04, 2008 12:38:54
Откуда: Шахты

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

Сообщение masy »

выложите скрин для понипрог фузоов для меги 8.......
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

пипец, что творится с JY-MCU-3208
после 4 дневной безупречной работы стало при выводе бегущей строкой выводить
"года 23.8 С, температура 737 мм. рт. ст, давление 43.9% КПа влажность"
похоже опять на слет ЕЕПРОМ

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

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

Сообщение WiseLord »

Пробовали FUSE ставить в -U lfuse:w:0x24:m -U hfuse:w:0xd1:m? Т.е., настроить на 8МГц + уровень BODLEVEL=4В?

Я на других своих проектах сталкивался с повреждением EEPROM при отключенном BODLEVEl или с уровнем 2.7В. Суть в том, что когда напряжение питания снимается, есть риск каких-то случайных выбросов сигналов внутри контроллера во время чтения (даже не записи!) EEPROM, которые могут включить цикл записи в EEPROM. Поэтому теперь сразу ставлю этот уровень повыше, чтобы подобные выбросы исключались как можно раньше (уже на уровне 4В контроллер уходит в RESET, до возможного появления этих паразитных сигналов).

А проект этот чувствителен к повреждениям EEPROM, так как там хранятся все текстовые строки. Небольшой сбой - и все они смещаются не пойми как. Зато недостаток этот компенсируется возможностью языки разные использовать.

У себя на вышеуказанных настройках, кстати, я сбоев EEPROM не наблюдаю - ни на MAX7219, ни на HT1632. Хотя выключаю питание каждый день, уходя на работу.
Maxtor62
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Чт авг 29, 2013 10:16:34
Откуда: Иркутск

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

Сообщение Maxtor62 »

dt_andrew писал(а):... стало при выводе бегущей строкой выводить
"года 23.8 С, температура 737 мм. рт. ст, давление 43.9% КПа влажность"
похоже опять на слет ЕЕПРОМ
Было такое при нескольких отключениях и включениях питания. Прошил фьюзы brown-out detection enabled [BODEN] и BODLEVEL=0 brown-out detection level at VСС=4.0 V и сбой EEPROM прекратился.
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

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

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

Сообщение WiseLord »

Интересное дело - утром (воскресенье) будильник разбудил в 7 часов. Хотя вроде не наводил. Проверил - действительно, установлен был на воскресенье. Снял настройку, поставил для контроля режим маленького шрифта (с секундами и днями недели)

Вечером увидел горящую точку в воскресенье, пропавшую после снятия питания. Считывание eeprom показывает, что будильник не был взведён на воскресенье. То есть, на старте будильники вычитываются, а потом уже где-то в ОЗУ происходит сбой. При каких условиях - непонятно, какой-то неуловимый баг. По коду-то всё вроде правильно, но где-то ведь он взводится.

Возможно, какие-то гонки в прерываниях, когда прерывание выдёргивает контроллер на половине текущей операции. Попробую проследить это всё в течение нескольких дней, самому стало интересно.
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

3 день полет нормальный - точка в воскр. не вылазит
размышления - если есть подозрение что при вызове процедуры alarmRawWeekday() происходит какое то прерывание и портит картину в ОЗУ, то может просто поставить
cli() в начале и
sei()
в конце - 2 байта всего
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Может и так. Хотя можно и макрос ATOMIC_BLOCK попробовать.

Я тут другой вариант сейчас тестирую - эту функцию и переменную в ней не int8_t, а uint8_t сделал. По размеру прошивки полностью идентичные получаются, но разница в содержимом их ровно в один байт.

Появилось у меня просто предположение, что пока крутится этот цикл, заполняющий переменную битами - днями недели, может возникнуть прерывание. В прерывании могут поменятся некоторые служебные биты, в том числе, бит C (флаг заёма/переполнения) регистра SREG. После чего, по выходу из прерывания, эта функция продолжает работать в уже несколько изменившихся условиях, и этот флаг может влиять на дальнейшие сдвиги.

Это только предположение, но пока пару часов код с заменой int8_t на uint8_t работает вроде бы без сбоев. Предлагаю Вам тоже проверить такой вариант для статистики. Всё-таки почти 20 байт экономии :).
Вложения
matrixclock_ht1632_atmega8.hex.7z
(8.24 КБ) 232 скачивания
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

ставлю на тест ваш вариант - через пару дней сообщу результат

1 день работы - полет нормальный - тестирую дальше
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

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

Сообщение dt_andrew »

2 день полет нормальный

в плане улучшения функционала мысли
автоповтор на + - кнопки (вроде сами хотели сделать)
переменная в ЕЕПРОМ - коррекции показаний давления - у меня врет на 5 единиц в минус

с точкой будильника похоже можно фиксить и включать в основную прошивку

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

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

Сообщение WiseLord »

У меня тоже 2 дня нормально. Казалось бы, банальная замена int8_t на uint8_t, разница в итоговой прошивке в один байт - а глюка нет. Исправление уже в git.

Коррекцию показаний давления чисто для себя можете и сами пока сделать. Хотя идея, в целом, неплохая, можно выделить ячейки в eeprom для коррекции датчиков.

Кстати, откуда уверенность в занижении на 5мм показаний? Я на narodmon.ru смотрел - мои результаты вроде похожи на то, что у людей в регионе. Кстати, на каком этаже меряете? Каждые 10 метров ведь на 1мм давление падает.
Ответить

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