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

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

Сообщение Merzavec »

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

Сообщение Danko »

Не все.

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

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

Сообщение Merzavec »

Danko писал(а):Не все.
какой конкретно пример?
Danko писал(а):Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
складывается впечатление, что Протеус для многих- самоцель.
Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.

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

Сообщение Pooher »

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

Сообщение Qwertty »

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

Сообщение Apparatchik »

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

Сообщение 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. Рассказ нечаянного революционера"
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

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

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

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

Сообщение 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. Рассказ нечаянного революционера"
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

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

Сообщение 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. Рассказ нечаянного революционера"
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение 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/micr ... 8/18_3.htm частоту брать в герцах? значение регистров брать в десятичной системе исчисления я так понимаю? Частоту нужно выставить точно 100кГц?
«И всё-таки она вертится!»
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

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

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

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

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

Сообщение Apparatchik »

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

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

Сообщение Apparatchik »

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

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

Сообщение Apparatchik »

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

Сообщение Danko »

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

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

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

Сообщение Apparatchik »

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

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

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

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

Сообщение Rimsky »

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

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