Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

В принципе можно конечно и вообще без макса, но ...

настраивал некоторое время назад другу комп, так там даже для мыши порта не было не говоря про Ком и ЛПТ, зато 12 шт USB.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
foxit
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт ноя 16, 2007 00:40:17
Откуда: Украина

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение foxit »

Danko писал(а):В принципе можно конечно и вообще без макса, но ...

настраивал некоторое время назад другу комп, так там даже для мыши порта не было не говоря про Ком и ЛПТ, зато 12 шт USB.



Можно переходник USB-RS232 или USB-UART
склепать на той же ATMega8(программный)
или FT232RL(аппаратный).

Посмотри ссылки
http://www.pcports.ru/articles/avr5.php
http://www.pcports.ru/articles/com_1.php
http://microsin.ru/content/category/5/26/44/
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

За ссылки спасибо, но я их видел и даже некоторое время назад одной из них практически воспользовался, и собрал вот такое чудо.
viewtopic.php?f=20&t=23170
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
dorya
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Ср ноя 04, 2009 22:42:45

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение dorya »

Danko писал(а):ПК + USB + тинька2313/45/85 + ИК светодиод
многим покажется лишней тратой денег и времени.

А кому не покажется, можно надеятся на данную реализацию? :)
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

Можно.

У меня из комплектующих есть все.

Только времени маловато.

Первым делом сделаю прошивку с софтовым выбором индикаторов (ОК или АО, с ULN и без неё), а затем займусь остальным.

Схему нужно будет подправить. Нужно освободить выводы внешнего прерывания.
Или без переделки схемы перейти на мега88.

Когда буду на радиорынке посмотрю сколько стоит мега88 и мега168. Последняя будет предпочтительней т.к. работа с ИК-приемником съест еще немного памяти.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение neon-f »

Danko писал(а):Первым делом сделаю прошивку с софтовым выбором индикаторов (ОК или АО, с ULN и без неё)
А выбор как будет, по нажатию и удержанию одной из кнопок во время включения часов?
Danko писал(а):Схему нужно будет подправить. Нужно освободить выводы внешнего прерывания.
Или без переделки схемы перейти на мега88.
Когда буду на радиорынке посмотрю сколько стоит мега88 и мега168. Последняя будет предпочтительней т.к. работа с ИК-приемником съест еще немного памяти.

лучше перейти на другую мегу, чем схему менять. куча народа уже собрали часы, и переделывать печатку не станут. а вот вынуть один контроллер и вставить другой - запросто.
На цену можно тоже особо не смотреть. мега8 - пачка нормальных сигарет, мега 88, 168 - две пачки. Для единичного устройства не критично.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

Дорогие однако Вы курите сигареты :))

Софтовый выбор работы с индикатором будет удержанием кнопки при включении.

Я склоняюсь к мега168 т.к. когда появится ИК-приемник народу захочется поиграться с пультом, а памяти у меги88 будет нехватать. Лучше сразу взять с запасом. Хотя переход с мега88 на мега168 будет не таким болезненным, как переход с мега8 на мега88.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение neon-f »

хотел сегодня понаблюдать как работает коррекция точности хода. Включил индикацию секунд, и стал ждать 00-00-00. Коррекция не сработала. :?
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

neon-f, Вы не любите кошек? Да Вы просто не умеете их готовить :)) :)) :))

Несколько строк из исходника:

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

// ---------- корректировка хода часов ----------
// вычисление (установка) времени в которое часы установить в 00:00:00
if (Znak == 1) {hour_k=0x00; min_k=0x00; sec_k=bin2bcd(Corect);   } // замедлить часы, т.е в 00:00:хх -> 00:00:00   
else           {hour_k=0x23; min_k=0x59; sec_k=bin2bcd(60-Corect);} // убыстрить часы, т.е в 23:59:хх -> 00:00:00 

для визуализации коррекции нужно ждать не 00:00, а 23:59 и тогда Вы увидите как секунды перепрыгнут через значение (если кор.положительная) или когда секунды сбросятся в 00 отсчитав несколько секунд (если кор.отрицательная).

Ну а теперь о новеньком.
Представляю на суд общественности новую прошивку еще более универсальную.

Выбор типа индикатора делается удержанием одной из четырех кнопок ("+", "-", "сек", "уст").
Если быть более точным то не выбор индикатора, а выбор активного 0 или 1 для зажигания сегмента и выбор активного 0 или 1 для зажигания разряда.
"+" - сегмент "0", разряд "0"
"-" - сегмент "0", разряд "1"
"сек" - сегмент "1", разряд "0"
"уст" - сегмент "1", разряд "1"

Все настройки сохраняются в EEPROM меги8. Соответственно настройки можно сразу занести самому в EEPROM отредактировав пару байт.

