Page 1 of 1
Часы на ГРИ ин-14 (Atmega8-168)
Posted: 11 Feb 2018 14:59
by Denis_K
... на схем.нет попалась мне год-два назад статья
http://cxem.net/mc/mc282.php. Сделал быстро плату, взял исходник из статьи, а он не "работает" или у меня ума не хватает заставить его работать... Автор не хочет категорически выходить на контакт.
В исходнике не могу наладить работу с часами реального времени, остальное вроде бы работает...
Ах да, исходник написан в какой то другой среде, отличной от синтаксиса GCC, поэтому я перевел как знал... может просто чего то упустил?
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 18 Feb 2018 20:36
by Denis_K
Не пойму с DS1307 происходит только инициализация, остальные функции похоже не работают... обмен данными по I2C проходит сначала, а потом тишина.
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 19 Feb 2018 18:33
by IYra
Denis_K wrote:Не пойму с DS1307 происходит только инициализация, остальные функции похоже не работают... обмен данными по I2C проходит сначала, а потом тишина.
Сравнил два файла
I2c.c
IN-8_Clock
Code: Select all
#define I2C_SDA_PIN PD1 //линия SDA
#define I2C_SCL_PIN PD0 //линия SCL
IN-14clock
Code: Select all
#define I2C_SDA_PIN PINC1 //линия SDA
#define I2C_SCL_PIN PINC0 //линия SCL
Может надо
Code: Select all
#define I2C_SDA_PIN PC1 //линия SDA
#define I2C_SCL_PIN PC0 //линия SCL
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 19 Feb 2018 22:08
by Denis_K
Да пробовал и так и так. Работает что PC1, что PINC1...
При попытке настроить время в меню оно меняется, но не прописывается в ds-ку, так же сразу пытается показать истинное время из памяти ds, но тут же устанавливается на индикаторах 85 85. Может где-то по основной программе не вписано про чтение - запись? хотя вроде бы есть...
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 20 Feb 2018 18:10
by IYra
Denis_K wrote:Да пробовал и так и так. Работает что PC1, что PINC1...
И все равно лучше придерживаться оригинала.
Запустил в Протеусе оригинал - на И2с раз в секунду идет обмен.
На исправленном - нет обмена. Только в начале строка инициализации и зачем-то добавлена строка
считывания времени. После этого затык. А что если убрать вначале
rtc_get_date(&D, &m, &Y);
Оригинал
Code: Select all
/*******************************настройка переферии******************************/
i2c_init(); // иництализация протокола i2c
rtc_init(0, 1, 1); // иництализация DS1307
ow_set_bus(&PINB, &PORTB, &DDRB, PB5); // иництализация протокола 1-wire
Исправленный
Code: Select all
i2c_init(); // иництализация протокола i2c
rtc_init(0, 1, 1); // иництализация DS1307
rtc_get_date(&D, &m, &Y);
ow_set_bus(&PIND, &PORTD, &DDRD, PIND4); // иництализация протокола 1-wire
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 21 Feb 2018 10:36
by Denis_K
на И2с раз в секунду идет обмен
это выход тактовой частоты с 1307... выставляется при инициализации rtc_init(0, 1, 1), кстати пробовал если rtc_init(0, 0, 1) то выхода нет, как и положено по ДШ. Значит И2С работает и инициализация тоже проходит. Мне кажется что-то не так с считыванием и записью даты дс1307...
Добавлено спустя 12 часов 50 минут 43 секунды:
IYra, здравствуйте. А вообще нормально что инициализация включена в основной программе? я так понимаю с циклом... а запись - чтение однократно. Или так и должно быть?
Re: Часы на ГРИ ин-14 (Atmega8-168)
Posted: 21 Feb 2018 19:40
by IYra
Denis_K wrote:А вообще нормально что инициализация включена в основной программе? я так понимаю с циклом... а запись - чтение однократно. Или так и должно быть?
Инициализация происходит однократно вначале до цикла while
Оригинал (оставил для наглядности только I2c)
Code: Select all
/*******************************настройка переферии******************************/
i2c_init(); // иництализация протокола i2c
rtc_init(0, 1, 1); // иництализация DS1307
_delay_ms(100);
/********************************************************************************/
sei(); // включаем прерывания
set = 10;
out[0] = 10; out[1] = 10; out[2] = 0; // ндикация текущего режима отображения при включении
out[3] = vid+1; out[4] = 10; out[5] = 10;
_delay_ms(2000);
set = 0;
rtc_get_date(&d, &m, &y); //чтение даты для нормальной работы режимов отображения
while(1){
// чтение даты
}
такой порядок в оригинале и желательно его придерживаться (вплоть до задержек _delay)