Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.03.2011, 19:16
|
#11
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
А этапы инициализации у меня правильные??? Последовательность не важна??? Или сначала установить время, а потом только вкл. (CH=0) ?
P.S. Я пока кварц из часов припаяю.
|
|
|
|
18.03.2011, 19:17
|
#12
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,729
Сказал спасибо: 2,437
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
ПОмню, пытался завести эту 1307. Там толи задержка при пуске где-то нужна, то ли что.Не помню уже. С бубном, но завелась.
|
|
|
|
18.03.2011, 19:18
|
#13
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Сообщение от baiderin
|
ПОмню, пытался завести эту 1307. Там толи задержка при пуске где-то нужна, то ли что.Не помню уже. С бубном, но завелась.
|
Вспоминайте, очень надо
|
|
|
|
18.03.2011, 19:53
|
#14
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Поставил кварц из часов. Всё заработало.
Сделал выводы:
1. Если микросхема (кварц) только что из магазина, это не значит что она рабочая...
2. Не надо паять в 12 часов ночи, а потом с утра вопросы на форумах задавать (про осциллограф я вчера не подумал).
И последний вопрос. Где лучше опрашивать DS1307 ? По таймеру или в основном цикле? Просто не хочется дополнительно нагружать основной цикл этим:
Код:
|
rtc_get_time(&hour,&min,&sec); //считать время
rtc_get_date(&day,&month,&year); //считать дату
min = bcd2bin(min);
hour = bcd2bin(hour);
... |
Пока преобразует... А приэтом за пультом ДУ надо ещё следить. К тому же год, месяц, дату достаточно вызвать 1 раз в сутки. У меня ATMega8. Заняты все внешние прерывания (TSOP и синхронизация с сетью) и 2 таймера. Остался последний таймер. Что если настроить его на 10 мс, ввести переменную time_status. По переполнению таймера увеличивать её на 1. И в основном цикле проверять если ›6000 (60 сек) то запрашивать время. Ну как то так:
Код:
|
int time_status = 0;
...
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
time_status++;
}
...
while (1) {
...
if (time_status › 6000) {
time_status = 0;
rtc_get_time(&hour,&min,&sec); //считать время
min = bcd2bin(min);
hour = bcd2bin(hour);
... // вывод на ЖКИ
if (hour == 0) {
rtc_get_date(&day,&month,&year); //считать дату
... // вывод на ЖКИ
}
}
...
} |
Насколько оправдан такой подход?
Последний раз редактировалось mr_smit; 18.03.2011 в 20:17.
|
|
|
|
18.03.2011, 20:04
|
#15
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Такой подход вообще не оправдан, равно как и применение этой пустой меги. Ставьте проц с внешним генератором, запускайте RTC нем и все у вас получится. Я год назад купил подобные часы, если не эти же самые. Так до сих пор не применил нигде. Глупо как-то вешать отдельно такую лабуду. Вот когда у вас три-пять устройств на i2c, тогда еще можно. Даже с точки зрения экономии электричества совершенно не оправдано.
|
|
|
|
18.03.2011, 20:04
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Что делает TIMER1 понятно. Для чего используется TIMER0?
|
|
|
|
18.03.2011, 20:21
|
#17
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Сообщение от omercury
|
Что делает TIMER1 понятно. Для чего используется TIMER0?
|
TIMER0 - отсчет интервалов для приема команд от пульта ДУ.
TIMER1 - открытие симистора и формирование импульса для открытия
Так всё же. Как быть? Чтобы не гонять постоянное считывание времени в основном цикле?
P.S.
И ещё. Сейчас время/дата выводятся в формате, например, 5 часов 7 минут. Как вывести 05 часов 07 минут?
Код:
|
char cnt[];
...
sprintf(cnt,"%u:%u:%u",hour,min,sec); // преобразование времени в строку
put_string(20, 90,cnt, 0x07E0, 2); // выводим на экран |
Как изменить форматирование sprintf ?
|
|
|
|
18.03.2011, 20:23
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Так получится?
PHP код:
|
sprintf(cnt,"%2u:%2u:%2u",hour,min,sec);
|
|
|
|
|
18.03.2011, 20:49
|
#19
|
Временная регистрация
Регистрация: 14.09.2009
Сообщений: 87
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Сообщение от omercury
|
Так получится?
PHP код:
|
sprintf(cnt,"%2u:%2u:%2u",hour,min,sec);
|
|
Вместо нолика получилось пустое место (перед двойкой)
Последний раз редактировалось mr_smit; 18.03.2011 в 21:05.
|
|
|
|
18.03.2011, 21:10
|
#20
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: DS1307 стоят. Хотя CH = 0. Почему???
Теперь осталось найти, какой символ поставить перед %...($ - hex и т.д.)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:26.
|
|