Например TDA7294

Форум РадиоКот • Просмотр темы - DS1307 используя аппаратный I2C
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 16:29:10

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 86 ]    , 2, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Чт июл 08, 2010 09:30:26 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Секретный кот писал(а):
А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...

Я тоже все микрухи на панельки ставил, но это особый случай. Я начитался что от панельки будет ёмкость паразитная и точности хода не будет вот и впаял намертво.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Чт июл 08, 2010 09:51:11 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев :kill:

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт июл 09, 2010 15:51:16 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Danko писал(а):
я отгибаю на DS-ке ноги для кварца (1 и 2) и подпаиваю к ним кварц, а микросхему вставляю в панельку. Убиваю двух зайцев :kill:

А корпус кварца заземлять ненужно? Ну тесть крепить его петлёй к плате а петлю на землю.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт июл 09, 2010 16:03:45 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
Apparatchik писал(а):
А корпус кварца заземлять ненужно?
нужно.

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 18:03:04 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Danko писал(а):
не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик

В библиотеке для програмного I2C число сразу в двоичном формате. Можно как-то в вашу библиотеку запихнуть например функцию bcd2bin и bin2bcd, чтоб в основном коде не мучится?

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 18:14:41 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 18:31:50 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Danko писал(а):
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.

Выводить одинаково, а вот когда время выставляеш например min++ приходится городить switch или кучу проверок или использовать указаные функции. Если есть другой способ поделитесь плиз.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 18:53:57 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
отправить время в буфер экрана (выполняется несколько раз в секунду)
Код:
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;
т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10.

Зачем?

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 19:06:29 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
В выводе проблем нет нада либо сдвигать для десятков и обнулять старшие биты для едениц, либо делить на 10, наверно деление занимает больше ресурсов, но для меги16 или 8 думаю это несущественно. Что там одна строка кода что там (я считаю написаные мною строки, это неправильно, но для часов сойдёт)

Danko писал(а):
т.е. внутри функции bcd2bin мы умножаем на 10, для того чтобы потом разделить на 10. Зачем?

Ну вы же всёравно используете эту функцию при hour++, значит и делите и умножаете на 10.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 20:11:44 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
Да использую, но вопрос не в оптимальности кода, а в логике работы самой программы. Зачем тратить процессорное время на двойное преобразование.

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 21:23:35 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Danko писал(а):
я ее оттуда специально удалил т.к. двоично-десятичное число проще выводить на индикатор.

А можно всётаки взглянуть на оригинал. Вы меня переубедили, но всё-же хочется посмотреть как оно там устроено.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пт окт 01, 2010 22:01:25 
Сверлит текстолит когтями
Аватар пользователя

Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54
Сообщений: 1287
Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения: 0
Оригинал выглядит аналогично библиотеке из CVAVR.
Код:
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();
}
файл DS1307.LIB лежит в папке lib.

_________________
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
----------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Вс янв 23, 2011 22:17:30 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Написал небольшую програмку для часов, а на индикаторе 25:25:25. Что это значит?

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Вс янв 23, 2011 22:33:38 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
*Trigger* писал(а):
Написал небольшую програмку для часов, а на индикаторе 25:25:25. Что это значит?

Значит что на индикатор 25 подаётся :) . А если серёзно то поподробней.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 17:04:15 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Написал программу:
Вложение:
программа2.c [7.74 KiB]
Скачиваний: 615

Собрал на макетке, а ds-ка не тикает, на индикаторы выводится 25:25:25. На кнопку установки часов реагирует.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 17:18:17 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Самое первое что бросилось в глаза
Код:
rtc_write(0x00, 0x00);

её там недолжно быть, она должна быть до "вечного цикла" тоесть перед while (1). И сбрасывать нужно только седбмой бит а не весь регистр иначе секунды будут обнулятся.

Переход по меткам тоже ненужен ведь оно и так вернётся в начало так как всё в цикле.
Вместо goto я бы использовал
Код:
default:break;
почитайте про оператор switch

Чтоб разбиратся дальше нужна схема.

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 17:50:32 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
А как выделить седьмой бит? http://robozone.su/2008/03/06/ds1307-ch ... eni-s.html
Схема вот:
Вложение:
тест.rar [18.31 KiB]
Скачиваний: 248

Кварц естественно подключен.
А почему десятки часов и десятки минут сбрасываются, когда они равны единице? В программе сброс на 3 для часов и на 6 для минут...

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 18:19:39 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
Я делаю так
Код:
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)
{

}


Информация по моиму на индикаторы подаётся неправильно, например если 21 час то hour будет 0b0010101 и это подаётся в PORTD индикатор будет билиберду показывать. Просто вы используете програмный I2C и там из двоичнодесятичного (формат DS1307) преобразуется в двоичный. Если не переделывать схему то нужно преобразовывать в двоичнодесятичный формат
Код:
#include <bcd.h>

tmp=bin2bcd(hour);
PORTD=tmp;

либо использовать апаратный I2C и библиотеку которую тут вылаживали.

Но в любом случае на индикаторах информация должна менятся хоть и неправильная. Сделайте пока без кнопок и главное меток, а потом допишете кнопки
Код:
while (1) {
rtc_get_time(&hour, &min, &sec); //  читаем из DS-ки время
            PORTA=sec;                    //вывод секунд
            PORTB=min;                    //вывод минут
            PORTD=hour;                   //вывод часов
            delay_ms(100);      //задержка
}


Ну и отпишитесь конечно :) .

_________________
«И всё-таки она вертится!»


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 18:23:35 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS1307 используя аппаратный I2C
СообщениеДобавлено: Пн янв 24, 2011 19:10:05 
Держит паяльник хвостом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 43
Зарегистрирован: Вс май 23, 2010 13:55:42
Сообщений: 908
Откуда: Украина, Александрия
Рейтинг сообщения: 0
*Trigger* писал(а):
Пробовал оставить только неправильную индикацию. Всё равно 25:25:25.

Немножко доработал проэкт в протеусе чтоб было видно симуляцию, а также написал в программе как говорил више - всё работает!
Оба проэкта в архиве.

P.S. Да и запись
Код:
PORTA=0x00;
и ей подобные в самом начале безполезная так, как при сбросе там и так ноль. После автогенератора кода нужно руками чистить, всё где присваивается ноль можно удалить.


Вложения:
тест.rar [43.26 KiB]
Скачиваний: 309

_________________
«И всё-таки она вертится!»
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 86 ]    , 2, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y