Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
-
SeaWolf999
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Чт май 07, 2015 07:55:26
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Я правильно понял что вот этот кусок
Например: на часах 18:55, будильник 5:20
М _тек = 18 * 60 + 55 = 1135
М_буд = 5 * 60 + 20 = 320
Будет выглядеть примерно так верно?
Ht=bcd2bin(myhour);
Mt=bcd2bin(mymin);
St=Ht*60+Mt;
HAl1=bcd2bin(al1_h);
MAl1=bcd2bin(al1_m);
SAl1=HAl1*60+MAl1;
Например: на часах 18:55, будильник 5:20
М _тек = 18 * 60 + 55 = 1135
М_буд = 5 * 60 + 20 = 320
Будет выглядеть примерно так верно?
Ht=bcd2bin(myhour);
Mt=bcd2bin(mymin);
St=Ht*60+Mt;
HAl1=bcd2bin(al1_h);
MAl1=bcd2bin(al1_m);
SAl1=HAl1*60+MAl1;
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
всем привет
как добавить анимацию при смене информации. в часах есть плавное тушение и зажигание индикатора, но этого маловато хотелось больше.
объясните или маленький пример покажите, очень хочется сделать.
как добавить анимацию при смене информации. в часах есть плавное тушение и зажигание индикатора, но этого маловато хотелось больше.
объясните или маленький пример покажите, очень хочется сделать.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
А какую анимацию можно сделать на сегментных индикаторах? Появление цифр посегментно? Да и памяти в мега 8 несколько процентов остается свободной насколько помнится.
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
например как тут http://sxem.org/2-vse-stati/25-chasy/12 ... -termometr
а память можно освободить убрав например перевод времени с лета на зиму
а память можно освободить убрав например перевод времени с лета на зиму
Последний раз редактировалось Serzh2000 Пт окт 19, 2018 19:17:26, всего редактировалось 1 раз.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Я бы такую анимацию за сбой в работе часов больше бы воспринял. Как наверное и 99% пользователей часов.
- ВНН
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Сб дек 13, 2008 09:03:43
- Откуда: г.Советская Гавань
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Согласен с Martin76 .
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
С уважением ВНН.
- samand587
- Поставщик валерьянки для Кота
- Сообщения: 2311
- Зарегистрирован: Вт фев 21, 2017 18:59:21
- Откуда: Седой Урал
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
например как тут http://sxem.org/2-vse-stati/25-chasy/12 ... -termometr
Я делал их. Приедается постоянное мельтешение
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Всякие визуальные "плюшки" хороши для конкуренции и в первую очередь с китайскими часами.
Я плавную смену показаний делал именно для сглаживания смены показаний особенно выраженной при боковом зрении.
Высвободить память можно. И в первую очередь для функции запрещающей в ночное время смену показаний. Оставить индикацию только времени.
Я плавную смену показаний делал именно для сглаживания смены показаний особенно выраженной при боковом зрении.
Высвободить память можно. И в первую очередь для функции запрещающей в ночное время смену показаний. Оставить индикацию только времени.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
уважаемый Danko часы отличные, особенно комментарии в программе по ним я кое что стал понимать в программировании (стр 127)
сейчас осень делать особо нечего вот и хотел собрать еще одни часики, но с "плюшечкой"
мне бы какой пример как это делается там вырисовывание сверху вниз или еще как. вообщем отчего бы оттолкнуться
сейчас осень делать особо нечего вот и хотел собрать еще одни часики, но с "плюшечкой"
мне бы какой пример как это делается там вырисовывание сверху вниз или еще как. вообщем отчего бы оттолкнуться
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Serzh2000 писал(а):...
Вам не пример, нужен, а принцип. Постановка задачи. ТЗ. Представить как это может делаться. Очевидно, что нужно периодически что то делать, чтобы получить световой эффект. Возьмите за основу автомат световых эффектов. Бегущие огни, бегущая тень. Настраивается таймер, к примеру на 200 мс. И каждые 200 мс сдвигать массив. Возьмём эффект, когда гаснут сегменты. Нужен массив с маской всех сегментов. И пропускаем через эту маску сегменты которые выводим на дисплей. Скажем, нужно гасить сегмент А, значит сбрасываем бит сегмента А в маске, накладываем по И массив сегментов и полученный результат выводим на дисплей.
-
SeaWolf999
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Чт май 07, 2015 07:55:26
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Народ помогите с функцией оставшегося времени до срабатывания будильника Danko помог с математическими расчетами как теперь это все за программировать вот что сделал я:
// --------- что у нас будет в экранном буфере ? ------- (индикация отсрочки) ----------
void view_del(void) {
if (indicate == IND_CLOCK) { // день - месяц
digit_out[0] = mydel_h >> 4;
digit_out[1] = mydel_h & 0x0F;
digit_out[2] = mydel_m >> 4;
digit_out[3] = mydel_m & 0x0F;
}
} //----------
// --------- Расчет времени отсрочки ----------
void otsrochka(void){
unsigned char Ht, mydel_h, mydel_m, Mt, St, HAl1, MAl1, SAl1, delta, H_delta, M_delta;
Ht=bcd2bin(myhour);
Mt=bcd2bin(mymin);
St=Ht*60+Mt;
HAl1=bcd2bin(al1_h);
MAl1=bcd2bin(al1_m);
SAl1=HAl1*60+MAl1;
if (St>SAl1) SAl1=SAl1+(60*24);
delta=St-SAl1;
H_delta=delta/60;
M_delta=delta%60;
mydel_h=bin2bcd(H_delta);
mydel_m=bin2bcd(M_delta);
}//----------
В итоге на экран выводятся нули как правильно построить функцию
Заранее благодарю кто откликнется.
// --------- что у нас будет в экранном буфере ? ------- (индикация отсрочки) ----------
void view_del(void) {
if (indicate == IND_CLOCK) { // день - месяц
digit_out[0] = mydel_h >> 4;
digit_out[1] = mydel_h & 0x0F;
digit_out[2] = mydel_m >> 4;
digit_out[3] = mydel_m & 0x0F;
}
} //----------
// --------- Расчет времени отсрочки ----------
void otsrochka(void){
unsigned char Ht, mydel_h, mydel_m, Mt, St, HAl1, MAl1, SAl1, delta, H_delta, M_delta;
Ht=bcd2bin(myhour);
Mt=bcd2bin(mymin);
St=Ht*60+Mt;
HAl1=bcd2bin(al1_h);
MAl1=bcd2bin(al1_m);
SAl1=HAl1*60+MAl1;
if (St>SAl1) SAl1=SAl1+(60*24);
delta=St-SAl1;
H_delta=delta/60;
M_delta=delta%60;
mydel_h=bin2bcd(H_delta);
mydel_m=bin2bcd(M_delta);
}//----------
В итоге на экран выводятся нули как правильно построить функцию
Заранее благодарю кто откликнется.
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
вот какая плюшка получилась.
с массивами не получается. не очень понимаю... гасить скажем сегменты ладно можно все по очереди , а как зажигать откуда узнать какой в индикаторе сегмент должен гореть скажем 2 (A+B+G+E+D) или другая цифра 1 (B+C) ?
с массивами не получается. не очень понимаю... гасить скажем сегменты ладно можно все по очереди , а как зажигать откуда узнать какой в индикаторе сегмент должен гореть скажем 2 (A+B+G+E+D) или другая цифра 1 (B+C) ?
- Вложения
-
- часы с рюшкой.rar
- (170.44 КБ) 395 скачиваний
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Отличный проект, спасибо Danko за "открытый код". Собрал часы в машину, для себя добавил вольтметр. Неделю потратил на чтение 130 страниц, но так и не прояснил вопрос про коррекцию в выключенном состоянии. Пару раз Danko упоминал про такую коррекцию, но вот сделал ли? Кто-нить кроме меня задавался таким вопросом?
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Для коррекции DS1307 придется заменить на M41T56.
M41T56 почти полностью совместима с DS в лучшую сторону. Там есть регистр коррекции. Изменяя содержимое регистра можно добавлять или удалять импульсы идущие от генератора к счетчикам.
DS1307 как и ее аналоги делит частоту кварца 32768 Гц на 32768 и секундные импульсы идут на счетчик секунд, в вот в M41T56 можно к 32768 импульсам добавить несколько (если часы отстают) или из последовательности импульсов удалить несколько импульсов - если спешат.
Правда эта функция мной реализована только в часах на мега168. Те которые на LCD.
т.к. в мега168 памяти больше, то в программе часов есть функция автораспознавания микросхем RTC.
M41T56 почти полностью совместима с DS в лучшую сторону. Там есть регистр коррекции. Изменяя содержимое регистра можно добавлять или удалять импульсы идущие от генератора к счетчикам.
DS1307 как и ее аналоги делит частоту кварца 32768 Гц на 32768 и секундные импульсы идут на счетчик секунд, в вот в M41T56 можно к 32768 импульсам добавить несколько (если часы отстают) или из последовательности импульсов удалить несколько импульсов - если спешат.
Правда эта функция мной реализована только в часах на мега168. Те которые на LCD.
т.к. в мега168 памяти больше, то в программе часов есть функция автораспознавания микросхем RTC.
Код: Выделить всё
//---------- распознавание микросхемы RTC ----------
tmp = rtc_read(62); // ячейка в которой хранится тип распознанной микросхемы
switch (tmp) {
// если ранее микросхема была определена как DS1307
case 0x0F:
type_RTC = DS1307;
break;
// если ранее микросхема была определена как M41T56
case 0xF0:
type_RTC = M41T56;
break;
// если микросхема ранее не была распознана
default:
save_set_reg = rtc_read(0x07); // прочесть (сохранить) значение регистра управления
rtc_write(0x07, 0b01000000); // установить бит 6 (в M41T56 это бит "FT", а в DS1307 пусто)
tmp = rtc_read(0x07); // прочесть
if (tmp) { type_RTC = M41T56; rtc_write(62, 0xF0); } // если бит 6 установлен
else { type_RTC = DS1307; rtc_write(62, 0x0F); } // у DS1307 бит 6 читается как 0
rtc_write(0x07, save_set_reg); // восстановить содержимое регистра управления
}
//----------
- Вложения
-
- расчеты для M41T56.xls
- (30 КБ) 271 скачивание
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Спасибо за подробный ответ. Это получатся уже совсем другие часы. Придется смириться с неточностью, подобрав кварц с минимальной погрешностью.
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
В Советских электронных часах не было цифровой коррекции (за исключением наручных Электроника-5), но зато был подстроечный конденсатор.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Подстроечный конденсатор - тоже выход.
Но без термокомпенсации кварца в автомобильных часах, наверное, высокой точности хода не добиться.
Spark М300 не оборудован указателем температуры, что и сподвигло на сборку данных часов.
Установил 3 датчика - t в салоне, охлаждающей жидкости и наружнего воздуха.
Номер датчика индицирует RGB светодиод с порта D (4,5,6).
В режиме "без десятых долей" вместо округления засветил точку при десятых >= 0,5гр.
Вольтметр кажет средне-арифметическое от 64-х замеров.
Яркость зелёного индикатора при солнечном освещении в машине маловата (динамика, ОА, 0.56', в анодах ключи, в сегментах 220 Ом, без ULN).
Но без термокомпенсации кварца в автомобильных часах, наверное, высокой точности хода не добиться.
Spark М300 не оборудован указателем температуры, что и сподвигло на сборку данных часов.
Установил 3 датчика - t в салоне, охлаждающей жидкости и наружнего воздуха.
Номер датчика индицирует RGB светодиод с порта D (4,5,6).
В режиме "без десятых долей" вместо округления засветил точку при десятых >= 0,5гр.
Вольтметр кажет средне-арифметическое от 64-х замеров.
Яркость зелёного индикатора при солнечном освещении в машине маловата (динамика, ОА, 0.56', в анодах ключи, в сегментах 220 Ом, без ULN).
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
У китайцев легко можно купить изумрудно-зеленые индикаторы (PG) от 0,36 до 5 дюймов, с яркостью как у белых.
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Видимо, не умею искать - на запрос "pure green 0.56" выходит с десяток результатов, в основном продают партиями
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)
Уважаемый Danko.
Мне понравилась Ваша мысль
потому как раним утром приоткрыв глаз охото увидеть время и перевернувшись на другой бок еще поспать.....
программист из меня не важный
, помогите, что куда вставить в коде 
Мне понравилась Ваша мысль
И в первую очередь для функции запрещающей в ночное время смену показаний. Оставить индикацию только времени.
потому как раним утром приоткрыв глаз охото увидеть время и перевернувшись на другой бок еще поспать.....
программист из меня не важный
