Все спаял и уложил в корпус. И случайно получился такой приятный момент. изначально, по задумке 5 мм зеленые светодиоды в сегменты, но в наличии их не оказалось в достаточном количестве и я решил будет белый циферблат (их у меня много )
белый цвет цифр мне не понравился, залепил их зеленым скотчем, и накрыл тетрадочным листом, чтоб не видно было скотча.
Красиво, спокойный ярко-зеленый цвет циферок.
Получились часы как у всех....... на глаза попался оранжевый приклеил, ёёёёёёёёёёёёёё красота!!!
Черный корпус, крупные сочно-яркие оранжевые цифры как морковка !!!!!
а с другой стороны надоедят, схожу в магазин куплю серо-буро-малиново-вишнево-персикового цвета скотч и будет другой цвет у циферок.
осталось нарисовать переднюю панель, там над кнопочками название, циферки обвести, абстракцию ,что б белого не было потом в школе на цветном принтере распечатаю и вместо клетчатого листа.
и если нетрудно объясните почему в часах такой конфликт яркости с датчиками это из-за подключения по трем проводам кнопок пошло все на наперекосяк или от универсальности подключения датчиков
Нужно использовать аппаратный ШИМ, и управлять общими анодами или катодами. У вас динамика, вывода аппаратного ШИМ-а нет, значит программный ШИМ, а он всегда чреват нюансами. Как бы сделал я: либо расширение ввода-вывода (регистры) , в этом случае высвобождается вывод аппаратного ШИМ-а. либо специальную микросхему, которая сама рулит индикаторами. В этом случае высвобождаются ресурсы МК и вывод ШИМ.
так то оно так, однако я не силен в написании кода. кто бы взялся написать код под идеальнее часы.
1 Выбор типа индикатора делается удержанием одной из четырех кнопок ("+", "-", "сек", "уст"). это гениально 2 - индикация незначащего нуля в десятках часов 3 - отбрасывание десятых долей при индикации температуры и добавление символа "С" 4 - включение плавной смены показаний 5 - "0" регулятор яркости (фоторезистор) / "1" день-ночь 6 - работа с двумя видами точек 7 - "пятый" разряд (знак температуры) 8 9 - автоперевод стрелок лето/зима (0 - отключено, 1 - включено т.е. по умолчанию включено) а - максимальный уровень яркости (от 10 до 200) и минимальный уровень яркости если вкл день ночь будильник 1 по дням недели звенит 1 мин (чтобы не будил по выходным) будильник 2 по дням недели, продолжительность 01-99 ( подключить можно не только унылую открытку,а и плеер мп-3 или если релюшку то FM приемник или телик или .............
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
я так понимаю вот этой переменной devices=w1_search(0xf0,rom_code);
devices serch - переводится как- поиск устройств. Название переменной говорит само за себя, т.е. сколько найдено температурных датчиков. В момент старта количество найденных датчиков выводится после "Fnd " (От слова Find - находить)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
for (i=0;i<devices;i++) { temperature=ds18x20_temperature(&rom_code[i][0]); if (temperature!=-9999){yarkost_down(); view_term(); yarkost_up();} delay_200ms(tt3); } }
правда если так написать то перед тем как показать температуру где то 2 секунды темный экран. почему? так долго выщитывается температура, да? может кто поумнее меня напишет
Основная проблема этого проекта - опрос температурного датчика. 1-wire протокол с жесткими времянками. А также вся программа в целом. Выполнение всех участков программы от и до, вдобавок задержки delay, который тормозят МК на все время выполнения временных интервалов. То есть, если задержка delay_ms (200) - это значит, что микроконтроллер тупо считает такты все 200 мс.
Это лечится двумя вариантами. Статический режим дисплея, а это значит, что нужны сдвиговые регистры на каждый разряд. Либо дисплей должен быть самостоятельным модулем.
Есть еще один способ, совершенно другой подход в программе. Дробление всех процессов и программные таймеры. А это уже автоматное программирование. Конечные автоматы.
То есть, чтобы получить идеальный проект, легко повторяемый даже малоопытными, создать проект с нуля.
4 микросхемы 7-8 выходов на сегменты 32 ключа ........ очень много деталей
Если обычные индикаторы - то достаточно только микросхем регистров, так как нагрузка сегмент. Общие выводы идут либо напрямую на питание, либо, если есть регулировка яркости на 1 ключ. Если сегменты сборные, значит регистры плюс ULN2803. Такая схема выходит чреватой по количеству комплектующих.
Serzh2000 писал(а):
Цитата:
дисплей должен быть самостоятельным модулем.
это как ????????
Это в случае динамики. Модуль дисплея принимает готовые данные, рулит светодиодами сам. Отдельный МК либо специализированная микросхема.
Serzh2000 писал(а):
Цитата:
Дробление всех процессов и программные таймеры. получить идеальный проект, легко повторяемый даже малоопытными, создать проект с нуля
Выполнение кода кусочками. Это достигается условиями, флагами, состояниями конечных автоматов. То есть: за итерацию основного цикла все программные модули выполняют кусочки, части кода. Итерация основного цикла программы должна с запасом выполняться за системный такт. Скажем, за 1 мс. Пусть у нас такой основной цикл:
Код:
__C_task main (void) { wdt_enable (WDTO_15_MS);
init_sys_timer ();
__enable_interrupt ();
Init_Events ();
while (1) { __watchdog_reset ();
Proc_KBD (); // Обработка кнопок.
Proc_Display ();
Proc_Device (); // Собссно, ядро проекта.
Process_Events (); } }
Вошли в модуль, проверка условий, выполнение кода в зависимости от условий, выход. Никаких долгих циклов.
Это в случае динамики. Модуль дисплея принимает готовые данные, рулит светодиодами сам. Отдельный МК либо специализированная микросхема.
покажете ссылку, мне кажется много переделывать не надо будет в часах
Цитата:
Выполнение кода кусочками. Это достигается условиями, флагами, состояниями конечных автоматов.
а яркость она ж что в часах что на температуре программный ШИМ опрос температурного датчика. 1-wire протокол с жесткими времянками. и все сново-здарова???
В случае аппаратного шима в регистр сравнения загружаем нужное значение, настраиваем таймер на нужную частоту и логику поведения внешнего пина. Как только включили ШИМ, таймер работает самостоятельно.
Дробление всех процессов и программные таймеры. А это уже автоматное программирование. Конечные автоматы.
Preemptive coding это называется. Свои проекты именно так и пишу, даже простые, но скорее чисто в силу привычки. Тут же, строго говоря, необходимости в этом нет, поскольку отсутствует одновременная обработка сложного пользовательского интерфейса и объемных массивов данных.
max_yarkost = 64; если ставить цифры меньше 64 то перед сменой показаний на термометр и сразу после смены на мили секунду ярко засвечиваются некоторые сегменты светящихся тускло цифр в ночном режиме.
max_yarkost = 64; если ставить цифры меньше 64 то перед сменой показаний на термометр и сразу после смены на мили секунду ярко засвечиваются некоторые сегменты
1. В библиотечке датчика комментим все cli() и sei()
2. В основном цикле меняем формат опроса датчика, теперь опрашиваем его несколько раз в цикле for() с break если != 0
Теперь температура иногда будет выводиться с задержкой, зато мерцаний больше не будет.
//---------- // temp. conversion time [ms] depending on the resolution static flash int conv_delay[4]={100,200,400,800}; // valid temp. bit mask depending on the resolution static flash unsigned bit_mask[4]={0xFFF8,0xFFFC,0xFFFE,0xFFFF}; //----------
//---------- unsigned char ds18x20_select(unsigned char *addr){ unsigned char i; if (w1_init()==0) return 0; if (addr) { //#asm("cli") w1_write(0x55); //#asm("sei") i=0; do { //#asm("cli") w1_write(*(addr++)); //#asm("sei") } while (++i<8); } else { //#asm("cli") w1_write(0xcc); //#asm("sei") } return 1; } //----------
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения