Страница 22 из 148

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

Добавлено: Вт мар 23, 2010 19:58:10
Danko
В принципе можно конечно и вообще без макса, но ...

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

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

Добавлено: Вт мар 23, 2010 20:13:04
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/

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

Добавлено: Вт мар 23, 2010 20:24:01
Danko
За ссылки спасибо, но я их видел и даже некоторое время назад одной из них практически воспользовался, и собрал вот такое чудо.
http://www.radiokot.ru/forum/viewtopic.php?f=20&t=23170

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

Добавлено: Ср мар 24, 2010 03:10:01
dorya
Danko писал(а):ПК + USB + тинька2313/45/85 + ИК светодиод
многим покажется лишней тратой денег и времени.
А кому не покажется, можно надеятся на данную реализацию? :)

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

Добавлено: Ср мар 24, 2010 09:45:17
Danko
Можно.

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

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

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

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

Когда буду на радиорынке посмотрю сколько стоит мега88 и мега168. Последняя будет предпочтительней т.к. работа с ИК-приемником съест еще немного памяти.

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

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

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

Добавлено: Ср мар 24, 2010 17:36:04
Danko
Дорогие однако Вы курите сигареты :))

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

Я склоняюсь к мега168 т.к. когда появится ИК-приемник народу захочется поиграться с пультом, а памяти у меги88 будет нехватать. Лучше сразу взять с запасом. Хотя переход с мега88 на мега168 будет не таким болезненным, как переход с мега8 на мега88.

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

Добавлено: Чт мар 25, 2010 01:51:21
neon-f
хотел сегодня понаблюдать как работает коррекция точности хода. Включил индикацию секунд, и стал ждать 00-00-00. Коррекция не сработала. :?

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

Добавлено: Чт мар 25, 2010 10:48:06
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 в разрядах), ноль в десятках часов не показывать и индикация десятых при индикации температуры.

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

Добавлено: Пн мар 29, 2010 11:51:20
Danko
На выходных подправил программу. Добавил новую функцию.

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

Доступны три ячейки EEPROM (2, 3 и 4). Выбор ячейки производится кнопками "+" и "-", изменение состояния ячейки кнопкой "Уст". При нажатии кнопки "Уст" сразу же производится запись в EEPROM.

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

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

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

Добавлено: Вт мар 30, 2010 09:25:22
Danko
gazovik, а что именно в прошивке (программе) Вас не устраивает или Вы в ветке прочли только то сообщение которое процитировали ?

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

Если Очень нужны две точки как разделитель часов и минут так этот вопрос неоднократно поднимался и если эти точки вопрос принципиальный так может поискать другой проект. Похоже исходники которые я выкладываю вещь никому не нужная и наверное через время я их удалю и буду выкладывать только прошивку.

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

Добавлено: Вт мар 30, 2010 12:03:18
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")
}

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

Добавлено: Вт мар 30, 2010 12:34:26
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

вроде бы все.

Я начал пользоваться калькулятором таймеров и по сему стал меньше комментировать часть программы работы с таймером.

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

Добавлено: Вт мар 30, 2010 14:12:09
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")
}

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

Добавлено: Вт мар 30, 2010 14:42:46
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" ну и соответственно короче длина самого положительного импульса. Частота остается неизменой, а скважность уменьшается.

---------------
Если у кого то еще будет желание разобрать мою программу "по косточкам" милости прошу.

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

Добавлено: Вт мар 30, 2010 15:18:05
ВНН
Уважаемый gazovik контекст в котором меня процетировали ,не выражает того что я имел ввиду.В данном случае выразил свое видение улучшение данного проекта.А меня устраивает одна из первых прошивок.Сам я не сторонник динамики (жаба давит терять световой поток) да и дорого neon-f наверно согласится.DANKO старайся береч
нервы на всех не хватит.
Всем удачи

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

Добавлено: Вт мар 30, 2010 15:36:35
Danko
ВНН, спасибо за поддержку.

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

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

Лично я сам не использую тех "наворотов" в часах которые я сделал. Для меня часы - это просто часы.

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

Добавлено: Вт мар 30, 2010 15:42:43
ВНН
Полностью с тобой согласен

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

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

-------------------------------
На выходных собрал часы в железе и проверил один вариант прошивки, который можно положить в раздел "Рюшечки". По функциональности он равен версии от 12.02.2010, только добавлена плавная смена показаний. Время - дата - термометр. В протеусе ничего не увидите и по сему смотреть нужно только в железе.
Данко хелп! Железо общий анод ULN и транзисторы в анодах, прошивка рюшечки на дисплее абракадабра (см.фото) что может быть?
С простой прошивкой всё о.к.
Спасибо.