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

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

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


etimsk
Встал на лапы
Сообщения: 139
Зарегистрирован: Пн ноя 17, 2008 16:53:29
Откуда: Московская область, г.Лыткарино

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

Сообщение etimsk »

Ах да забыл схема на 9ти индикаторах и М74HC595
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

У меня тоже на этой неделе баг был с этими часами на 9 индикаторах. Прихожу домой, а на часах высвечивается 33 часа -скока минут не важно :)
В общем заменить литиевую батарейку в резервном источнике. Она и так БУ была с какой-то старой материнке, так еще и в часах проработала много. Знаю точно по состоянию других бытовых приборов, что электроэнергию отключали. А резервный элемент в часах видимо их не потянул уже. Вот и возник глюк. Но что странно, через меню программный сброс не сработал. Пришлось отключать от сети, менять естественно элемент и после настраивать заново все режимы.
В общем к автору вопрос, можно ли что-то поправить в прошивке, чтоб хотя бы настройки сохранялись?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
snc
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт сен 17, 2009 15:33:44
Откуда: Украина

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

Сообщение snc »

nbo писал(а):Для всех интересующихся: здесь http://startcd.narod.ru/cl_termo3/index.html выложена доработанная прошивка часов термостата на шести индикаторах.


nbo если Вы автор схемы и платы для часов на шести индикаторах то не могли бы выложить на этом форуме плату в .lay или хотя бы в jpg, gif а то протеуса нет. Заранее спасибо!
etimsk
Встал на лапы
Сообщения: 139
Зарегистрирован: Пн ноя 17, 2008 16:53:29
Откуда: Московская область, г.Лыткарино

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

Сообщение etimsk »

Так у меня вообще без батарейки -может схему вы не ту имели ввиду -у меня power detect просто на минусе сидит
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

etimsk писал(а):Так у меня вообще без батарейки -может схему вы не ту имели ввиду -у меня power detect просто на минусе сидит

А смысл? батарейку жалко поставить?
У нас свет редко сейчас выключают. Зато вот метко :). Стормозил, надо было это запечатлеть на фотоаппарат :)) 33 часа эт вам не шутки
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
etimsk
Встал на лапы
Сообщения: 139
Зарегистрирован: Пн ноя 17, 2008 16:53:29
Откуда: Московская область, г.Лыткарино

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

Сообщение etimsk »

serg_svd писал(а):
etimsk писал(а):Так у меня вообще без батарейки -может схему вы не ту имели ввиду -у меня power detect просто на минусе сидит

А смысл? батарейку жалко поставить?
У нас свет редко сейчас выключают. Зато вот метко :). Стормозил, надо было это запечатлеть на фотоаппарат :)) 33 часа эт вам не шутки


Так а смысл? -если дома генератор стоит автоматический -свет отрубили он с опережением завелся -у нас типа умный дом -образцово показательный:)
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

etimsk писал(а):дома генератор стоит автоматический

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

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

Сообщение DimAlt »

В последних версиях такой код

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

