DS1307 используя аппаратный I2C
DS1307 используя аппаратный I2C
Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
- Реклама
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Не все.
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
Да и длина кода в обоих случаях примерно одинакова.
Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
Да и длина кода в обоих случаях примерно одинакова.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
какой конкретно пример?Danko писал(а):Не все.
складывается впечатление, что Протеус для многих- самоцель.Danko писал(а):Просто аппаратный I2C (правильно называть TWI) не работает в Протеусе, а каждому хочется увидеть, что он планирует собирать, и по сему от TWI уходят.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.
еще раз- пожалуйста,примеры, если таковые имеются )
- Реклама
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.Merzavec писал(а):Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Я ранее писал, что в Протеусе аппаратный 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. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Расскажите плиз в кратце как ею пользоваться для mega16.Danko писал(а):Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Нужен живой пример пожалуйста:не забудьте что в DS1307 не двоичный, а двоично-десятичный счетчик
если нужно записать что-то в память DS1307 то
если прочесть то
в принципе и все. Как инициализировать в мега16 TWI я думаю разберетесь сами.
Код: Выделить всё
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 то
Код: Выделить всё
rtc_write(АДРЕС, ДАННЫЕ);Код: Выделить всё
tmp = rtc_read(АДРЕС); Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливостьDanko писал(а):Нужен живой пример пожалуйста:
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
twi_start, twi_stop, twi_write, twi_read - нет.
А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init - да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:
А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init - да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:
Код: Выделить всё
rtc_init(0, 0, 0);Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Начитался даташитов - с этим вроде понятно. Непонятно как по даной формуле посчитать частоту SCL http://www.gaw.ru/html.cgi/txt/doc/micr ... 8/18_3.htm частоту брать в герцах? значение регистров брать в десятичной системе исчисления я так понимаю? Частоту нужно выставить точно 100кГц?Danko писал(а):twi_start, twi_stop, twi_write, twi_read - нет.
А если более точно то да т.е. они нужны, но только Вы напрямую к ним обращаться не будете.
rtc_init - да. Функция инициализации DS1307.
В сети есть даташник на DS1307 на русском. Почитайте про биты rs, sqwe, out.
Если 7 ножка DS1307 у Вас не используется то инициализация будет выглядеть так:Код: Выделить всё
rtc_init(0, 0, 0);
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Apparatchik, у Вас два пути: правильный и простой.
правильный это выставить значения TWI-регистров по формуле из даташника,
а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.
Выбирать Вам.
правильный это выставить значения TWI-регистров по формуле из даташника,
а простой: в кодегенераторе CVAVR выставить галочки и получить готовый код.
Выбирать Вам.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Вот я хочу правильный, тоесть хочу разобратся как считать по формуле см. пост выше. Пока выставил как в вашом примере на мега8 - в протеусе работает.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
«И всё-таки она вертится!»
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Всё получилось!!! Остаётся вопрос про формулу.Apparatchik писал(а): Функцией rtc_get_time время у меня получается читать, а могу ли я прочитать например только минуты так: min=rtc_read(0x01)? Что-то не выходит, ведь если теперь min сдвинуть вправо на 4 то получим десятки минут, а если убрать первые четыре бита то еденицы минут.
P.S. Можно ли обращатся к отдельным битам например регистра минут и как?
«И всё-таки она вертится!»
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Могу я как-то мешать ходу часов? Иногда ход секунд замирает на 2-3 секунды и идёт дальше (это на реальном железе). Если бы контроллер тормозил, то при следуйщем опросе время бы виравнивалось, а оно так и отстаёт на время замирания значит тормозит RTC.
Выноваты помехи или частота или что-то другое?
Выноваты помехи или частота или что-то другое?
«И всё-таки она вертится!»
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: DS1307 используя аппаратный I2C
скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту
Если есть возможность то проверь на другой МС.
У меня из 10 приобретенных DS1307 одна глючная попалась. Работает работает а потом не с того ни с сего часы начинают перескакивать, могут досчитать до 50 и более часов при этом минуты идут минута в минуту
информация считывается побайтно. Считал байт и делай с ним что хочешь.Apparatchik писал(а):Можно ли обращаться к отдельным битам например регистра минут и как?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Блин а я её впаял намертвоDanko писал(а):скорее всего глючит сама DS1307.
Если есть возможность то проверь на другой МС.
«И всё-таки она вертится!»
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Re: DS1307 используя аппаратный I2C
А вот это зря, у меня ещё со времён "спектрумов" чёткая привычка все микрухи ставить на панельки...
Даже остановленные часы два раза в сутки показывают правильное время.
- Rimsky
- Грызет канифоль
- Сообщения: 299
- Зарегистрирован: Вт июн 15, 2010 07:16:42
- Откуда: Иркутск
- Контактная информация:
Re: DS1307 используя аппаратный I2C
Библиотека работы с TWI на WinAVR
- Вложения
-
- i2c.rar
- (6.45 КБ) 726 скачиваний


