Заголовок сообщения: DS1307 используя аппаратный I2C
Добавлено: Сб янв 02, 2010 03:24:30
Родился
Зарегистрирован: Пт мар 14, 2008 03:31:18 Сообщений: 18
Рейтинг сообщения:0
Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Не все.
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
Да и длина кода в обоих случаях примерно одинакова.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Зарегистрирован: Пт мар 14, 2008 03:31:18 Сообщений: 18
Рейтинг сообщения:0
Danko писал(а):
Не все.
какой конкретно пример?
Danko писал(а):
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
складывается впечатление, что Протеус для многих- самоцель.
Danko писал(а):
Да и длина кода в обоих случаях примерно одинакова.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.
еще раз- пожалуйста,примеры, если таковые имеются )
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Могу предложить на АСМе.
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
На время исполнения програмного I2C отключаются прерывания
Зачем? Это синхронный интерфейс, задержки в нем вполне допустимы.
Программный I2C часто используется из за свободы выбора пинов контроллера. Для удобства разводки платы например.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера. Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Вт июн 29, 2010 16:47:57
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Вложения:
Комментарий к файлу: проверено в WinAVR, в CVAVR, в железе (мега8), в Протеусе 7.7SP2 ds1307_twi.zip [1.15 KiB]
Скачиваний: 1133
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Последний раз редактировалось Danko Ср июн 30, 2010 16:09:12, всего редактировалось 2 раз(а).
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 09:11:23
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Нужен живой пример пожалуйста:
Код:
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. Рассказ нечаянного революционера"
A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливость я ещо только учусь. Сегодня вечером буду пробовать.
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Ср июн 30, 2010 16:02:44
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
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. Рассказ нечаянного революционера"
А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
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кГц?
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Чт июл 01, 2010 20:08:18
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
Apparatchik, у Вас два пути: правильный и простой.
правильный это выставить значения TWI-регистров по формуле из даташника,
а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.
Выбирать Вам.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Вот я хочу правильный, тоесть хочу разобратся как считать по формуле см. пост выше. Пока выставил как в вашом примере на мега8 - в протеусе работает.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Всё получилось!!! Остаётся вопрос про формулу.
P.S. Можно ли обращатся к отдельным битам например регистра минут и как?
Могу я как-то мешать ходу часов? Иногда ход секунд замирает на 2-3 секунды и идёт дальше (это на реальном железе). Если бы контроллер тормозил, то при следуйщем опросе время бы виравнивалось, а оно так и отстаёт на время замирания значит тормозит RTC. Выноваты помехи или частота или что-то другое?
Заголовок сообщения: Re: DS1307 используя аппаратный I2C
Добавлено: Вт июл 06, 2010 18:26:40
Сверлит текстолит когтями
Карма: 13
Рейтинг сообщений: 40
Зарегистрирован: Пн окт 13, 2008 11:45:54 Сообщений: 1287 Откуда: РФ, Крым, г.Бахчисарай
Рейтинг сообщения:0
скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту
Apparatchik писал(а):
Можно ли обращаться к отдельным битам например регистра минут и как?
информация считывается побайтно. Считал байт и делай с ним что хочешь.
_________________ Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений. ---------- Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения