DS1307 используя аппаратный I2C

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Merzavec
Родился
Сообщения: 18
Зарегистрирован: Пт мар 14, 2008 03:31:18

DS1307 используя аппаратный I2C

Сообщение Merzavec »

Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Сообщение Danko »

Не все.

Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.

Да и длина кода в обоих случаях примерно одинакова.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Merzavec
Родился
Сообщения: 18
Зарегистрирован: Пт мар 14, 2008 03:31:18

Сообщение Merzavec »

Danko писал(а):Не все.

какой конкретно пример?

Danko писал(а):Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.

складывается впечатление, что Протеус для многих- самоцель.

Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.

на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.

еще раз- пожалуйста,примеры, если таковые имеются )
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Могу предложить на АСМе.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Qwertty
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Сб окт 31, 2009 12:34:44

Сообщение Qwertty »

Merzavec писал(а):На время исполнения програмного I2C отключаются прерывания

Зачем? Это синхронный интерфейс, задержки в нем вполне допустимы.
Программный I2C часто используется из за свободы выбора пинов контроллера. Для удобства разводки платы например.
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Merzavec писал(а):Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32

Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.
«И всё-таки она вертится!»
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Danko »

Рабочая библиотека. Работает и в железе и в Протеусе.

Я ранее писал, что в Протеусе аппаратный TWI не работает.

Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Вложения
ds1307_twi.zip
проверено в WinAVR, в CVAVR, в железе (мега8), в Протеусе 7.7SP2
(1.15 КБ) 1152 скачивания
Последний раз редактировалось Danko Ср июн 30, 2010 16:09:12, всего редактировалось 2 раза.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Danko писал(а):Рабочая библиотека. Работает и в железе и в Протеусе.

Я ранее писал, что в Протеусе аппаратный TWI не работает.

Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.

Расскажите плиз в кратце как ею пользоваться для mega16.
«И всё-таки она вертится!»
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение 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 то

Код: Выделить всё

rtc_write(АДРЕС, ДАННЫЕ);

если прочесть то

Код: Выделить всё

tmp = rtc_read(АДРЕС); 

в принципе и все. Как инициализировать в мега16 TWI я думаю разберетесь сами.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Danko писал(а):Нужен живой пример пожалуйста:

A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливость :oops: я ещо только учусь. Сегодня вечером буду пробовать.
«И всё-таки она вертится!»
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Danko »

twi_start, twi_stop, twi_write, twi_read - нет.

А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.

rtc_init - да. Функция инициализации DS1307.

В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.

Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:

Код: Выделить всё

rtc_init(0, 0, 0);
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Danko писал(а):twi_start, twi_stop, twi_write, twi_read - нет.

А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.

rtc_init - да. Функция инициализации DS1307.

В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.

Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:

Код: Выделить всё

rtc_init(0, 0, 0);

Начитался даташитов - с этим вроде понятно. Непонятно как по даной формуле посчитать частоту SCL http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/18_3.htm частоту брать в герцах? значение регистров брать в десятичной системе исчисления я так понимаю? Частоту нужно выставить точно 100кГц?
«И всё-таки она вертится!»
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Danko »

Apparatchik, у Вас два пути: правильный и простой.

правильный это выставить значения TWI-регистров по формуле из даташника,

а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.

Выбирать Вам.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Вот я хочу правильный, тоесть хочу разобратся как считать по формуле см. пост выше. Пока выставил как в вашом примере на мега8 - в протеусе работает.

Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
«И всё-таки она вертится!»
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Apparatchik писал(а):Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.

Всё получилось!!! Остаётся вопрос про формулу.

P.S. Можно ли обращатся к отдельным битам например регистра минут и как?
«И всё-таки она вертится!»
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Могу я как-то мешать ходу часов? Иногда ход секунд замирает на 2-3 секунды и идёт дальше (это на реальном железе). Если бы контроллер тормозил, то при следуйщем опросе время бы виравнивалось, а оно так и отстаёт на время замирания значит тормозит RTC.
Выноваты помехи или частота или что-то другое?
«И всё-таки она вертится!»
Аватара пользователя
Danko
Сверлит текстолит когтями
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Danko »

скорее всего глючит сама DS1307.

Если есть возможность то проверь на другой МС.

У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту

Apparatchik писал(а):Можно ли обращаться к отдельным битам например регистра минут и как?
информация считывается побайтно. Считал байт и делай с ним что хочешь.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: DS1307 используя аппаратный I2C

Сообщение Apparatchik »

Danko писал(а):скорее всего глючит сама DS1307.

Если есть возможность то проверь на другой МС.

Блин а я её впаял намертво :(
«И всё-таки она вертится!»
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Секретный кот »

А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Даже остановленные часы два раза в сутки показывают правильное время.
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: DS1307 используя аппаратный I2C

Сообщение Rimsky »

Библиотека работы с TWI на WinAVR
Вложения
i2c.rar
(6.45 КБ) 724 скачивания
Ответить

Вернуться в «Периферия»