Но это не все. Все знают о том, что Винда содержит недокументированные функции, и я последовал за стариной Биллом и добавил в часы парочку скрытых настроек.

----------
Далее скрытый текст: :))

номера ячеек EEPROM и их значение (нумерация начинается с нуля):
0 - активный логический уровень для зажигания сегментов
1 - тоже для разрядов
2 - индикация незначащего нуля в десятках часов
3 - отбрасывание десятых долей при индикации температуры и добавление символа "С"
4 - включение плавной смены показаний

для пунктов (ячеек) 2, 3, 4 для активизация - записать 0

т.к. условия проверяются на не ноль, значения ячеек принимаются 0 и любое число. Незапрограммированная ячейка имеет значение 0xFF и будет синонимом "1".

Если ничего не корректировать, то часы работают с активными 1 для сегментов и для разрядов (ULN в сегментах, тр.клюючи n-p-n в разрядах), ноль в десятках часов не показывать и индикация десятых при индикации температуры.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

На выходных подправил программу. Добавил новую функцию.

Теперь для редактирования скрытых настроек (EEPROM) не нужен программатор. Изменение настроек можно производить с помощью дополнительного меню доступ к которому открывается при удержании пятой кнопки (кнопки "К") при включении питания.

Доступны три ячейки EEPROM (2, 3 и 4). Выбор ячейки производится кнопками "+" и "-", изменение состояния ячейки кнопкой "Уст". При нажатии кнопки "Уст" сразу же производится запись в EEPROM.
Последний раз редактировалось Danko Ср мар 31, 2010 10:16:22, всего редактировалось 1 раз.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
gazovik
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт авг 11, 2009 13:18:44
Откуда: курск

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение gazovik »

Давайте подвидем итог по данным ветки :
Желательный вид индикации
Время 23:17
Температура 17.0' ; -17'
Дата 19.03
Несколько пожеланий было высказано по индикации температуры
В виде -17.0' и 17.0',тобиш добавка знака минус
В первом случае доработка только на программном уровне при условии установки 1разрядных индикаторов (не нужную зпт.не разводим)А вот при вводе знака совместимость прошивки меняется
(изминение форматирования вывода)
Хотя внешний вид улучшается ((минус обеих невозможность использования 4хразрядных индикаторов)
DANKO из выше перечисленного видемо нужно предусмотреть
и способы форматого вывода для 4х разрядных (1 точка),2х разрядных (точка и двоеточие) 1 разрядных (минус точка двоеточие)
Вроди все
Удачи

ТАК сделает кто нибудь такую прошивочку ну пожайлуста :))
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

gazovik, а что именно в прошивке (программе) Вас не устраивает или Вы в ветке прочли только то сообщение которое процитировали ?

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

Если Очень нужны две точки как разделитель часов и минут так этот вопрос неоднократно поднимался и если эти точки вопрос принципиальный так может поискать другой проект. Похоже исходники которые я выкладываю вещь никому не нужная и наверное через время я их удалю и буду выкладывать только прошивку.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение neon-f »

Danko писал(а):gazovik,Похоже исходники которые я выкладываю вещь никому не нужная и наверное через время я их удалю и буду выкладывать только прошивку.

не-не-не выкладывай. даже я вчера влез в исходники прошивки (ту что ты правил под мои нужды), и попробовал разобраться. очень подробные и полезные комментарии :beer: Вот этот кусок как я понял отвечает за регулировку яркости???. то что я пометил красным это значение ширины импульса?? Какой диапазон значений, от 00 до FF ?? Если да, то почему 50% = EC, а не 7F(FF/2), а 25%=Е2 а не 3F (FF/4)
Извиняй за такие вопросы, но все мы когда то начинали. у меня есть еще вопросики, но их задам в личке, так как моя прошивка немного отличается от общей, и интересно будет не всем.

