Одновременная работа трех таймеров в ATMega8. Идет сбой.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Поставил:

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

char cnt[30];
ничего не поменялось

При установке:

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

rtc_set_time (bin2bcd(19),bin2bcd(45),bin2bcd(0));
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11));
На экране: 03.06.04 и 04:45:00 Т.е. путаются данные

А минут через 10 - 11 становится 06.04.11 и дальше всё идет нормально :(
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

1. При инициализации часов и установки даты/времени, а также ЧТЕНИЯ даты (!)добавьте задержки, чтобы тайминги соответствовали даташиту:

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

rtc_init (0,0,0);
//делай
DS1307_on ();
//делай
rtc_set_time (bin2bcd(19),bin2bcd(0),bin2bcd(0));
//делай
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11)); 
//делай !!!! ОБЯЗАТЕЛЬНО
rtc_get_date(&day,&month,&year); //считать дату
2. Так понимаю, время/дату выводит этот кусок:

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

      if (count_RTC > 1000) {          // чтобы не опрашивать DS1307 слишком часто
        count_RTC = 0;
        
        rtc_get_time(&hour,&min,&sec);   //считать время 
        sec = bcd2bin(sec);
        min = bcd2bin(min);
        hour = bcd2bin(hour);
        
        bgcolor = 0x95BF;   // дата/время
        sprintf(cnt,"%02u:%02u:%02u",hour,min,sec);
        put_string(106, 1, cnt, 0x001F, 1);
        
        if (min == 0) {
          rtc_get_date(&day,&month,&year); //считать дату
          //DayOfWeek = bcd2bin(rtc_read(0x03));   // чтение дня недели
          day = bcd2bin(day);
          month = bcd2bin(month);
          year = bcd2bin(year);
          
          bgcolor = 0x95BF;   // дата/время
          sprintf(cnt,"%02u.%02u.%02u",day,month,year);        
          put_string(0, 120, cnt, 0x001F, 1); 
        }          
      }
- Часы опрашиваются каждые 33мс, это часто, увеличьте предел до 3000 и будет как раз почти 100 мс - более чем достаточно
- Частота клока на SCL у вас 400 кГц. Тогда когда даташит на ds1307 говорит ясно и понятно:
SCL Clock Frequency fSCL 100 kHz max
Соответственно, непонятно из каких соображений выбирался клок
- Причина этого:
А минут через 10 - 11 становится 06.04.11
также видна из кода - дата обновляется каждый час (if(min==0)...), соответственно эта проверка и наступает примерно через 10-15мин - смотря какими минутами инициализируете.
Из всего этого можно сделать вывод, что время устанавливается неправильно при инициализации, дата правильно (повторное чтение верное), но первое чтение даты происходит неправильно. Причина, скорее всего - отсутствие задержек и, возможно, завышенная в четыре раза частота клока часов. Либо и то и другое...

А, вообще, установка времени включением в определенный момент, немного по китайски. По хорошему - часы надо прошивать два раза - первый раз чтоб время поставить, второй раз уже прошивкой в которой отключена установка времени - чтоб часы не сбивать, когда электричество кончится... Но добавить возможность установки с пульта еще есть, хоть и непросто при нынешней организации программы..
ЗЫ. Похоже, cnt[16] хватит за глаза...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Goodefine писал(а):

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

rtc_init (0,0,0);
//делай
DS1307_on ();
//делай
rtc_set_time (bin2bcd(19),bin2bcd(0),bin2bcd(0));
//делай
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11));
//делай !!!! ОБЯЗАТЕЛЬНО
rtc_get_date(&day,&month,&year); //считать дату
...
А, вообще, установка времени включением в определенный момент, немного по китайски. По хорошему - часы надо прошивать два раза - первый раз чтоб время поставить, второй раз уже прошивкой в которой отключена установка времени - чтоб часы не сбивать, когда электричество кончится... Но добавить возможность установки с пульта еще есть, хоть и непросто при нынешней организации программы..
ЗЫ. Похоже, cnt[16] хватит за глаза...
Ставил задержки по 100 мс. То же самое. Частота у меня 100 кГц. Просто переключаю на 400 кГц на время чтения из 24LC256. Иначе очень медленнно выводится картинка. Потом обратно на 100 кГц

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

void Draw_Bg_from_Eeprom(void) {
  
  WRCMD(0xEF90);
  WRCMD(0x0504); // ориентация
  WRCMD(0x0800); // координата X1
  WRCMD(0x0983); // координата X2 (83 в hex равно 131 в dec)
  WRCMD(0x0A00); // координата Y1
  WRCMD(0x0BAF); // координата Y2 (AF в hex равно 175 в dec)

  TWBR=0x0C;       // 400 kHz i2c
  ....
  // читаем и выводим на экран
  ....
  TWBR=0x48;    // 100 kHz i2c     
}
дата обновляется каждый час (if(min==0)...),
Я сам это понял вчера. Не стал писать на форум :)

А насчет установки времени и даты я прекрасно понимаю. Хочу сделать установку с пульта. Коды клавиш 0-9 осциллографом уже посмотрел. Просто пока и из кода не получается это сделать.

Попробую задержки по 500 мс добавить. Отпишусь вечером.

P.S. Спасибо большое что пытаетесь помочь
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