if (++hour[h_sek]>=60)
      {
      hour[h_sek] =0;
      if (++hour[h_min]>=60)
         {
         if ( corr_flag & _BV(fl_corr_znak_pl) )//корекция часов
            correct=correction;//для убыстрения
            else
            correct= 0x00-correction;
         
         hour[h_min] =0;
         hour[h_hour]++;
   
         if (hour[h_hour]>=24)
            {
            hour[h_hour]=0;
            if (++hour[h_day]>=7)   hour[h_day]=0;
            if (++hour[h_num]>num_in_month[ hour[h_month] ] )
               {
               hour[h_num]=0;
               hour[h_month]++;
               if (hour[h_month]>=12) {hour[h_month]=0; hour[h_year]++;}
               }
            }

то есть

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

if (hour[h_hour]>=24)
            {
            hour[h_hour]=0;

при наступлении нового часа, это сбросило бы 33 часа на ноль.

А так, я специально не стал при сбросе сбрасывать время, его все равно потом выставлять в ручную.
То есть, надо было проверить настройки выставить время, и часы опять бы работали. Но это мое мнение, а так, конечно, разные фокусы бывают :))

etimsk я думаю проблема у Вас в 74НС595.
Аватара пользователя
nbo
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Вт май 06, 2008 20:14:37
Откуда: Ukraine

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

Сообщение nbo »

Для snc:
Выкладываю комплект плат в формате PDF.
Некоторые пояснения: файл clock6_new-1.pdf рисунок печатных проводников, файл clock6_new-1-top.pdf вид со стороны монтажа индикаторов, здесь-же показаны 20 перемычек, файл clock6_shema.pdf схема, файл clock6_new-1-botton.pdf вид со стороны печати с деталями которые паяются с этой стороны, файл clock6_new-1-botton-1.pdf то-же но без рисунка печатных проводников. Кроме того на плате необходимо установить 5 перемычек из провода. На вопрос почему всё так могу лишь ответить что при разводке ставилась задача сделать односторонюю плату, двусторонние я пока по технологии ЛУТ не освоил. В .lay формате плат нет.
Вложения
zxc.zip
(212.58 КБ) 500 скачиваний
etimsk
Встал на лапы
Сообщения: 139
Зарегистрирован: Пн ноя 17, 2008 16:53:29
Откуда: Московская область, г.Лыткарино

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

Сообщение etimsk »

serg_svd писал(а):
etimsk писал(а):дома генератор стоит автоматический

ЗачОтная батарейка у вас для часов :)))

Спасибо! :))
Но на самом деле это сильно ограничивает развитите радиолюбительства -тут только можно поплакать :?
постоянно стабильное напряжение 220 вольт без отклонений от нормы и его наличие -вобщем одни слезы :)
Извините пожалуйста за флуд!
Кстати попробовал поменять HC595 -посмотрим - пока работают уже 20 часов -неужели микрухи такие плохие пошли?- пол года работала и на тебе
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

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

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

предположение.
ток вывода HC595 - 8ма. скорее всего у вас большой перегруз, вот микруха в таком режиме долго и не живет.......
wkarl
Родился
Сообщения: 8
Зарегистрирован: Чт июн 18, 2009 18:14:19
Откуда: Moscov

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

Сообщение wkarl »

//первый байт 0x81 8-[длина строки(7)+смещение(1)] 1-[смещение(1)]
const unsigned char str_default[]= {0x90, 0x39, 0xBD, 0x37, 0xBB, 0x39, 0x0, 0x97, 0xB7, 0x79};//d, E, F, A, U, L, t, 0, S, //0,9 regim127
const unsigned char str_ds18b20[]= {0x81, 0x9E, 0xAD, 0x82, 0xBF, 0x9D, 0x3E, 0xBB};//d, S, 1, 8, b, 2, 0, 0, F // 0,9 regim126
const unsigned char str_budil[]= {0x61 ,0x9D, 0x98, 0x9E, 0x11, 0x58};//, 0x0, 0x0, 0xAD};//0, b, u, d, I, I., 0, 0, S //1,8 regim52
Это фрагмент из программы 9-индикаторных часов Мосина. Объясните, плиз, как эта кодировка связана с индикаторами? Дякую
wkarl
wkarl
Родился
Сообщения: 8
Зарегистрирован: Чт июн 18, 2009 18:14:19
Откуда: Moscov

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

Сообщение wkarl »

Есть предложение: просить DimAlt всем обществом составить подробнейшие коментарии в программе к его часам, например, версии 17t1_1 (наиболее перспективным, на мой взгляд). Это было бы полезно для всех и сняло бы многие вопросы, а также стало бы хорошим пособием для начинающих знакомиться с СИ. А Дмитрий мог бы написать на основании этого учебное пособие, в котором он описал бы, как он дошел до жизни такой.
wkarl
wkarl
Родился
Сообщения: 8
Зарегистрирован: Чт июн 18, 2009 18:14:19
Откуда: Moscov

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