void set_yarkost (void) {
unsigned char adc_rez;
adc_rez = read_adc(1);
if (adc_rez >= 128) {
TCCR2=0x00; // остановить таймер2
PORT_100HZ = 0;
} else {
TCCR2=0x07; // запустить таймер2
}
if ((adc_rez >= 64) && (adc_rez < 128)) {
#asm("cli")
OCR2 = 0xEC; // яркость 50%
#asm("sei")
}
if (adc_rez < 64) {
#asm("cli")
OCR2 = 0xE2; // яркость 25%
#asm("sei")
}
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

для всех: речь идет об прошивке (программе) заточенной под часы со статической индикацией.

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

// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void) {
    TCNT2=0xD9;
здесь я опусти комментарии. Попробую восстановить пробел.

на вход таймера/счетчика поступают импульсы с частотой 3906 Гц, для того, чтобы прерывания таймера/счетчика возникали с частотой 100 Гц нужно рассчитать делитель.

3906 / 100 = 39

т.е. счетчик должен отсчитывать 38 импульсов до переполнения

255 - 38 = 217 (0xD9)
таймер счетчик начинает считать не с 0х00, а с 0xD9 и заканчивает счет значением 0xFF

вот и получается, что 50% это не половина от диапазона 0...255, а половина от диапазона 217...255

вроде бы все.

Я начал пользоваться калькулятором таймеров и по сему стал меньше комментировать часть программы работы с таймером.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение neon-f »

ОК.
Всей картины как что работает мне не понятно, но этих данных достаточно чтоб рулить яркостью как мне захочется.
Будет ли плавно регулироваться яркость по след алгоритму
АЦП 0-151 - плавное увеличение яркости от 0 до 100%(уменьшение длительности положительных импульсов на выходе 6 микроконтроллера)
АЦП 152-255 - постоянный низкий уровень на выходе 6, (следовательно яркость 100%)
если написать вот так

void set_yarkost (void) {
unsigned char adc_rez;
adc_rez = read_adc(1);
if (adc_rez >= 152) {
TCCR2=0x00; // остановить таймер2
PORT_100HZ = 0;
} else {
TCCR2=0x07; // запустить таймер2
#asm("cli")
OCR2 = 0xD9+(adc_rez/4); // яркость от0 до 100% при значении ацп от 0 до 151
#asm("sei")
}
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

Да.

только в прерываниях работы таймера нужно изменить (инвертировать) данные отправляемые в порт.

// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void) {
TCNT2=0xD9;

//PORT_100HZ = 1; - было
PORT_100HZ = 0;
}

// Timer2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void){
// PORT_100HZ = 0; - было
PORT_100HZ = 1;
}
ведь нам нужно с увеличением значения АЦП укорачивать длину положительного импульса.

когда значение АЦП больше либо равно 152 мы запускаем таймер/счетчик. Счет начинается со значения 217. После того как счетчик отсчитает до значения 217 + АЦП/4 (OCR2 = 0xD9+(adc_rez/4)) произойдет прерывание по совпадению и будет вызвана функция interrupt [TIM2_COMP] void timer2_comp_isr(void), которая установить лог."1" (фронт импульса).

Когда счетчик досчитает до 255 произойдет прерывание по переполнению и вызов функции interrupt [TIM2_OVF] void timer2_ovf_isr(void) которая установит лог."0" (спад импульса).

Соответственно чем больше значение АЦП, тем позже будет фронт импульса тем больше длина лог "0" ну и соответственно короче длина самого положительного импульса. Частота остается неизменой, а скважность уменьшается.

----------
Если у кого то еще будет желание разобрать мою программу "по косточкам" милости прошу.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение ВНН »

Уважаемый gazovik контекст в котором меня процетировали ,не выражает того что я имел ввиду.В данном случае выразил свое видение улучшение данного проекта.А меня устраивает одна из первых прошивок.Сам я не сторонник динамики (жаба давит терять световой поток) да и дорого neon-f наверно согласится.DANKO старайся береч
нервы на всех не хватит.
Всем удачи
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Danko »

ВНН, спасибо за поддержку.

Я всегда рад поделится своими знаниями и своими наработками.

Я неоднократно подправлял прошивку (программу) под конкретный "живой" проект.

Лично я сам не использую тех "наворотов" в часах которые я сделал. Для меня часы - это просто часы.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
ВНН
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб дек 13, 2008 09:03:43
Откуда: г.Советская Гавань

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение ВНН »

Полностью с тобой согласен
Я тоже белый и пушистый и также как и Вы ловлю мышей.
С уважением ВНН.
Аватара пользователя
Hichkok
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Чт мар 27, 2008 21:36:44
Откуда: Домодедово

Re: Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)

Сообщение Hichkok »

Danko писал(а):headshotbacs, ради интереса делал аппаратную коррекцию датчиков. На вход АЦП вешал переменник (по 1 рез.на датчик). Вращая ручку можно было прибавлять или отнимать градусы из показаний датчика.

----------
На выходных собрал часы в железе и проверил один вариант прошивки, который можно положить в раздел "Рюшечки". По функциональности он равен версии от 12.02.2010, только добавлена плавная смена показаний. Время - дата - термометр. В протеусе ничего не увидите и по сему смотреть нужно только в железе.


Данко хелп! Железо общий анод ULN и транзисторы в анодах, прошивка рюшечки на дисплее абракадабра (см.фото) что может быть?
С простой прошивкой всё о.к.
Спасибо.
Вложения
IMAG0072.jpg
(174.33 КБ) 1264 скачивания
Пока коты едины они непобедимы
Ответить

Вернуться в «AVR»