Страница 1 из 5
DS1307 используя аппаратный I2C
Добавлено: Сб янв 02, 2010 03:24:30
Merzavec
Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Добавлено: Сб янв 02, 2010 10:01:17
Danko
Не все.
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
Да и длина кода в обоих случаях примерно одинакова.
Добавлено: Сб янв 02, 2010 14:35:36
Merzavec
Danko писал(а):Не все.
какой конкретно пример?
Danko писал(а):Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
складывается впечатление, что Протеус для многих- самоцель.
Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.
еще раз- пожалуйста,примеры, если таковые имеются )
Добавлено: Сб янв 02, 2010 16:17:22
Pooher
Могу предложить на АСМе.
Добавлено: Сб янв 02, 2010 19:11:19
Qwertty
Merzavec писал(а):На время исполнения програмного I2C отключаются прерывания
Зачем? Это синхронный интерфейс, задержки в нем вполне допустимы.
Программный I2C часто используется из за свободы выбора пинов контроллера. Для удобства разводки платы например.
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июн 29, 2010 00:59:16
Apparatchik
Merzavec писал(а):Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июн 29, 2010 16:47:57
Danko
Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июн 29, 2010 21:15:03
Apparatchik
Danko писал(а):Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Расскажите плиз в кратце как ею пользоваться для mega16.
Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 09:11:23
Danko
Нужен живой пример пожалуйста:
Код: Выделить всё
unsigned char myhour, mymin, mysec; // текушее время в двоично-десятичном исчислении
unsigned char mydate, mymonth, myyear; // текущий календарь в двоично-десятичном исчислении
rtc_get_time(&myhour, &mymin, &mysec); // читаем из DS-ки время
rtc_get_date(&mydate, &mymonth, &myyear); // читаем из DS-ки календарь
rtc_set_time(myhour, mymin, mysec); // пишем в DS-ку время
rtc_set_date(mydate, mymonth, myyear); // пишем в DS-ку календарь
не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик
если нужно записать что-то в память DS1307 то
если прочесть то
в принципе и все. Как инициализировать в мега16 TWI я думаю разберетесь сами.
Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 15:31:43
Apparatchik
Danko писал(а):Нужен живой пример пожалуйста:
A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливость

я ещо только учусь. Сегодня вечером буду пробовать.
Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 16:02:44
Danko
twi_start, twi_stop, twi_write, twi_read -
нет.
А если более точно то
да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init -
да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:
Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 20:15:00
Apparatchik
Danko писал(а):twi_start, twi_stop, twi_write, twi_read -
нет.
А если более точно то
да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init -
да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:
Начитался даташитов - с этим вроде понятно. Непонятно как по даной формуле посчитать частоту SCL
http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/18_3.htm частоту брать в герцах? значение регистров брать в десятичной системе исчисления я так понимаю? Частоту нужно выставить точно 100кГц?
Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 01, 2010 20:08:18
Danko
Apparatchik, у Вас два пути: правильный и простой.
правильный это выставить значения TWI-регистров по формуле из даташника,
а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.
Выбирать Вам.
Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 01, 2010 21:00:55
Apparatchik
Вот я хочу правильный, тоесть хочу разобратся как считать по формуле см. пост выше. Пока выставил как в вашом примере на мега8 - в протеусе работает.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 01, 2010 21:37:51
Apparatchik
Apparatchik писал(а):Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Всё получилось!!! Остаётся вопрос про формулу.
P.S. Можно ли обращатся к отдельным битам например регистра минут и как?
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июл 06, 2010 18:07:00
Apparatchik
Могу я как-то мешать ходу часов? Иногда ход секунд замирает на 2-3 секунды и идёт дальше (это на реальном железе). Если бы контроллер тормозил, то при следуйщем опросе время бы виравнивалось, а оно так и отстаёт на время замирания значит тормозит RTC.
Выноваты помехи или частота или что-то другое?
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июл 06, 2010 18:26:40
Danko
скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту
Apparatchik писал(а):Можно ли обращаться к отдельным битам например регистра минут и как?
информация считывается побайтно. Считал байт и делай с ним что хочешь.
Re: DS1307 используя аппаратный I2C
Добавлено: Вт июл 06, 2010 18:39:09
Apparatchik
Danko писал(а):скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
Блин а я её впаял намертво

Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 08, 2010 00:54:10
Секретный кот
А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 08, 2010 05:44:22
Rimsky
Библиотека работы с TWI на WinAVR