Сообщение wkarl »

По поводу 5-разрядных часов DimAlt в исполнении Юрия. В этой реализации при закрытом состоянии портов МК на их выводах амплитуда импульса может достигать 8…9 В, что представляет определенную опасность для МК. Кроме того, при таком напряжении при открытом состоянии портов втекающий ток составит около 9/2,4 = 3,75 мА на порт, что не совсем хорошо как для МК, так и для энергосбережения. Для исключения этого недостатка была испытана схема (http://wkarl.narod.ru/3t_dop14.htm) с использованием прошивки v. 17t1_1 и ИМС преобразователя уровня 564ПУ7 (с инверсией), замечательным свойством которого является то, что он срабатывает при входном напряжении начиная с 3 В и питании 12 В (см. ДСП-каталог ИМС от 1984 г.). В указанных часах использована также более простая схема power_detect.
wkarl
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

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

Сообщение DimAlt »

neon-f писал(а):ток вывода HC595 - 8ма.

Изображение

neon-f где 8ма?
Или это с учетом того, что часы всегда показывают восьмерки?
Вложения
595.PNG
(3.91 КБ) 2218 скачиваний
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

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

Сообщение DimAlt »

wkarl писал(а)://первый байт 0x81 8-[длина строки(7)+смещение(1)] 1-[смещение(1)]
const unsigned char str_ds18b20[]= {0x81, 0x9E, 0xAD, 0x82, 0xBF, 0x9D, 0x3E, 0xBB};//d, S, 1, 8, b, 2, 0, 0, F // 0,9 regim126

Сначала о том, что это исходник 2004 года, это время, когда я только начинал разбираться с мк. Затем, конечно, он не однократно изменялся, но основа осталась, именно, моей первой программы на си. Поэтому его нельзя рекомендовать как пример и тем более по нем разбираться с кодом.
Здесь изначально массив располагался в памяти программ то есть был объявлен progmem. Но так как в меге8 оперативки много его можно размещать в озу, по размеру кода меньше и по выполнению быстрей.
Считывать массив str_ds18b20 в массив буфера экрана по коду также занимает меньше места, чем писать так:

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

LedBuffer[1]=0x9E;
LedBuffer[1]=0x9E;
LedBuffer[2]=0xAD;
и т. д.

Функция копирования массива в буфер

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

void load_str_in_lcdbuffer(const unsigned char *str_lcd){
unsigned char b,e,length;//str_lcd[0] = 0000 1111-смещение, 1111 0000 - длина строки
   length=str_lcd[0];
   for( b=0x0F&(length), e=1 ; b<(0x0F&(length>>4)) ; b++, e++){
      lcd_buffer[b]=str_lcd[e];
      }
}

Вообщем это результат попыток сократить размер кода.
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

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

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

стандартный ток нагрузки на вывод у HC серии около 7ма(или около того, точно не помню)
ток короткого замыкания вывода - 20ма. больше не получить даже если закоротить на землю или питание. это в таблице и указано, и допускать крайне не желательно.
суммарный ток микросхемы по выводам питания - 70ма. получаем 70/9=7,7. вполне стандартно для НС серии. конечно я понимаю что по всем 9 выводам одновременно такого тока быть не может, но "восьмерка", "девятка", "ноль" плюс "точка" это 7-8 выводов. следовательно в вашей схеме, без транзисторных ключей, больше 9 ма с вывода лучьше не брать....

Есть вопрос по коду. у тебя весь контроллер работает от часового кварца, или только таймер Т2, а остальное от внутреннего генератора???
если второе, то глянь правильно ли так настроить таймер Т2, чтоб он тактировался от часового кварца, и генерировал прерывание по переполнению.

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{ МОЙ КОД..... }

ASSR=0x08;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x00;

кварц цепляю на TOSC 1 и 2.
хочу получить прерывания с частотой 512гц (32768/64)
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

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

Сообщение DimAlt »

Да, часы от асинхронного таймера, все остального от внутреннего RC.

Потом
1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2.
2. Select clock source by setting AS2 as appropriate.
3. Write new values to TCNT2, OCR2, and TCCR2.
4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and TCR2UB.
5. Clear the Timer/Counter2 Interrupt Flags.
6. Enable interrupts, if needed.

Первый пункт не выполнен
Частота будет 32768/256=128 герц
Для того что бы получить 512 надо использовать режим СТС загрузив OCR2=64.
что то вроде этого

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

TIMSK&=~(1<<OCF2); или cli(); а потом sei
 TCCR2 = 0x00;         //stop
 ASSR  = (1<<AS2);     //set async mode
 TCCR2 = (1<<WGM21)|(1<<CS20);         //start
 OCR2 = 64;
 TIMSK|=(1<<OCF2);
 ISR(OCF2){};


По 74НС595, конечно все так. Но в даташите
Continuous output current, IO (VO = 0 to VCC) . . . . . . ±35 mA
В переводе звучит как продолжительный ток вывода. Я бы сказал, что нагружать вывод до 20мА можно и не страшно, главное постоянно не превышать мощность кристала 500мВт. Вот задумайтесь, почему, есть, например, телефон с АОН русь 27, где индикатор управляется двумя 74НС595. Разработчики не побоялись превысить токи.
Аватара пользователя
Инженер
Прорезались зубы
Сообщения: 232
Зарегистрирован: Сб ноя 24, 2007 09:03:29
Откуда: Ульяновск

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

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

Уважаемый DimAlt. Я уже давно собрал Вашу схему. Спасибо за проект :) Схема эта Часы-термометр на микроконтроллере ATmega8. V 2.0 http://radiokot.ru/circuit/digital/home/30/ У меня возможно очень старая версия прошивки, но я когда-то выбрал именно ее (кажется откуда-то из этого форума) потому что там была возможность выводить температуру без первого нуля, т.к. показания типа -00,5 выглядят очень некрасиво. Термостата там нету и не надо. Пару раз были глюки - символы писались неправильно как будто повредился массив знакогенератора сброс из меню не помог, почему? В другой раз дисплей погас совсем. (помогало только разобрать корпус и замкнуть вывод reset с землей). Собственно главный недостаток - я собирал эти часы в надежде что они будут "эталоном" точности во всей квартире, чтобы за месяц не боле но к сожалению это не так. Шаг корректировки слишком велик. 0,08. Если шаг 0,08 сек в час то в самом худшем случае погрешность будет 0,04. 0,04*24*30*12/60=5 минут в год, хочу точнее! Может быть уже есть версия где этот шаг уменьшен раза в 2-4? Если таковой версии нету, можно мне какую-нибудь свежую версию исходников (9ти разрядный индикатор) где, у термометров можно было установить режим отбрасывания первого нуля?
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

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

Сообщение DimAlt »

можно мне какую-нибудь свежую версию исходников

Вот здесь http://startcd.narod.ru/clock/clock.html исходник и прошивки.
Для улучшения коррекции, ее можно производить не раз в час, а например раз в сутки (если уход в сутки у Вас не превышает макс. значение коррекции) в исходнике поменять это

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

if ( isr_1sek_ )//прошла секунда
   {
   correct=0;
   if (++hour[h_sek]>=60)
      {
      hour[h_sek] =0;
      if (++hour[h_min]>=60)
         {
         //if ( corr_flag & _BV(fl_corr_znak_pl) )//корекция часов ЭТО ПЕРЕНЕСТИ
         //   correct=correction;//для убыстрения
         //   else
         //   correct= 0x00-correction;
         
         hour[h_min] =0;
         hour[h_hour]++;
   
         if (hour[h_hour]>=24)
            {
            hour[h_hour]=0;
if ( corr_flag & _BV(fl_corr_znak_pl) )//корекция часов   СЮДА
      correct=correction;//для убыстрения
      else
      correct= 0x00-correction;


Можно коррекцию производить через несколько часов(если 24 много).. исходник есть. Если не получится то скомпилю сам.
Ответить

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