Часы-термометр на микроконтроллере ATmega8.

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
Инженер
Прорезались зубы
Сообщения: 232
Зарегистрирован: Сб ноя 24, 2007 09:03:29
Откуда: Ульяновск

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение Инженер »

Да, это я уже нашел. И уже придумал как сделать. Я сделаю коррекцию и каждый час и дополнительно раз в сутки. Я так понял коррекция не должна превышать 127.
Идея такая: значение коррекции будет до 255 с шагом 1. Каждый час коррекция будет correction/8, а каждые сутки дополнительно (correction&7)*3
Проверка математики: например установим коррекцию 255. 255/8=31; 255&7=7 (младшие 3 бита единицы) итого суммарная коррекция 24*31+7*3=765 765/125=6,12 секунд в сутки. 0,255*24=6,12 Единственный минус такого подхода уменьшение максимальной коррекции с 9,6 до 6,12 сек в сутки.
Исправил тут
// коррекция
,,,,
,,,,
if (regim==r_clock+8) {//set hour
inc_dec_var(&correction,255); (724 строчка)
mask_next_regim(0x0F,0,211);
if (regim==211) {
EEPROM_write(EEPROM_correction, correction);
EEPROM_write(EEPROM_corr_flag, corr_flag);
}
return;
и тут
if (++hour[h_min]>=60)
{
if ( corr_flag & _BV(fl_corr_znak_pl) )//корекция часов
correct=correction/8;//для убыстрения
else
correct= 0x00-correction/8;

hour[h_min] =0;
hour[h_hour]++;
if (hour[h_hour]>=24)
{
if ( corr_flag & _BV(fl_corr_znak_pl) )//корекция часов
correct=correct+(correction&7)*3;//для убыстрения
else
correct=correct-(correction&7)*3;


hour[h_hour]=0;
if (++hour[h_day]>=7) hour[h_day]=0;
,,,,,
а еще заменил это if ( (i=EEPROM_READ(EEPROM_correction)) < sizeof(corr_in_lcd)/2 ); (132 строка)
на это if ( (i=EEPROM_READ(EEPROM_correction)) < 255 );
и еще заменил это result_in_bcd( pgm_read_word_near(&corr_in_lcd[correction]) ); (1392 строка)
на это result_in_bcd(correction);
Что значит pgm_read_word_near, так и не смог найти. Что это? В 132 строчке я не ошибся? Я ведь понятия не имею что это и для чего.
Это дополнение вызвало перерасход памяти, но выкинув не нужный более массив corr_in_lcd (из файла clock.h) место нашлось
Вроде работает. Буду тестировать точность.
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение DimAlt »

Я так понял коррекция не должна превышать 127.

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

ISR(SIG_OVERFLOW2)
{
 clock_++;
 if (clock_==128)
   {                                               
   clock_=correct;
   isr_1sek_=1;
     }
}

Да. Из-за этого.

а еще заменил это if ( (i=EEPROM_READ(EEPROM_correction)) < sizeof(corr_in_lcd)/2 ); (132 строка)
на это if ( (i=EEPROM_READ(EEPROM_correction)) < 255 );

последнюю строчку можно выкинуть, ведь i всегда будет в диапазоне 0..255.
У меня диапазон 50 значений и поэтому при чтении из еепром есть проверка значения коррекции.

pgm_read_word_near(&corr_in_lcd[correction])
Чтение из памяти программ. То есть там так, коррекция в программе число от 0 до 50, при выводе на экран оно переводится в секунды, 0,008 0,016 и т. д. corr_in_lcd массив в памяти программ с этими пересчитанными значениями.
pgm_read_word_near - читайте в avr-libc-user-manual.pdf
vaegor58
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 12, 2010 20:51:13

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение vaegor58 »

Здравствуйте, уважаемые форумчане. Здесь уже много обсуждался вопрос о транзисторных ключах для различных индикаторов. И все же вопросы остаются, по крайней мере у меня. Хочу собрать часы на пяти индикаторах SA15-11GWA. Есть транзисторы IRLML2502. Хочу включить их вместо КТ972 (Схема Юрия-так ее здесь называли). С полевиками не знаком. Вопрос: какие резисторы нужно установить при включении этих транзисторов? Схема с 74HC595 и ULN2803, прошивка с "общим катодом". Падение напряжения на ULN2803 0.8 В, поэтому должно хватить 5 В для питания индикаторов и при этом гасящие резисторы для сегментов, по-моему, не нужны, за исключением точки.
Аватара пользователя
Инженер
Прорезались зубы
Сообщения: 232
Зарегистрирован: Сб ноя 24, 2007 09:03:29
Откуда: Ульяновск

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение Инженер »

Я подкорректировал прошивку и теперь точность можно регулировать с дискретностью 0,001 сек/час. Но коррекция не совсем выражает долю секунды в час. Если коррекцию (ту что настраивается на часах) разделить на 1,024 то это будет коррекция выраженная в доля сек./час. Это только для этой прошивки. В авторском варианте делить на 1,024 не нужно было.
Прошивка для 9-ти сегментных часов с общим катодом. Любой желающий может перекомпилировать себе для ОА или включить опцию "большой индикатор" - в приложении скомпилированный файл и исходник. С коррекцией за 15 дней уход составил 2,5 сек. Подправил коррекцию, посмотрим что будет еще через 15 дней.
Вложения
cl9_v42.rar
Исходник. Файл clock_m8.hex прошивка для 9 сегм. часов с ОК
(197.75 КБ) 370 скачиваний
vaegor58
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 12, 2010 20:51:13

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение vaegor58 »

Решение моего вопроса успешно найдено. Общие аноды индикаторов подключены к + источника питания через транзисторы IRLML6302, а сигналы от м/к на их затворы проинвертированы с помощью ULN2003.
Аватара пользователя
Инженер
Прорезались зубы
Сообщения: 232
Зарегистрирован: Сб ноя 24, 2007 09:03:29
Откуда: Ульяновск

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение Инженер »

Не люблю усложнения схемы. Я бы скорректировал прошивку. Для тех кто не боится лезть в исходный код скажу как это можно было сделать. Открываете clock.h в блокноте и находите
#define KATOD// общий катод
//#define LARGE_LED
Если общий анод пишем // пере #define KATOD//
если подключается через транзисторы стираем // перед #define LARGE_LED
в итоге с общим анодом и транзисторами будет
//#define KATOD// общий анод
#define LARGE_LED
Сохраняем закрываем и компилируем в winavr.
Аватара пользователя
tctf2006
Открыл глаза
Сообщения: 61
Зарегистрирован: Сб июн 19, 2010 22:02:03
Откуда: Ижевск, УР

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение tctf2006 »

Привет котам-паяльникам. Кто нибудь сможет отправит скриншот фьюзов для часиков второй версии, если я пользуюсь оболочкой программатора UniProf ?
bestsergey
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Вт мар 17, 2009 22:35:50

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение bestsergey »

Инженер писал(а):Я подкорректировал прошивку и теперь точность можно регулировать с дискретностью 0,001 сек/час. Но коррекция не совсем выражает долю секунды в час. Если коррекцию (ту что настраивается на часах) разделить на 1,024 то это будет коррекция выраженная в доля сек./час. Это только для этой прошивки. В авторском варианте делить на 1,024 не нужно было.
Прошивка для 9-ти сегментных часов с общим катодом. Любой желающий может перекомпилировать себе для ОА или включить опцию "большой индикатор" - в приложении скомпилированный файл и исходник. С коррекцией за 15 дней уход составил 2,5 сек. Подправил коррекцию, посмотрим что будет еще через 15 дней.


А можно прошивку для ИД10 ОК.
Спасибо!!! :))) :))) :)))
Аватара пользователя
lobzzzik
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср апр 21, 2010 09:08:28
Откуда: Фастов - город контрастов
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение lobzzzik »

