Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Сб янв 02, 2010 03:24:30
Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Сб янв 02, 2010 10:01:17
Не все.
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
Да и длина кода в обоих случаях примерно одинакова.
Сб янв 02, 2010 14:35:36
Danko писал(а):Не все.
какой конкретно пример?
Danko писал(а):Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
складывается впечатление, что Протеус для многих- самоцель.
Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.
еще раз- пожалуйста,примеры, если таковые имеются )
Сб янв 02, 2010 16:17:22
Могу предложить на АСМе.
Сб янв 02, 2010 19:11:19
Merzavec писал(а):На время исполнения програмного I2C отключаются прерывания
Зачем? Это синхронный интерфейс, задержки в нем вполне допустимы.
Программный I2C часто используется из за свободы выбора пинов контроллера. Для удобства разводки платы например.
Вт июн 29, 2010 00:59:16
Merzavec писал(а):Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.
Вт июн 29, 2010 16:47:57
Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
- Вложения
-
- ds1307_twi.zip
- проверено в WinAVR, в CVAVR, в железе (мега8), в Протеусе 7.7SP2
- (1.15 KiB) Скачиваний: 1132
Последний раз редактировалось
Danko Ср июн 30, 2010 16:09:12, всего редактировалось 2 раз(а).
Вт июн 29, 2010 21:15:03
Danko писал(а):Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Расскажите плиз в кратце как ею пользоваться для mega16.
Ср июн 30, 2010 09:11:23
Нужен живой пример пожалуйста:
- Код:
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 я думаю разберетесь сами.
Ср июн 30, 2010 15:31:43
Danko писал(а):Нужен живой пример пожалуйста:
A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливость
я ещо только учусь. Сегодня вечером буду пробовать.
Ср июн 30, 2010 16:02:44
twi_start, twi_stop, twi_write, twi_read -
нет.
А если более точно то
да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init -
да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:
- Код:
rtc_init(0, 0, 0);
Ср июн 30, 2010 20:15:00
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кГц?
Чт июл 01, 2010 20:08:18
Apparatchik, у Вас два пути: правильный и простой.
правильный это выставить значения TWI-регистров по формуле из даташника,
а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.
Выбирать Вам.
Чт июл 01, 2010 21:00:55
Вот я хочу правильный, тоесть хочу разобратся как считать по формуле см. пост выше. Пока выставил как в вашом примере на мега8 - в протеусе работает.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Чт июл 01, 2010 21:37:51
Apparatchik писал(а):Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Всё получилось!!! Остаётся вопрос про формулу.
P.S. Можно ли обращатся к отдельным битам например регистра минут и как?
Вт июл 06, 2010 18:07:00
Могу я как-то мешать ходу часов? Иногда ход секунд замирает на 2-3 секунды и идёт дальше (это на реальном железе). Если бы контроллер тормозил, то при следуйщем опросе время бы виравнивалось, а оно так и отстаёт на время замирания значит тормозит RTC.
Выноваты помехи или частота или что-то другое?
Вт июл 06, 2010 18:26:40
скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту
Apparatchik писал(а):Можно ли обращаться к отдельным битам например регистра минут и как?
информация считывается побайтно. Считал байт и делай с ним что хочешь.
Вт июл 06, 2010 18:39:09
Danko писал(а):скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
Блин а я её впаял намертво
Чт июл 08, 2010 00:54:10
А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Чт июл 08, 2010 05:44:22
Библиотека работы с TWI на WinAVR
- Вложения
-
- i2c.rar
- (6.45 KiB) Скачиваний: 707
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.