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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Из Atmega8 в Atmega16, TWI не хочет мигрировать
bodja74
сообщение Jun 9 2006, 21:09
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(Basilkmv06 @ Jun 9 2006, 20:13) *
Что на счет кода? Может есть какие-то косяки?


Ну я в Си не очень,нужно чтобы спецы поглядели. smile.gif

Все что нашел не думаю что существенно.

Вот это
TWCR=0x45;
TWCR|=0x80;

Можно сразу С5 заводить.


И немного не ясно назначение последних строчек.

TWCR|=0x40; //&eth;&agrave;&ccedil;&eth;&aring;&oslash;&egrave;&ograve;&uuml; &aacute;&egrave;&ograve; &iuml;&icirc;&auml;&ograve;&acirc;&aring;&eth;&aelig;&auml;&aring;&iacute;&egrave;&yuml;
TWCR&=~0x20; //&Ccedil;&Agrave;&Iuml;&ETH;&Aring;&Ograve;&Egrave;&Ograve;&Uuml; START
TWCR|=0x10; //&Iuml;&aring;&eth;&aring;&ccedil;&agrave;&atilde;&eth;&oacute;&ccedil;&ecirc;&agrave; TWI &ocirc;&icirc;&eth;&igrave;&egrave;&eth;&icirc;&acirc;&agrave;&ograve;&uuml; STOP
TWCR|=0x80;

И тех же самых строк в обработчике прерывания (если я правильно я понял).

А так вроде все Ок.
Go to the top of the page
 
+Quote Post
Basilkmv06
сообщение Jun 10 2006, 05:52
Сообщение #17





Группа: Участник
Сообщений: 13
Регистрация: 14-01-06
Пользователь №: 13 169



Цитата(bodja74 @ Jun 10 2006, 01:09) *
Цитата(Basilkmv06 @ Jun 9 2006, 20:13) *

Что на счет кода? Может есть какие-то косяки?


Ну я в Си не очень,нужно чтобы спецы поглядели. smile.gif

Все что нашел не думаю что существенно.

Вот это
TWCR=0x45;
TWCR|=0x80;

Можно сразу С5 заводить.


Это просто для наглядности.
Цитата(bodja74 @ Jun 10 2006, 01:09) *
И немного не ясно назначение последних строчек.

TWCR|=0x40; //ðàçðåøèòü áèò ïîäòâåðæäåíèÿ
TWCR&=~0x20; //ÇÀÏÐÅÒÈÒÜ START
TWCR|=0x10; //Ïåðåçàãðóçêà TWI ôîðìèðîâàòü STOP
TWCR|=0x80;


Это для организации арбитража в случае конфликта на шине пишем в регистр управления сформировать STOP. и модуль перезагружается, а то что 4строки это тоже для наглядности.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 10 2006, 07:19
Сообщение #18


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я не особо глубоко вникал в прогу, но на первый взгляд обработчик прерывания огромный.

Совет: сократите обработчик прерывания (уберите якобы наглядность) и проверьте ещё раз скорость.

Сообщение отредактировал GetSmart - Jun 10 2006, 07:24


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jun 10 2006, 07:55
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Арбитраж(выяснение отношений кто из мастеров первый полезет на шину) это прерогатива исключительно мастеров а не слейва.Слейв вообще не должен брать управление шиной на себя ни при каких условиях.В случае ошибки на шине ,тоже мастер должен принимать решение что делать с шиной.

Я так понял это дествие в прерывании на случай если не одно из условий не совпало?
default:
w=0; // &euml;&thorn;&aacute;&icirc;&aring; &auml;&eth;&oacute;&atilde;&icirc;&aring; &ntilde;&icirc;&aacute;&ucirc;&ograve;&egrave;&aring;
TWCR|=0x40; //&eth;&agrave;&ccedil;&eth;&aring;&oslash;&egrave;&ograve;&uuml; &aacute;&egrave;&ograve; &iuml;&icirc;&auml;&ograve;&acirc;&aring;&eth;&aelig;&auml;&aring;&iacute;&egrave;&yuml;
TWCR&=~0x20; //&Ccedil;&Agrave;&Iuml;&ETH;&Aring;&Ograve;&Egrave;&Ograve;&Uuml; START
TWCR|=0x10; //&Iuml;&aring;&eth;&aring;&ccedil;&agrave;&atilde;&eth;&oacute;&ccedil;&ecirc;&agrave; TWI &ocirc;&icirc;&eth;&igrave;&egrave;&eth;&icirc;&acirc;&agrave;&ograve;&uuml; STOP
TWCR|=0x80;

break;

Сделайте просто TWCR=0x85 и слейв сам уйдет в ступор,дожидаясь следущего старта со своим адрессом.
Go to the top of the page
 
+Quote Post
Woodoo
сообщение Jun 11 2006, 06:07
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391



осцилограф есть? может кинишь осцилограмки SDA/SCL меги16 на 160 и 250 kHz?
Go to the top of the page
 
+Quote Post
Basilkmv06
сообщение Jun 13 2006, 09:44
Сообщение #21





Группа: Участник
Сообщений: 13
Регистрация: 14-01-06
Пользователь №: 13 169



TWI ЗАРАБОТАЛ!!
Долгие размышления по поводу косяков привели к следующим выводам:
1.С ростом скорости передачи на линиях SDA SCL фронтов сигналов (очевидно заметна емкость длинного кабеля от LPT).
2.Эти ошибки отображаются в регистре статуса как TWSR=0x00.
3.Согласно документации АТМЕЛА
Status $00 indicates that a bus error has occurred during a Two-wire Serial Bus transfer.
A bus error occurs when a START or STOP condition occurs at an illegal position in
the format frame. Examples of such illegal positions are during the serial transfer of an
address byte, a data byte, or an acknowledge bit. When a bus error occurs, TWINT is
set. To recover from a bus error, the TWSTO flag must set and TWINT must be cleared
by writing a logic one to it. This causes the TWI to enter the not addressed slave mode
and to clear the TWSTO flag (no other bits in TWCR are affected). The SDA and SCL
lines are released, and no STOP condition is transmitted.

ошибка обрабатывалась так
//TWCR|=0x40; //Разрешить бит подтверждения
//TWCR&=~0x20; //Запретить START
//TWCR|=0x10; //перезагрузить TWI сформировав STOP
//TWCR|=0x80;
Данный текст отлично работает в меге8. Но в меге16 TWI не перезагружается
и при этом удерживает 0 на ноге SCL, сей факт для меня остался загадкой!

4.В меге16 обработку TWSR=0x00 сделал так
TWCR=0x41;//отключить модуль TWI
TWCR=0xC5;//подклучить модуль TWI
Все заработало!!!!!

Если у кого есть соображения по поводу данной непонятки, то поясните. Зарание благодарен.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:10
Рейтинг@Mail.ru


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