Вот так веселенько оформил свои часы http://konstruktiv.getbb.ru/viewtopic.php?f=8&t=16, может кому идея пригодится.
Куллер тоже вертолет, только маленький еще....
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение serg_svd »

lobzzzik писал(а):Вот так веселенько оформил свои часы

Шедевр! :)))))
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
electric
Родился
Сообщения: 1
Зарегистрирован: Ср июл 21, 2010 20:24:02

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение electric »

А батарейка GB1 питает только 7мую ногу или 20 и 21 включительно?
vaegor58
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 12, 2010 20:51:13

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение vaegor58 »

Часы на 5-и индикаторах: не сохраняется в EEPROM знак коррекции. Часы спешеат на три секунды в сутки. Устанавливаю знак "-" и поправку, на следующий день обнаруживаю, что часы спешат. Захожу в настройки, а знак коррекции "_". Пробовал по-разному выходить из настроек в рабочих режим, но знак "-" так и не сохраняется. Прошивка с сайта автора, первая (ОК). Все остальное работает без нареканий. Прошу помочь.
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение DimAlt »

Речь идет об этом архиве исходник, hex (24 Kb). 15.03.08? Проверил, в нем все сохраняется. На всякий пожарный обновил файлы на сайте. Здесь прикрепил модельку в протеусе.
А батарейка GB1 питает только 7мую ногу или 20 и 21 включительно?

