Часы-термометр на микроконтроллере ATmega8.
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) место нашлось
Вроде работает. Буду тестировать точность.
Идея такая: значение коррекции будет до 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.
Я так понял коррекция не должна превышать 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
Re: Часы-термометр на микроконтроллере ATmega8.
Здравствуйте, уважаемые форумчане. Здесь уже много обсуждался вопрос о транзисторных ключах для различных индикаторов. И все же вопросы остаются, по крайней мере у меня. Хочу собрать часы на пяти индикаторах SA15-11GWA. Есть транзисторы IRLML2502. Хочу включить их вместо КТ972 (Схема Юрия-так ее здесь называли). С полевиками не знаком. Вопрос: какие резисторы нужно установить при включении этих транзисторов? Схема с 74HC595 и ULN2803, прошивка с "общим катодом". Падение напряжения на ULN2803 0.8 В, поэтому должно хватить 5 В для питания индикаторов и при этом гасящие резисторы для сегментов, по-моему, не нужны, за исключением точки.
Re: Часы-термометр на микроконтроллере ATmega8.
Я подкорректировал прошивку и теперь точность можно регулировать с дискретностью 0,001 сек/час. Но коррекция не совсем выражает долю секунды в час. Если коррекцию (ту что настраивается на часах) разделить на 1,024 то это будет коррекция выраженная в доля сек./час. Это только для этой прошивки. В авторском варианте делить на 1,024 не нужно было.
Прошивка для 9-ти сегментных часов с общим катодом. Любой желающий может перекомпилировать себе для ОА или включить опцию "большой индикатор" - в приложении скомпилированный файл и исходник. С коррекцией за 15 дней уход составил 2,5 сек. Подправил коррекцию, посмотрим что будет еще через 15 дней.
Прошивка для 9-ти сегментных часов с общим катодом. Любой желающий может перекомпилировать себе для ОА или включить опцию "большой индикатор" - в приложении скомпилированный файл и исходник. С коррекцией за 15 дней уход составил 2,5 сек. Подправил коррекцию, посмотрим что будет еще через 15 дней.
- Вложения
-
- cl9_v42.rar
- Исходник. Файл clock_m8.hex прошивка для 9 сегм. часов с ОК
- (197.75 КБ) 370 скачиваний
Re: Часы-термометр на микроконтроллере ATmega8.
Решение моего вопроса успешно найдено. Общие аноды индикаторов подключены к + источника питания через транзисторы IRLML6302, а сигналы от м/к на их затворы проинвертированы с помощью ULN2003.
Re: Часы-термометр на микроконтроллере ATmega8.
Не люблю усложнения схемы. Я бы скорректировал прошивку. Для тех кто не боится лезть в исходный код скажу как это можно было сделать. Открываете clock.h в блокноте и находите
#define KATOD// общий катод
//#define LARGE_LED
Если общий анод пишем // пере #define KATOD//
если подключается через транзисторы стираем // перед #define LARGE_LED
в итоге с общим анодом и транзисторами будет
//#define KATOD// общий анод
#define LARGE_LED
Сохраняем закрываем и компилируем в winavr.
#define KATOD// общий катод
//#define LARGE_LED
Если общий анод пишем // пере #define KATOD//
если подключается через транзисторы стираем // перед #define LARGE_LED
в итоге с общим анодом и транзисторами будет
//#define KATOD// общий анод
#define LARGE_LED
Сохраняем закрываем и компилируем в winavr.
Re: Часы-термометр на микроконтроллере ATmega8.
Привет котам-паяльникам. Кто нибудь сможет отправит скриншот фьюзов для часиков второй версии, если я пользуюсь оболочкой программатора UniProf ?
-
bestsergey
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Вт мар 17, 2009 22:35:50
Re: Часы-термометр на микроконтроллере ATmega8.
Инженер писал(а):Я подкорректировал прошивку и теперь точность можно регулировать с дискретностью 0,001 сек/час. Но коррекция не совсем выражает долю секунды в час. Если коррекцию (ту что настраивается на часах) разделить на 1,024 то это будет коррекция выраженная в доля сек./час. Это только для этой прошивки. В авторском варианте делить на 1,024 не нужно было.
Прошивка для 9-ти сегментных часов с общим катодом. Любой желающий может перекомпилировать себе для ОА или включить опцию "большой индикатор" - в приложении скомпилированный файл и исходник. С коррекцией за 15 дней уход составил 2,5 сек. Подправил коррекцию, посмотрим что будет еще через 15 дней.
А можно прошивку для ИД10 ОК.
Спасибо!!!
- lobzzzik
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср апр 21, 2010 09:08:28
- Откуда: Фастов - город контрастов
- Контактная информация:
Re: Часы-термометр на микроконтроллере ATmega8.
Вот так веселенько оформил свои часы http://konstruktiv.getbb.ru/viewtopic.php?f=8&t=16, может кому идея пригодится.
Куллер тоже вертолет, только маленький еще....
Re: Часы-термометр на микроконтроллере ATmega8.
lobzzzik писал(а):Вот так веселенько оформил свои часы
Шедевр!
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Часы-термометр на микроконтроллере ATmega8.
А батарейка GB1 питает только 7мую ногу или 20 и 21 включительно?
Re: Часы-термометр на микроконтроллере ATmega8.
Часы на 5-и индикаторах: не сохраняется в EEPROM знак коррекции. Часы спешеат на три секунды в сутки. Устанавливаю знак "-" и поправку, на следующий день обнаруживаю, что часы спешат. Захожу в настройки, а знак коррекции "_". Пробовал по-разному выходить из настроек в рабочих режим, но знак "-" так и не сохраняется. Прошивка с сайта автора, первая (ОК). Все остальное работает без нареканий. Прошу помочь.
-
DimAlt
- Вымогатель припоя
- Сообщения: 576
- Зарегистрирован: Пт май 19, 2006 05:39:11
- Контактная информация:
Re: Часы-термометр на микроконтроллере ATmega8.
Речь идет об этом архиве исходник, hex (24 Kb). 15.03.08? Проверил, в нем все сохраняется. На всякий пожарный обновил файлы на сайте. Здесь прикрепил модельку в протеусе.
Питание подводится к ножкам VCC AVCC, 21 это AREF вход опорного напряжения АЦП, у меня висит в воздухе.
Супер!
А батарейка GB1 питает только 7мую ногу или 20 и 21 включительно?
Питание подводится к ножкам VCC AVCC, 21 это AREF вход опорного напряжения АЦП, у меня висит в воздухе.
lobzzzik писал(а):Вот так веселенько оформил свои часы
Супер!
- Вложения
-
- cl5_v3.zip
- (18.6 КБ) 365 скачиваний
Re: Часы-термометр на микроконтроллере ATmega8.
Спасибо, DimAlt. Сейчас сделал печатную плату, перенёс детали с макетной платы, поставил другой экземпляр кварцевого резонатора и вместо конденсаторов 15 пф поставил 22 пф. Понаблюдаю за точностью хода часов, и, при необходимости, перепрошью контроллер. Аппарат прекрасный! Скажите, а в какой-нибудь версии прошивки не предусмотрена индикация включенного состояния будильника?
Re: Часы-термометр на микроконтроллере ATmega8.
DimAlt
вопрос о конденсаторах на кварце. в некоторых версиях часов используются встроенные конденсаторы, а в некоторых внешние. почему? чем плохи встроенные?
вопрос о конденсаторах на кварце. в некоторых версиях часов используются встроенные конденсаторы, а в некоторых внешние. почему? чем плохи встроенные?
-
DimAlt
- Вымогатель припоя
- Сообщения: 576
- Зарегистрирован: Пт май 19, 2006 05:39:11
- Контактная информация:
Re: Часы-термометр на микроконтроллере ATmega8.
Эти часы древние. Когда делал в даташите на мегу 8 было указанно о не возможности установить бит CKOPT при тактирование от внутреннего RC. Ну или типа того, уже не помню. Потом с какой то ревизии это дело поправили. Я пробовал включать внутренние конденсаторы, но мне показалось что точность лучше со внешними и коррекция со внешними у меня получалась меньше. Это конечно только для моего мк и установленных кондеров, может на другом мк будет наоборот.
Вообще то можно проверить внутренние и внешние на термостабильность.
Вообще то можно проверить внутренние и внешние на термостабильность.
Re: Часы-термометр на микроконтроллере ATmega8.
спасибо за ответ. я сейчас делаю одну штуковину. хотел сделать на более новом и доступном мега88, но там нет встроенных кондеров. буду наверное на старой доброй меге8, тем более к осени обещали что их будет навалом.
-
khudko_denys
- Родился
- Сообщения: 8
- Зарегистрирован: Пт мар 21, 2008 16:53:56
- Контактная информация:
Re: Часы-термометр на микроконтроллере ATmega8.
Добрый день всем единомышленникам
Есть интересная новость - скоро будет доступно аппаратное обновление для часов
А именно будет реализован радио-датчик внешней температуры. Для этого внешний датчик будет снабжен радиопередатчиком, а к контактам датчика на часах будет подключаться доп. блок - приемник. При этом аппаратной переделки часов делать не придется! Но прошивка будет дополнена! При этой переделке есть возможность, например, сделать несколько часов, расставив их дома по разным комнатам, и все они будут принимать внешнюю температуру воздуха только с одного датчика!
Re: Часы-термометр на микроконтроллере ATmega8.
Господа!!!
Очень нужна ваша помощь. В схемке этих часиков используется отечественная микросхема К555ИД10 в место 74HC595
Это правильно??? а то а 2ю неделю уже жду когда привезут мне 74HC595, а с К555ИД10 собрал, на макетке (благо их у меня шт. 15 где то валялось) но устройство не работает!!!!
Периодически загораются все нули на индикаторе а при нажатии на кнопки просто чо-то там гдето переливается на индикаторе, и слабо слабо видно что как будто они тикают. Ну иногда ещё и в бузере проскакивают звуковые сигналы, при подачи питания бывает что бузер начинает пикать, и с каждым пиком всё быстрее и быстрее в итоге сигнал превращается в один длинный гудок. Подскажите, в чём может быть дело?????
За ранее спасибо!
Очень нужна ваша помощь. В схемке этих часиков используется отечественная микросхема К555ИД10 в место 74HC595
Это правильно??? а то а 2ю неделю уже жду когда привезут мне 74HC595, а с К555ИД10 собрал, на макетке (благо их у меня шт. 15 где то валялось) но устройство не работает!!!!
Периодически загораются все нули на индикаторе а при нажатии на кнопки просто чо-то там гдето переливается на индикаторе, и слабо слабо видно что как будто они тикают. Ну иногда ещё и в бузере проскакивают звуковые сигналы, при подачи питания бывает что бузер начинает пикать, и с каждым пиком всё быстрее и быстрее в итоге сигнал превращается в один длинный гудок. Подскажите, в чём может быть дело?????
За ранее спасибо!
- Signalman
- Встал на лапы
- Сообщения: 96
- Зарегистрирован: Пт янв 02, 2009 22:34:29
- Откуда: от туда
- Контактная информация:
Re: Часы-термометр на микроконтроллере ATmega8.
Микросхема К555ИД10 в место 74HC595 ну никак не подходит
Это совершенно разные микросхемы. Дождитесь 74HC595 и тогда пробуйте.
http://radiokot.ru/circuit/digital/home/09/ - часы с К555ИД10.
http://radiokot.ru/circuit/digital/home/30/ - часы с 74HC595
http://radiokot.ru/circuit/digital/home/09/ - часы с К555ИД10.
http://radiokot.ru/circuit/digital/home/30/ - часы с 74HC595