Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ведомый i2c на ATtiny2313
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Oleg_DI
доброй ночи требуется связать по линии i2c несколько контроллеров .Мастер mega16 и ведомые ATtiny2313. порыл в инете ничего вразумительного нет. не берем во внимание аппаратный usi i2c
с ним макетировал, результат не очень. Возникла идея если воспользоваться RTC ds1307( в схеме она есть у мастера ) главный мастер записывает в её ОЗУ данные а остальные теперь мастера ATtiny2313
считывают по своим адресам данные.Мастера не начнут условия старт пока линия занята,это условие вместо синхронизации.
defunct
Цитата(Oleg_DI @ Feb 18 2009, 20:59) *
Возникла идея если воспользоваться RTC ds1307( в схеме она есть у мастера ) главный мастер записывает в её ОЗУ данные а остальные теперь мастера ATtiny2313 считывают по своим адресам данные.

Вполне элегантно. Добавить еще линию по которой M16 будет сообщать всем Тиням, что данные положены - и будет совсем хорошо.

Цитата
Мастера не начнут условия старт пока линия занята,это условие вместо синхронизации.

Для M16 это не проблема, там аппаратная поддержка мультимастера так что все ОК.
А на Тинях придется реализовать "мультимастер" Вам самостоятельно - почитайте про этот режим в даташите (см. TWI модуль).
Реализовать его надо - потому что Вы не будете знать занята линия или свободна при одновременном старте нескольких мастеров.
Oleg_DI
спасибо! пойду читать даташит
ARV
Цитата(defunct @ Feb 19 2009, 02:35) *
Вполне элегантно. Добавить еще линию по которой M16 будет сообщать всем Тиням, что данные положены - и будет совсем хорошо.
у DS1307 есть выход, на котором можно получить 1 Гц импульсы - вот вам и сигнал... при нуле на этой линии контроллер данные кладет в DS1307, а при единице - другие оттуда читают... при желании можно сделать "вторичных" мастеров так, что они будут спустя определенный (разный) интервал после появления единицы обращаться к данным - никаких конфликтов не будет принципиально, можно избежать арбитража шины...
=GM=
Цитата(Oleg_DI @ Feb 18 2009, 18:59) *
..требуется связать по линии i2c несколько контроллеров. Мастер mega16 и ведомые ATtiny2313. Не берем во внимание аппаратный usi i2c с ним макетировал, результат не очень

Поясните, почему нельзя передавать не через DS1307, а напрямую из меги во все тайни по очереди или сразу всем? Передаёте адрес, потом данные. Нулевой адрес - для широковещания. И никаких проблем с коллизиями.
defunct
Цитата(ARV @ Feb 19 2009, 07:27) *
у DS1307 есть выход, на котором можно получить 1 Гц импульсы - вот вам и сигнал... при нуле на этой линии контроллер данные кладет в DS1307, а при единице - другие оттуда читают...

Да, так пожалуй будет лучше. Все МК сразу знают, что DS "фунциклирует".
При условии что одного обновления в сек. - достаточно.

Цитата
при желании можно сделать "вторичных" мастеров так, что они будут спустя определенный (разный) интервал после появления единицы обращаться к данным - никаких конфликтов не будет принципиально, можно избежать арбитража шины...

Практика показывает в мультимастере конфликты неизбежны, как мастеров по времени не разноси. Поэтому лучше сразу закладывать арбитраж.
Oleg_DI
Цитата(=GM= @ Feb 19 2009, 16:05) *
Поясните, почему нельзя передавать не через DS1307, а напрямую из меги во все тайни по очереди или сразу всем? Передаёте адрес, потом данные. Нулевой адрес - для широковещания. И никаких проблем с коллизиями.

Всё дело что тогда нужен программный и2с для ведомых тини и все ресурсы пойдут туда. На тини собрана динамическая индикация.
e-serg
Цитата(Oleg_DI @ Feb 21 2009, 20:13) *
Всё дело что тогда нужен программный и2с для ведомых тини и все ресурсы пойдут туда. На тини собрана динамическая индикация.