Питание подводится к ножкам VCC AVCC, 21 это AREF вход опорного напряжения АЦП, у меня висит в воздухе.
lobzzzik писал(а):Вот так веселенько оформил свои часы

Супер!
Вложения
cl5_v3.zip
(18.6 КБ) 365 скачиваний
vaegor58
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 12, 2010 20:51:13

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение vaegor58 »

Спасибо, DimAlt. Сейчас сделал печатную плату, перенёс детали с макетной платы, поставил другой экземпляр кварцевого резонатора и вместо конденсаторов 15 пф поставил 22 пф. Понаблюдаю за точностью хода часов, и, при необходимости, перепрошью контроллер. Аппарат прекрасный! Скажите, а в какой-нибудь версии прошивки не предусмотрена индикация включенного состояния будильника?
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-термометр на микроконтроллере ATmega8.

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

DimAlt
вопрос о конденсаторах на кварце. в некоторых версиях часов используются встроенные конденсаторы, а в некоторых внешние. почему? чем плохи встроенные?
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение DimAlt »

Эти часы древние. Когда делал в даташите на мегу 8 было указанно о не возможности установить бит CKOPT при тактирование от внутреннего RC. Ну или типа того, уже не помню. Потом с какой то ревизии это дело поправили. Я пробовал включать внутренние конденсаторы, но мне показалось что точность лучше со внешними и коррекция со внешними у меня получалась меньше. Это конечно только для моего мк и установленных кондеров, может на другом мк будет наоборот.
Вообще то можно проверить внутренние и внешние на термостабильность.
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Часы-термометр на микроконтроллере ATmega8.

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

спасибо за ответ. я сейчас делаю одну штуковину. хотел сделать на более новом и доступном мега88, но там нет встроенных кондеров. буду наверное на старой доброй меге8, тем более к осени обещали что их будет навалом.
khudko_denys
Родился
Сообщения: 8
Зарегистрирован: Пт мар 21, 2008 16:53:56
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение khudko_denys »

Добрый день всем единомышленникам :) Есть интересная новость - скоро будет доступно аппаратное обновление для часов :) А именно будет реализован радио-датчик внешней температуры. Для этого внешний датчик будет снабжен радиопередатчиком, а к контактам датчика на часах будет подключаться доп. блок - приемник. При этом аппаратной переделки часов делать не придется! Но прошивка будет дополнена! При этой переделке есть возможность, например, сделать несколько часов, расставив их дома по разным комнатам, и все они будут принимать внешнюю температуру воздуха только с одного датчика!
Кирилл84
Родился
Сообщения: 11
Зарегистрирован: Пн авг 30, 2010 15:11:44
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение Кирилл84 »

Господа!!!
Очень нужна ваша помощь. В схемке этих часиков используется отечественная микросхема К555ИД10 в место 74HC595
Это правильно??? а то а 2ю неделю уже жду когда привезут мне 74HC595, а с К555ИД10 собрал, на макетке (благо их у меня шт. 15 где то валялось) но устройство не работает!!!!
Периодически загораются все нули на индикаторе а при нажатии на кнопки просто чо-то там гдето переливается на индикаторе, и слабо слабо видно что как будто они тикают. Ну иногда ещё и в бузере проскакивают звуковые сигналы, при подачи питания бывает что бузер начинает пикать, и с каждым пиком всё быстрее и быстрее в итоге сигнал превращается в один длинный гудок. Подскажите, в чём может быть дело?????
За ранее спасибо!
Аватара пользователя
Signalman
Встал на лапы
Сообщения: 96
Зарегистрирован: Пт янв 02, 2009 22:34:29
Откуда: от туда
Контактная информация:

Re: Часы-термометр на микроконтроллере ATmega8.

Сообщение Signalman »

Микросхема К555ИД10 в место 74HC595 ну никак не подходит :) Это совершенно разные микросхемы. Дождитесь 74HC595 и тогда пробуйте.
http://radiokot.ru/circuit/digital/home/09/ - часы с К555ИД10.
http://radiokot.ru/circuit/digital/home/30/ - часы с 74HC595
Ответить

Вернуться в «Статьи»