Я тоже все микрухи на панельки ставил, но это особый случай. Я начитался что от панельки будет ёмкость паразитная и точности хода не будет вот и впаял намертво.Секретный кот писал(а):А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
DS1307 используя аппаратный I2C
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
«И всё-таки она вертится!»
- Реклама
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев 
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
А корпус кварца заземлять ненужно? Ну тесть крепить его петлёй к плате а петлю на землю.Danko писал(а):я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
нужно.Apparatchik писал(а):А корпус кварца заземлять ненужно?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
В библиотеке для програмного I2C число сразу в двоичном формате. Можно как-то в вашу библиотеку запихнуть например функцию bcd2bin и bin2bcd, чтоб в основном коде не мучится?Danko писал(а):не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик
«И всё-таки она вертится!»
- Реклама
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Выводить одинаково, а вот когда время выставляеш например min++ приходится городить switch или кучу проверок или использовать указаные функции. Если есть другой способ поделитесь плиз.Danko писал(а):я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
отправить время в буфер экрана (выполняется несколько раз в секунду)
реакция на нажатие кнопки "+" (выполняется один раз в пятилетку
)
все это для двоично-десятичного счета
А теперь для двоичного: т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10.
Зачем?
Код: Выделить всё
rtc_get_time(&hour, &min, &sec);
digit_out[0] = hour >> 4;
digit_out[1] = hour & 0x0F;
digit_out[2] = min >> 4;
digit_out[3] = min & 0x0F;Код: Выделить всё
tmp=bcd2bin(hour);
tmp++; if (tmp >= 24) tmp=0; // часы +1
hour=bin2bcd(tmp);
rtc_set_time(hour, min, sec);А теперь для двоичного:
Код: Выделить всё
rtc_get_time(&hour, &min, &sec);
digit_out[0] = hour / 10;
digit_out[1] = hour % 10;
digit_out[2] = min / 10;
digit_out[3] = min % 10;Зачем?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
В выводе проблем нет нада либо сдвигать для десятков и обнулять старшие биты для едениц, либо делить на 10, наверно деление занимает больше ресурсов, но для меги16 или 8 думаю это несущественно. Что там одна строка кода что там (я считаю написаные мною строки, это неправильно, но для часов сойдёт)
Ну вы же всёравно используете эту функцию при hour++, значит и делите и умножаете на 10.Danko писал(а): т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10. Зачем?
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Да использую, но вопрос не в оптимальности кода, а в логике работы самой программы. Зачем тратить процессорное время на двойное преобразование.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
А можно всётаки взглянуть на оригинал. Вы меня переубедили, но всё-же хочется посмотреть как оно там устроено.Danko писал(а):я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Оригинал выглядит аналогично библиотеке из CVAVR.
файл DS1307.LIB лежит в папке lib.
Код: Выделить всё
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_start();
i2c_write(0xd1);
*sec=bcd2bin(i2c_read(1));
*min=bcd2bin(i2c_read(1));
*hour=bcd2bin(i2c_read(0));
i2c_stop();
}
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(bin2bcd(sec));
i2c_write(bin2bcd(min));
i2c_write(bin2bcd(hour));
i2c_stop();
}
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Re: DS1307 используя аппаратный I2C
Написал небольшую програмку для часов, а на индикаторе 25:25:25. Что это значит?
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Значит что на индикатор 25 подаётся*Trigger* писал(а):Написал небольшую програмку для часов, а на индикаторе 25:25:25. Что это значит?
«И всё-таки она вертится!»
Re: DS1307 используя аппаратный I2C
Написал программу:
Собрал на макетке, а ds-ка не тикает, на индикаторы выводится 25:25:25. На кнопку установки часов реагирует.
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Самое первое что бросилось в глаза
её там недолжно быть, она должна быть до "вечного цикла" тоесть перед while (1). И сбрасывать нужно только седбмой бит а не весь регистр иначе секунды будут обнулятся.
Переход по меткам тоже ненужен ведь оно и так вернётся в начало так как всё в цикле.
Вместо goto я бы использовал почитайте про оператор switch
Чтоб разбиратся дальше нужна схема.
Код: Выделить всё
rtc_write(0x00, 0x00);Переход по меткам тоже ненужен ведь оно и так вернётся в начало так как всё в цикле.
Вместо goto я бы использовал
Код: Выделить всё
default:break;Чтоб разбиратся дальше нужна схема.
«И всё-таки она вертится!»
Re: DS1307 используя аппаратный I2C
А как выделить седьмой бит? http://robozone.su/2008/03/06/ds1307-ch ... eni-s.html
Схема вот: Кварц естественно подключен.
А почему десятки часов и десятки минут сбрасываются, когда они равны единице? В программе сброс на 3 для часов и на 6 для минут...
Схема вот: Кварц естественно подключен.
А почему десятки часов и десятки минут сбрасываются, когда они равны единице? В программе сброс на 3 для часов и на 6 для минут...
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Я делаю так
Информация по моиму на индикаторы подаётся неправильно, например если 21 час то hour будет 0b0010101 и это подаётся в PORTD индикатор будет билиберду показывать. Просто вы используете програмный I2C и там из двоичнодесятичного (формат DS1307) преобразуется в двоичный. Если не переделывать схему то нужно преобразовывать в двоичнодесятичный формат
либо использовать апаратный I2C и библиотеку которую тут вылаживали.
Но в любом случае на индикаторах информация должна менятся хоть и неправильная. Сделайте пока без кнопок и главное меток, а потом допишете кнопки
Ну и отпишитесь конечно
.
Код: Выделить всё
tmp = rtc_read(0x00);
tmp &=~(1<<7);
rtc_write(0x00, tmp); //включение DS1307, бит 7 ноль
tmp = rtc_read(0x02);
tmp &=~(1<<6);
rtc_write(0x02, tmp); // бит 6 ноль - 24ох часовой режим
rtc_init(0, 1, 1); // включение генератора импульсов
// потом идёт основной цикл
while (1)
{
}
Код: Выделить всё
#include <bcd.h>
tmp=bin2bcd(hour);
PORTD=tmp;
Но в любом случае на индикаторах информация должна менятся хоть и неправильная. Сделайте пока без кнопок и главное меток, а потом допишете кнопки
Код: Выделить всё
while (1) {
rtc_get_time(&hour, &min, &sec); // читаем из DS-ки время
PORTA=sec; //вывод секунд
PORTB=min; //вывод минут
PORTD=hour; //вывод часов
delay_ms(100); //задержка
}
«И всё-таки она вертится!»
Re: DS1307 используя аппаратный I2C
Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Немножко доработал проэкт в протеусе чтоб было видно симуляцию, а также написал в программе как говорил више - всё работает!*Trigger* писал(а):Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.
Оба проэкта в архиве.
P.S. Да и запись
Код: Выделить всё
PORTA=0x00;- Вложения
-
- тест.rar
- (43.26 КБ) 326 скачиваний
«И всё-таки она вертится!»