Был проект на Меге8, динамическая индикация, 24 диода, опрос матрицы клавиатуры, чтение DS1990
и слейв для 1-wire, устройство само ключом DS1990 прикидывалось. на индикацию не влияло.
i2c обслужить проще, чем 1-wire.
kanzler
Цитата(Oleg_DI @ Feb 21 2009, 17:13) *
Всё дело что тогда нужен программный и2с для ведомых тини и все ресурсы пойдут туда. На тини собрана динамическая индикация.


Хмммм ... Олег, на какое растояние хотите тянуть i2c?
Oleg_DI
Цитата(kanzler @ Feb 24 2009, 10:43) *
Хмммм ... Олег, на какое растояние хотите тянуть i2c?


Привет! на 20 см сейчас там сделан уарт +485 + wake . Задумка была сделать ведомые i2c программно, не получилось времени было мало, сделал в лоб чтобы не заморачиваться.
Сейчас вернулся к теме хочется сделать по правильному.
=GM=
Цитата(Oleg_DI @ Feb 25 2009, 04:58) *
Задумка была сделать ведомые i2c программно, не получилось времени было мало, сделал в лоб чтобы не заморачиваться. Сейчас вернулся к теме хочется сделать по правильному

Почему всё-таки аппаратный ведомый TWI не подходит?
defunct
Цитата(=GM= @ Feb 27 2009, 13:38) *
Почему всё-таки аппаратный ведомый TWI не подходит?

Вероятно потому что в T2313 его нет.
Atmel предлагает использовать недоинтерфейс USI встроенный в этот МК для эмуляции аппаратного TWI. Мороки там и шансов на успех примерно столько же как и при программной реализации. (хотя наверное даже так - мороки больше, а шансов на успех меньше) sad.gif
=GM=
Цитата(defunct @ Feb 27 2009, 12:10) *
Вероятно потому что в T2313 его нет. Atmel предлагает использовать недоинтерфейс USI встроенный в этот МК для эмуляции аппаратного TWI. Мороки там и шансов на успех примерно столько же как и при программной реализации. (хотя наверное даже так - мороки больше, а шансов на успех меньше)

Ну, названия TWI нет, думаю это патентные игры, но есть two-wire mode, которая по существу и является TWI. Какая там морока-то для слейва?
SasaVitebsk
Цитата(=GM= @ Feb 27 2009, 18:26) *
Ну, названия TWI нет, думаю это патентные игры, но есть two-wire mode, которая по существу и является TWI. Какая там морока-то для слейва?

У меня работает atmega8 в режиме слэйва. С точки зрения мастера - at24c01, правда с другим адресом. Уже годы катается. Никаких проблем. Сама она часы читает по I2C (DS1307), датчики температуры DS18b20 и освещённость определяет. Планировал и другие датчики поставить, но так руки и не дошли. smile.gif

Когда ставил - боялся проблем и сбоев. Нет. Всё прекрасно работает. Мастер правда софтовый.

А так как автор темы планирует - тоже нюансы есть.
defunct
Цитата(=GM= @ Feb 27 2009, 17:26) *
Ну, названия TWI нет, думаю это патентные игры, но есть two-wire mode, которая по существу и является TWI. Какая там морока-то для слейва?

Почитайте более подробно про этот two-wire режим USI тиньки. Этот режим - костыль с помощью которого Atmel предлагает самостоятельно реализавать стейт машину I2C.
Кардинально отличается от TWI(полного аналога I2C) в Mega'х.
Oleg_DI
Доброй ночи.спасибо за советы.Скорей всего буду менять процессор на мегу с аппаратным twi . хотел сделать простой малобюджетный ведомый дисплей с простой односторонней печатной платой,
а сейчас проект разрастается. Дело не в цене компанентов а в их множевственности и программных ресурсах. Интерфейс и2с в отличие от uart не критичен к частоте синхронизации.Это позволяет обойтись без кварца +ёмкости. корпус soic у тини2313 прост для самопальной печати. Получается что нет интерфейса для ведомых контроллеров малой степени интеграции и работы на
сверх малых расстояниях.
=GM=
Цитата(Oleg_DI @ Feb 28 2009, 20:00) *
Интерфейс и2с в отличие от uart не критичен к частоте синхронизации.Это позволяет обойтись без кварца +ёмкости. корпус soic у тини2313 прост для самопальной печати. Получается что нет интерфейса для ведомых контроллеров малой степени интеграции и работы на сверх малых расстояниях

