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 уходят.
складывается впечатление, что Протеус для многих- самоцель.
Danko писал(а):Да и длина кода в обоих случаях примерно одинакова.
на длинну фиолетово. Есть более значимые ресурсы, как то- время исполнения- это раз. На время исполнения програмного I2C отключаются прерывания, потом сиди,гадай,какое,когда и в какой последовательности пришло на время отключения-вот и потеряли данные.
еще раз- пожалуйста,примеры, если таковые имеются )
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Merzavec писал(а):Насколько понял, все рассмотреные на этом сайте примеры используют програмно-реализованный I2C интерфейс. Меня интересует решение,использующее аппаратные средства микроконтроллера.
Хотелось бы увидеть готовые примеры для CodeVisionAVR. Использую mega32
Если нашли примеры то поделитесь. Хочу на апаратный I2C DS1307 повесить.
«И всё-таки она вертится!»
- 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
Danko писал(а):Рабочая библиотека. Работает и в железе и в Протеусе.
Я ранее писал, что в Протеусе аппаратный TWI не работает.
Совершенно верно. Не работает в Протеусе v7.6SP4, а Протуесе v7.7SP2 работает.
Расскажите плиз в кратце как ею пользоваться для mega16.
«И всё-таки она вертится!»
- 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(АДРЕС); в принципе и все. Как инициализировать в мега16 TWI я думаю разберетесь сами.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: DS1307 используя аппаратный I2C
Danko писал(а):Нужен живой пример пожалуйста:
A остальные функции из библиотеки: twi_start, twi_stop, twi_write, twi_read, rtc_init мне не нужны? Извините за назойливость
«И всё-таки она вертится!»
- 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
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
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 КБ) 724 скачивания