реклама на сайте
подробности

 
 
> Как отправить даные Master со Slave? I2C
BeginnerAVR
сообщение Jun 2 2012, 21:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Доброго времени суток!

Объясните, люди добрые, новичку, что и как...
Два AVR связаны по I2C. Мастер отправляет инфу - слейв принимает. Все ок.
А как сделать чтобы на запрос мастера, например, отправилось два байта со слейва.

Какой должен быть алгоритм для master и slave?

Пользуюсь готовым интерфейсником i2c.c
// Title : I2C interface using AVR Two-Wire Interface (TWI) hardware
// Author : Pascal Stang - Copyright © 2002-2003

Может кто-то уже реализовывал I2C с этой библиотекой?



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Jun 9 2012, 19:54
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
Вам доводилось писать что-то с i2c, Вы пользовались какими-либо библиотеками?
Много , но преимущественно на asm , там всё просто и до предела ясно что происходит. Поищите поиском по форуму , может кто-то реализовывал такой режим на С . Я так особо не приглядывался.
Но алгоритм прост , можете и сами написать.
Мастер
1. Отослать запрос
2 TWAR= 0x01
3.TWCR = 1<<TWEA|1<<TWEN
Занятся чем либо полезным, если включено прерывание TWI или мониторить TWSR на код $70 и если =
4.TWCR = 1<<TWEA|1<<TWEN|1<<TWINT
Занятся чем либо полезным, если включено прерывание TWI или мониторить TWSR на код $90 и если =
5. Считать данные
TWCR = 1<<TWEA|1<<TWEN|1<<TWINT
Занятся чем либо полезным, если включено прерывание TWI или мониторить TWSR на код $90 и если =
5. Считать данные.
Теперь главное!!!
Отключить TWI , что бы slave не наглел.

вернуть к исходному состоянию мастера - чисто библиотека ATMEL.
Можно мониторить TWCR- состояние бита TWINT - а затем читать TWSR на код статуса.

Slave
1. Получить запрос
2 . Оценить возложенную на него ответственность и подготовить 2 байта , если их ещё нет
3 . Ну далее тоже по библиотеке , он теперича мастер.
4. Отослать 2 байта.
5 Вернуть себе статус slave - обидно конечно.


Но честно говоря не совсем понятно , если уж мастер спокойно записывает в slave, то и читать по префиксу чтение должен тоже спокойно. Смотрите , как у Вас обрабатывается запрос от мастера на чтение данных . Может он не из той ячейки берёт данные , а тама токмо $FF


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
BeginnerAVR
сообщение Jun 9 2012, 20:55
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Цитата(ILYAUL @ Jun 9 2012, 23:54) *
Много , но преимущественно на asm , там всё просто и до предела ясно что происходит. Поищите поиском по форуму , может кто-то реализовывал такой режим на С . Я так особо не приглядывался.
Но алгоритм прост , можете и сами написать.


Еще раз спасибо!
На форуме решений собственного вопроса вопроса приближенных хотя бы на треть не нашел.
Повторюсь. Есть примеры и обсуждения: мастер передает - слейв получает и мастер опрашивает разные микрухи и память.

Если четно, то мне очень стыдно за свой полный тупизм с i2c.
И, самое удивительное, не удалось найти гарантированно рабочих примеров с полнофункциональным слейвом под avrlib.
Единственное, что нашел - рукописный пример на easyelectronics, правда в обрамлении RTOS.
Мне советуют атмеловские аппноты.
Вот и думаю что делать...
1. выковыривать изюм из булки RTOS
2. взять за основу аппноты
3. начать писать свое, поглядывая на все нагугленное?

Сообщение отредактировал BeginnerAVR - Jun 9 2012, 20:56
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- BeginnerAVR   Как отправить даные Master со Slave? I2C   Jun 2 2012, 21:08
- - _Артём_   Цитата(BeginnerAVR @ Jun 3 2012, 00:08) Д...   Jun 2 2012, 21:47
|- - BeginnerAVR   Цитата(_Артём_ @ Jun 3 2012, 01:47) Алгор...   Jun 2 2012, 22:32
|- - _Артём_   Цитата(BeginnerAVR @ Jun 3 2012, 01:32) С...   Jun 3 2012, 00:27
|- - BeginnerAVR   Цитата(_Артём_ @ Jun 3 2012, 04:27) Почем...   Jun 3 2012, 08:40
- - LexaK   Вот рабочий проект OSD на mega8. В нем реализован ...   Jun 4 2012, 05:19
|- - BeginnerAVR   Цитата(LexaK @ Jun 4 2012, 09:19) Вот раб...   Jun 4 2012, 22:06
- - Maik-vs   ЦитатаСейчас понимаю, что связаться с i2C было оши...   Jun 5 2012, 04:17
|- - BeginnerAVR   Цитата(Maik-vs @ Jun 5 2012, 08:17) ...   Jun 5 2012, 21:05
|- - Maik-vs   Цитата(BeginnerAVR @ Jun 6 2012, 01:05) Н...   Jun 7 2012, 06:09
|- - DmitryM   Цитата(Maik-vs @ Jun 7 2012, 10:09) ...   Jun 7 2012, 10:31
||- - Maik-vs   Цитата(DmitryM @ Jun 7 2012, 14:31) Для и...   Jun 7 2012, 12:00
|- - BeginnerAVR   Цитата(Maik-vs @ Jun 7 2012, 10:09) ...   Jun 7 2012, 13:14
|- - _Артём_   Цитата(BeginnerAVR @ Jun 7 2012, 16:14) А...   Jun 7 2012, 13:47
- - ILYAUL   ЦитатаНапример, мастер пишет в слейв. И пропал оди...   Jun 7 2012, 20:04
|- - Maik-vs   Цитата(ILYAUL @ Jun 8 2012, 00:04) Так ка...   Jun 8 2012, 08:02
|- - ILYAUL   Цитата(Maik-vs @ Jun 8 2012, 12:02) ...   Jun 8 2012, 08:57
|- - Maik-vs   Цитата(ILYAUL @ Jun 8 2012, 12:57) Вы пут...   Jun 9 2012, 11:54
- - BeginnerAVR   Вопрос по библиотеке AVRLab. Функция i2cSlaveTra...   Jun 9 2012, 06:50
- - BeginnerAVR   Понимаю, что я уже становлюсь здесь лишним. Как т...   Jun 9 2012, 14:05
|- - ILYAUL   Цитата(BeginnerAVR @ Jun 9 2012, 18:05) М...   Jun 9 2012, 17:02
|- - BeginnerAVR   Цитата(ILYAUL @ Jun 9 2012, 21:02) 1. Про...   Jun 9 2012, 17:56
- - ILYAUL   Я так понимаю , что вы хотите релизовать режим , п...   Jun 9 2012, 18:22
|- - BeginnerAVR   Цитата(ILYAUL @ Jun 9 2012, 22:22) Я так ...   Jun 9 2012, 18:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 12:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016