Да ё-моё, у вас в руках обе стороны, и ведущая и ведомая, чем причитать, возьмите код Манчестер-II, он допускает ±25% разброса по скорости на периоде одного бита. К тому же будет достаточно одного провода. Реализуется одной левой.
Anato
Не продуманный алгоритм работы всего устройства и отдельных блоков в часности, создает много проблем и домыслов. I2C придумали как межблочный интерфейс и справляется с этим он прекрасно. laughing.gif
ReAl
Цитата(Oleg_DI @ Feb 28 2009, 22:00) *
Доброй ночи.спасибо за советы.Скорей всего буду менять процессор на мегу с аппаратным twi . хотел сделать простой малобюджетный ведомый дисплей с простой односторонней печатной платой,
а сейчас проект разрастается. Дело не в цене компанентов а в их множевственности и программных ресурсах.
Так "малобюджетный" или "дело не в цене" ?
На каких тиражах разница цены тини2313 и мега48 перекроет разницу в приседаниях вокруг USI в тини2313 ?
Возможны ли такие тиражи при "самопальной печати" ?
А если нужны небольшие "самопальнопечатные" тиражи, но разница цены как раз покрывает необходимый для пропитания в течении работы над проектом хлебушка - то не лучше ли всё равно сэкономить время, быстрее закончить этот проект и взяться за другой?

Так что решение менять тиньку на мегу (кстати, там где-то ещё тини48 на подходе - урезанная мега48) - правильное.

Цитата(Oleg_DI @ Feb 28 2009, 22:00) *
Интерфейс и2с в отличие от uart не критичен к частоте синхронизации.Это позволяет обойтись без кварца +ёмкости. корпус soic у тини2313 прост для самопальной печати. Получается что нет интерфейса для ведомых контроллеров малой степени интеграции и работы на сверх малых расстояниях.
Если очень хочется, то:
  • Уже советовали манчестер. Вполне можно, тем более, что микрочип уже выпускает EEPROM с таким интерфейсом.
  • Тот же UART можно применить в LIN-подобном режиме с синхробайтом, разброс скорости встроенного RC компенсируется на ура.
  • Довольно любопытная вещь object link (в приложении) - две двунаправленные линии, по(полу)битовая синхронизация с квитированием. Правда, в отличие от I2C - интерфейс точка-точка, не шинный. Простой, в прерываниях PCINT должен очень хорошо реализовываться. Скорость переменная, равна максимально возможной для данных комбинации ведущего и ведомого и данной их загрузки.
SasaVitebsk
Да и вообще м8 у нас дешевле чем м2313! Более массовая! Места на плате меньше занимает!

I2C хороший интерфейс, но медленоватый. Можно SPI приспособить, со своим защищённым протоколом.
Maik-vs
Цитата(SasaVitebsk @ Mar 1 2009, 19:47) *
I2C хороший интерфейс, но медленоватый. Можно SPI приспособить, со своим защищённым протоколом.


вообще-то у него ещё 2 расширения по скорости, если мне не изменяет моск, до нескольких мегабит.

Непонятно, почему недоинтерфейс USI в тиньках так пугает. Ну да, немного геморроя; но есть аппнота от атмеля, у меня всё поместилось в прерывания - строк 40 на ассемблере. Плюс засунуть данные в буфер - высунуть из буфера. А вот программная реализация слейва - гиморнее на порядок.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.