Ставил задержки по 100 мс
Везде? Тогда еще нужно поставить задержку перед rts_init, поскольку часы вы все равно дергали 400 кГц, х/з как они могут реагировать, а кнопки ресет там нету... Можно попробовать не вычитывать еепромку. Или меньше 100 кГц сделать. Мне кажется дело в таймингах - в модели все корректно прописывается..
ЗЫ. И схемку покажите...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Схема самая самая первая, без переделок. 4-х месячной давности. Нет второй EEPROM. И неправильный делитель напряжения. И подсветка дисплея собрана на LM317, резисторами подобрано 10,4 В на выходе. Некоторые выводы чуть не совпадают. Но принцип ясен.
3dde30be9ad0.jpg
(180.4 КБ) 513 скачиваний
Нельзя всё знать, достаточно понимать.
Реклама
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

Вы уверены что еепром не оказывает влияния на сигнальные линии? Некоторые устройства квадратной шины это умеют...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение clawham »

у меня нет 1307 чтоб попробывать...но меня мучает один вопрос - а как 1307 узнает чтио сейчас с ним разговаривают? а не с еепромом? адресом же вроде? а на какой скорости вы адрес для еепрома передаёте? а разве в этот же самый момент 1307 не на той же линии висит?

может нужно было бы разнести эти устройства? на разные шины...или снимать с дски клок на время работы еепромов
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

В общем оставил частоту TWI неизменной - 100 кГц. Долго экран заливается (секунд 15), ну уже ладно, это только один раз при включением. Понаставил задержек:

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

delay_ms(250);
rtc_init (0,0,0);
delay_ms(250);
DS1307_on ();
delay_ms(250);
rtc_set_time (bin2bcd(20),bin2bcd(26),bin2bcd(0));
delay_ms(250);
rtc_set_date (bin2bcd(7),bin2bcd(4),bin2bcd(11)); 

delay_ms(250);
rtc_get_date(&day,&month,&year); //считать дату
Теперь всё нормально! Работает так как я хочу! Спасибо за помощь!!!!!

P.S. Добавлю настройку времени с пульта. Если не получится вас уже дергать тогда не буду. Будет просто 2 прошивки, одна с настройкой времени, вторая рабочая. Ещё раз спасибо!!!!!
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

mr_smit писал(а):В общем оставил частоту TWI неизменной - 100 кГц....
А что, при прочих равных, при переключении глюки сохраняются?
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Ээээ.... :dont_know: сейчас попробую
Нельзя всё знать, достаточно понимать.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение GP1 »

mr_smit писал(а):Ну во-первых это не простой диммер.
...
3. Подключены часы DS1307
...
2 таймера нормально работают, но вот отмерить время (10-15 сек) не могу (3-им таймером)
а если считать секундные импульсы от DS1307? или на таймере - принипиально?
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Странность какая то. Попробовал и на 400 кГц и на 100 кГц. Убрал установку времени из прошивки. Т.е. часы при отключении питания продолжают идти (батарейка подключена). Но при включении питания минуты отображаются всегда 02. Часы как надо, секунды видимо тоже. Но минуты всегда 02.

Похоже при наличии задержек при инициализации, изменение скорости TWI никак не сказывается на DS1307. А 02 вместо минут - это опять какой то неведомый глюк. Бог с ним, надоело уже.
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

mr_smit писал(а): Похоже при наличии задержек при инициализации, изменение скорости TWI никак не сказывается на DS1307. А 02 вместо минут - это опять какой то неведомый глюк. Бог с ним, надоело уже.
Т.е. достаточно задержек? А неведомый глюк - может быть это как раз и дерганье часов также, при работе с еепром-кой..
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Ну можно попробовать увеличить задержки до 400-500 мс. Но DS1307 всё равно никак не заблокируешь на время чтения из EEPROMa. Питание отключать на это время разве что. Транзистор например повесить. Но это как то жестко. Кстати встречал на англоязычных форумах, что у людей тоже были проблемы с совместной работой DS1307 и 24LCxx
Нельзя всё знать, достаточно понимать.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение Goodefine »

Питание не нужно, а вот [от]коммутировать сигнальные линии на время общения с памятью, в принципе, не слишком большой грех, если дело в ней, конечно...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Чет меня осенило. А что если сначала считать время, а потом залить экран???!!! Т.е. первым делом к DS1307 обратиться. Сейчас так и сделаю.

Так здорово... прям никак не наиграюсь... :) Худо бедно работает! :)
Untitled-1.jpg
(230.14 КБ) 474 скачивания
DSC04650.jpg
(237.25 КБ) 490 скачиваний
Последний раз редактировалось mr_smit Чт апр 07, 2011 22:23:30, всего редактировалось 1 раз.
Нельзя всё знать, достаточно понимать.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Нет, не помогло это. Так же при включении вместо минут считывается 02 :(
Нельзя всё знать, достаточно понимать.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Всю ночь часы шли от батарейки. Сейчас с утра специально включил проверил. Дату показывает 08.04.11 т.е. правильную сегодняшнюю, минуты опять 02
Нельзя всё знать, достаточно понимать.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение mr_smit »

Оно работает!!! Я в экстазе...!!!
DSC04651.jpg
(230.29 КБ) 325 скачиваний
DSC04654.jpg
(167.99 КБ) 368 скачиваний
И смотрится неплохо!
Нельзя всё знать, достаточно понимать.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Одновременная работа трех таймеров в ATMega8. Идет сбой.

Сообщение CS16AMX »

красава!!!))) а типа под экраном TSOP IR заготовленный?) типа он торчит глазом ,а заним кнопка в упор какой то впаяная ) он и нажимемый и пультом управляемый)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»