А есть ли настройки скорости бегущей строки, интервала ее запуска? Что выводить или нет. Вот год как бы и не нужен.
Будет ли поддержка датчика света, влажности и давления? В применении к китайской плате.
Еще вопрос: можно ли сделать так чтобы когда меняются две или больше соседние цифры, они менялись не одновременно, а с некоторой задержкой относительно друг друга. Типа волны. Или люфта в механическом спидометре.
Ну и классно было бы всякие памятные даты добавить. Как в СуперКлок.
А так все работает. Спасибо.
Последний раз редактировалось shura2000 Пт май 29, 2015 16:38:45, всего редактировалось 1 раз.
Присоединяюсь к предыдущему вопросу. Хотелось бы датчик давления bmp085 и влажности типа dht22. Автоматическое изменение яркости вроде как и не особо нужно. У меня кучка часов и на них только ручная регулировка, вполне хватает))
Ну и классно было бы всякие памятные даты добавить. Как СуперКлок.
А так все работает. Спасибо.
Мне кажется что для памятных дат надо вводить поддержку флэшки и добавлять даты в файл на флэшку с компа. Я собирал себе wise clock 3 на двухцветной матрице 32*16. Там правда мега помощнее стоит.
Если текст писать в код, то не будет возможности его редактировать.. Хотя если часы для себя, то можно и поредактировать. Кстати вроде порты RX TX свободы на китайской плате, можно GPS модуль прикрутить и синхронизировать часы по сигналу со спутника. Я так делал, когда лень было добавлять кнопки и меню настройки часов. Нажал кнопку и время выставилось, главное чтоб спутники поймал приемник.
можно ли сделать так чтобы когда меняются две или больше соседние цифры, они менялись не одновременно, а с некоторой задержкой относительно друг друга. Типа волны. Или люфта в механическом спидометре.
Это электронные часы, в них люфта нет . На самом деле, это довольно сложно реализовать. Много кода ради фактически ненужной функции.
shura2000 писал(а):
Будет ли поддержка датчика света, влажности и давления?
BMP180 из Китая уже прибыли, DHT22 только-только заказаны. В любом случае, у меня эти датчики будут только через пару недель. Но попытаюсь реализовать хотя бы BMP180, так как I²C-протокол в проекте уже реализован, и добавление пары функций для снятия данных не должно сильно увеличить размер прошивки. А вот DHT22 уже по своему собственному протоколу работает, так что сомневаюсь, что в ATmega8 его реализация влезет. А переходить на МК пожирнее мне пока не хочется.
shura2000 писал(а):
А есть ли настройки скорости бегущей строки, интервала ее запуска? Что выводить или нет. Вот год как бы и не нужен.
Только если в исходниках править. Ничего сложного. Пробуйте.
shura2000 писал(а):
Ну и классно было бы всякие памятные даты добавить.
Тогда нужно либо поддержку флешки + FAT реализовывать, либо ту же I²C EEPROM дополнительно подключать. Кстати, на китайских часовых модулях (как DS1307, так и DS3231) они уже есть. Плюс какая-то программа, позволяющая сформировать соответствующий файл EEPROM. В общем, возни много, и для ATmega8 тоже слишком сложно.
В общем реализовывать планирую (если получится): BMP180 (почти наверняка), DHT22 (уже сомнительно, что влезет), фотодатчик (кстати, подскажите, какой можно использовать). Но нескоро, ничего из этого у меня на руках пока нет.
Можно поменять местами "в комнате" и температуру. А то цифры быстро проскакивают и успеваем прочитать только "в комнате". И слегка уменьшите скорость скролинга. Или еще лучше сделать регулируемые параметры. Сам бы сделал, но полный чайник. А в чужом коде разбираться очень сложно. Да еще и без русских коментов.
Вопрос к уважаемому WiseLord. А как программа различает датчики температуры? У меня на двух вариантах часов правильное определение, а на третьем почему то наоборот )))). Версия с украинскими сообщениями.
Это обычный текстовый файл. Любым текстовым редактором можно открыть (во времена пользования windows я notepad++ использовал). Любым, кроме стандартного блокнота, который не умеет нормально открывать текстовые файлы. В eeprom.h прописаны адреса всех параметров, по которым уже hex-редактором в файле eepbom_<lanb>.bin можно поменять нужные параметры.
Stail564 писал(а):
А как программа различает датчики температуры?
У каждого из датчиков есть свой уникальный номер, прошитый на заводе при изготовлении. Программа осуществляет поиск всех датчиков на шине и выстраивает их "по алфавиту": датчик с меньшим номером - это всегда комнатный, с большим - наружный. Поэтому либо меняйте сами датчики местами (проще всего), либо в eeprom.bin поменяйте местами текстовые метки для них (тогда первой будет выводится наружная температура). Либо в коде поменять порядок вывода.
shura2000 писал(а):
А в чужом коде разбираться очень сложно. Да еще и без русских коментов.
Правильно выбранные имена функций и переменных вполне сами по себе способны заменить комментарии. Та же функция вывода строки температуры: Спойлер
Код:
static void loadTempString(void) { uint8_t i;
for (i = 0; i < getDevCount(); i++) { if (i > 0) matrixLoadString(", "); matrixLoadString(mkNumberString(ds18x20GetTemp(i), 4, 1, ' ')); matrixLoadStringEeprom(txtLabels[LABEL_DEGREE]); matrixLoadStringEeprom(txtLabels[LABEL_TEMP1 + i]);
}
return; }
Не нужно быть гением в программировании, чтобы понять, что здесь происходит. И комментарии в стиле (a = 3; // Присваиваем a значение 3) здесь абсолютно излишни. Ну и не на русском же языке их писать, в самом деле.
P.S. Кстати, возможно, кому-то покажется интересной следующая информация. Термодатчики в проекте можно подключать двумя способами:
1. Обычное питание (как на схеме в статье) - 1 вывод на земле 3 вывод на питании, 2 вывод является входом/выходом датчика и подключается к МК, при этом нужен 4.7кОм подтягивающий резистор с неё на питание.
2. Паразитное питание - всё точно так же, только 3 вывод не на питании, а тоже на земле. В этом случае для подключения внешнего датчика достаточно двух проводов - земля и сигнал/питание.
Никаких изменений в коде не нужно, оба варианта должны работать одновременно.
P.P.S. Небольшое обновление прошивки. Новых функций нет, только оптимизации кода (уменьшен на ~200 байт размер прошивки). В ближайшие дни буду ещё заниматься оптимизацией кода, чтобы освободить место в прошивке для датчиков давления/влажности/освещённости.
все отлично работает. тыкните мне где поправить скорость скроллинга строки. а то на 16 МГЦ на меге328 строка пролетает так что не заметишь. ну и еще покажите где поправить скорость эффекта разлетания цифр. скорость строки подрегулировал _delay_ms(50) вписал в процедуру скроллинга. хотя мож как-то по-другому можно, а не через этот костыль? UPD: появился глюк - выводится бегущей строкой дата, затем появляется время на доли секунды и опять пропадает разлетанием и снова выводится бегущей строкой дата... со строкой температуры то же самое..
https://github.com/WiseLord/matrixclock ... #L244-L280 Здесь настраивается аппаратный таймер для прокрутки строки. Устанавливается максимально возможный делитель 1024. На 8МГц это даёт 8000000/1024/256 = 30 герц. Итого, (вторая функция) сдвиг происходит 30 раз в секунду. В Вашем случае, на 16 МГц - вдвое быстрее.
Попробовать уменьшить скорость прокрутки вдвое можно, например, производя сдвиг не каждое прерывание, а с пропусками. Можно переписать обработчик прерывания ISR (TIMER2_OVF_vect) как-то так:
Код:
if (scrollMode) { int8_t i;
static uint8_t a; if (++a >= 3 a = 0;
if (a == 0) { for ... { ... } } }
То есть переменная a крутится по кругу -0-1-2-0-1-2-, а сдвиг происходит лишь каждый третий раз (при a равном нулю).
Задержка эффекта смены цифр (и эффекта разлетания) производится в том же файле, в функции matrixSwitchBuf(). По умолчанию каждый сдвиг из всего восьми происходит через 20мс. Можно просто увеличить это число (для всех эффектов), а можно для конкретного эффекта рядом с этой задержкой добавить что-то вроде if (effect == MATRIX_EFFECT_SCROLL_BOTH) _delay_ms(10);
ок. сейчас попробую. а то delay на 45мс в обработчике прерывания как-то не так смотрится. а предделитель уже на максимуме и так стоит 1024. UPD: все заработало. спасибо
- Вместо вычитывания уровня яркости для каждого часа сейчас он рассчитывается по формуле.
- Добавлена поддержка фоторезистора для измерения уровня яркости в зависимости от внешнего освещения.
- В настройках сейчас задаётся только максимальный (для 13..15 часов) уровень яркости, используемый в случае отсутствия фоторезистора.
Это сегодня я выбрался в магазин радиодеталей и купил-таки фоторезисторы. У меня используется MJ3516, но должен подойти любой подобный, с сопротивлением в освещённом состоянии 5..10 кОм.
Фоторезистор подключается между питанием и соответствующим выводом. Для варианта на HT1632 используется вывод ADC7, для варианта на MAX7219 - вывод PC0(ADC0). Между этим же выводом и землей подключаем резистор 10кОм.
Ещё хорошо бы зашунтировать фоторезистор обычным резистором на 1МОм в параллель, иначе при очень низкой освещённости у фоторезистора сопротивление составляет несколько мегаом, и система может воспринять это как отсутствие фоторезистора вообще (АЦП при измерении получит значение 0, из-за наличия постоянного резистора 10кОм).
В общем, схему лучше всего доработать так: 1. Ставим резистор 10кОм между входом АЦП и землей. 2. В случае использования датчика освещённости ставим его и параллельно ему резистор 1МОм между входом АЦП и питанием. 3. Между выводом AREF и землей ставим конденсатор 0.1мкФ (на китайской плате с HT1632 (вариант PRO) он уже установлен).
Из дополнительных приятностей - вследствие выбрасываня кода почасовой настройки яркости прошивка "похудела" ещё на ~150 байт, несмотря на увеличение функционала. Так что шансы добавления поддержки BMP180/DHT22 увеличиваются.
хм.. только заметил что дни недели отстают на один, т.е. вместо воскресенья суббота и т.д. это только у меня так или глюк? настроек дня недели че-то в меню не нашел да и в ds-ке вроде календарь встроенный.. UPD: поправил в eeprom текст. теперь нормально выводятся дни недели. файлы с расширением bin че-то не добавляются на сайт. просто смените на zip на bin. это не архив я выложил
Нужно было просто настроить дату еще раз, чтобы день недели пересчитался заново. А так Вы просто создали eeprom.bin, годный только для Вашей ситуации - но только до первой перенастройки даты.
Разве в RTC нет встроенного календаря? И как настроить дату? Просто я в еепром заметил, что неделя с воскресенья начинается и переписал чтобы была с понедельника... Можно было конечно при инициализации часов вписать дату по умолчанию... Вобщем я не понял что как настроить. Подскажите пожалуйста
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения