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

 
 
19 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Проблема с TWI
James D.
сообщение Nov 7 2005, 12:53
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



У меня временная индикация сделана на светодиодах.

Приемник (В этом случае - диод D,0 горит, а D,1 нет):

From_MT:ldi temp,$04 ;Инициализация режима "Приемник"
out TWAR,temp

TWINT_n:ldi temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)
out TWCR,temp

cbi PORTD,0

wait1n: in temp,TWCR ;Ожидаем вызова от MT контроллера
sbrs temp,TWINT
rjmp wait1n

cbi PORTD,1

in temp,TWSR
andi temp,$F8
cpi temp,$60 ;Проверка принятого адреса от MT
brne TWINT_n

cbi PORTD,2
.
.
.


Передатчик (здесь С,2; C,3; C,4 и C,5 - горят, а С,6 - уже не горит):

To_SR:

ldi temp,$00 ;Установка скорости передачи= 10 kHz
out TWSR,temp
ldi temp,192
out TWBR,temp

Pusk_Sr:ldi temp,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,temp ;Посылка сигнала "START"

cbi PORTC,2

wait1r: in temp,TWCR ;Ожидаем ответа от SR контроллера
sbrs temp,TWINT
rjmp wait1r

cbi PORTC,3

in temp,TWSR
andi temp,$F8
cpi temp,$08 ;Проверка подтверждения приема от SR (START)
brne Pusk_Sr

cbi PORTC,4

SLA_Wr: ldi temp,$04 ;Загрузка адреса SR-контроллера + "WRITE"
out TWDR,temp
ldi temp,(1<<TWINT)|(1<<TWEN)
out TWCR,temp

wait2r: in temp,TWCR ;Ожидаем ответа от SR контроллера
sbrs temp,TWINT
rjmp wait2r

cbi PORTC,5

in temp,TWSR
andi temp,$F8
cpi temp,$18
brne SLA_Wr ;Переход, если ответ от SR неверный

cbi PORTC,6
.
.
.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 7 2005, 13:25
Сообщение #17


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Ну и все проходит нормально?
Нигде не не вылетает с неопознаным кодом?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 7 2005, 14:12
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Прога полностью работает при пересылке от m32 (мастер передатчик) к m32 (подчин. приемник) или от m16 (мастер передатчик) к m32 (подчин. приемник), а если от m32 (мастер передатчик) к m16 (подчин. приемник) - получается вышеприведенная ситуация.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 7 2005, 15:24
Сообщение #19


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Ну и на каком этапе вылетает обмен между м32 и м16?
Все таки еще раз напомню о проверке инициализации м16 как slave.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Nov 7 2005, 16:22
Сообщение #20


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Ne znayu rabotaet ili net - no yesli da mozet i prigoditsya dlya debugginga sini .
http://fruttenboel.verhoeven272.nl/i2c/index.html


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 7 2005, 21:08
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



To beer_warrior:
а как проверить инициализацию м16 как slave?
Приемник (m16) cтопорит на начальном этапе ожидания связи с передатчиком - бит TWINT не устанавливается.
Передатчик (m32) после передачи SLA+W не принимает ACK - судя по-всему код в TWSR не $18.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Nov 7 2005, 23:28
Сообщение #22


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Po moemu v code priemnika ty dlzen zapisat v TWAR $08 vmesto $04. Tam address biti smeseni na odnu poziciyu nalevo tak chto u tebya slave ozidaet address 2 a ne 4 .

Vnizu raskladka is Data sheeta atmega 16 dlya TWAR registra:

-------------------------------------------------------------
TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
-------------------------------------------------------------
0 0 0 0 0 1 0 0

daet address $02 dlya priemnika .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 8 2005, 06:49
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Попробовал $08 - не то.
Понимаете, artem, с mega32 пересылаю на mega32 - все работает (с адресом $04 у обоих; если ставлю $08 у приемника - не работает), потом вынимаю mega32 - приемник, ставлю на его место mega16 - не работает с любыми адресами!
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 8 2005, 08:57
Сообщение #24


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата(James D. @ Nov 7 2005, 23:08) *
To beer_warrior:
а как проверить инициализацию м16 как slave?
Приемник (m16) cтопорит на начальном этапе ожидания связи с передатчиком - бит TWINT не устанавливается.
Передатчик (m32) после передачи SLA+W не принимает ACK - судя по-всему код в TWSR не $18.


Я имею в виду нет ли различий в коде м16 и м32. Возможно даже не относящихся непосредственно
к TWI. (прерывания, ватчдог)
Далее, проясните вопрос с передачей: клинит на первом обращении или на последующих, не требуеться ли repeated start?
Далее, проверяем прошел ли нормально start condition, если нет то что в статусе у мастера.
Бит TWINT должен устанавливаться в любом случае, если посылка проехала физически,
проверьте это.
Далее проверяем все-таки что твориться в TWSR слэйва, он возвращает ACK, NACK, arbitration lost,
что-то другое?
Для блезиру можно попробовать SLA+R, general call возможно это что-то прояснит.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Nov 8 2005, 10:04
Сообщение #25


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Soglasen s beer_warrior, nado snachala soblyusti chistotu eksperimenta - ubrat vse vnesnie faktori mogusie pomesat i smotret na status register pered peredachey i v techenii ee .
No mne klazetsya podozritelnym chto device reagiruyet na $02 kogda kak $04 posilaetsya .

Slusay a ne mozes li ty gotoviy proyekt zaprogramirovat v atmega 16 "AVR311: Using the TWI module as I2C slave". To est mozno budet ubeditsya chto chip rabotaet po proverennomu kodu.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 8 2005, 10:51
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Различия в коде, конечно есть.
Система у меня такая: два m32 + m16, все три соединены по TWI. Обе меги32 работают нормально (у каждой свой код), регулярно одна мега (мастер передат.) передает данные на другую (подчинен. приемник) приблиз. 30 раз в сек.
Мега 16 имеет функцию часов реального времени - внеш. кварц 32768 Гц. По нажатию спец. кнопочки, m32 (мастер передат.) связывается с m16 (подчинен. приемник), передает пару байт, и должен принять текущее значение времени. Так вот, при первом же нажатии этой кнопки связи не получается, оба контроллера зависают, а третий - m32 (подчинен. приемник), продолжает работать. То есть клинит на первом обращении.

Сделал еще два пробных проекта - первый m16 - мастер приемник, второй - m32 - подчин. передатчик. Ничего лишнего, только у m16 оставил часы реал. врем. Работают оба МК по прерываниям таймеров по переполнению или совпадению (в принципе неважно, главное связь по TWI проходит одним циклом, т.е. сработало прерывание - идет передача, закончилась передача - reti) После многочисленных неудачных попыток, заработало - пришлось только у обоих МК в самом конце передачи вставить команду
ldi temp,(0<<TWEN)
out TWCR,temp
потому как все зависало при ВТОРОМ соединении, первое полностью проходило нормально.

Вставил эти рабочие куски кода в свою 3-х контроллерную систему, все проверил, но опять та же фигня - клинит на первом же обращении m32 к m16.

Может соединить все это хозяйство по USART? Как думаете?
Беда только в том, что с USART я никогда не работал, как там со сложностью и стабильностью?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 8 2005, 11:39
Сообщение #27


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



USART это точка-точка в общем случае.
Вам какое расстояние нужно? Может SPI спасет.

По поводу TWI. Если я правильно понял вход слэйва в режим
приема производиться по таймеру. Это не есть хорошо. Слэйв на то
и слэйв чтобы вестись в обмене сигналами мастера. Т.е. мы ждем
прерывания от TWI (start condition) далее не вылазим оттедова пока
мастер нас не отпустит.
Сильно подозреваю что по вашей системе слэйв теряет либо старт
либо один из клоков и поэтому ждет еще чего-н из порта.

А вообще-то переходите на С, сильно облегчит жизнь :-)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
James D.
сообщение Nov 8 2005, 11:42
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 10-10-05
Пользователь №: 9 466



Еще кое-что удалось выяснить: убрал я передачу данных на вторую m32 (приемник), заработала связь m16 - мастер приемник, с m32 - подчинен. передатчик. По нажатию кнопочки, все как положено.
У меня уже крыша едет.

У меня сделано так: первая m32 - это мастер-передатчик, когда связывается со второй m32, и подчиненный передатчик, когда связывается с m16. Видно что-то происходит со связью после соединения m32-m32, так как после этого не получается соединение первой m32 с m16.
Как же правильно завершать работу TWI, и переходить с мастера-передатчика на подчиненный передатчик?
В даташите про это ничерта не написано! Мудрецы!

P.S. Связь m32-m32 и m32-m16 осуществляется в пределах одного обработчика прерывания. Сначала идет передача на один МК, потом на второй. По следующему прерыванию опять тоже самое.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 8 2005, 12:42
Сообщение #29


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Батенька, с арбитражем у вас проблемы. И с отработкой нештатных
ситуаций.

К изучению:
ATMega16 ->TWI ->Multi-master Systems and Arbitration

http://www.semiconductors.philips.com/acro...98/39340011.pdf

Могу закинуть свой исходник на С и по непонятным местам прокомментировать


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Nov 8 2005, 12:56
Сообщение #30


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Батенька, с арбитражем у вас проблемы. И с отработкой нештатных
ситуаций.

К изучению:
ATMega16 ->TWI ->Multi-master Systems and Arbitration

http://www.semiconductors.philips.com/acro...98/39340011.pdf

Могу закинуть свой исходник на С и по непонятным местам прокомментировать


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

19 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th August 2025 - 07:21
Рейтинг@Mail.ru


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