Перейти к содержанию
    

Никогда не доводилось работать с шиной I2C. Пришла пора попробовать – и полный облом. Похоже, упустил что-то очень важное. Может, подскажет кто. ИС=5438, работает в режиме мастера с аккумуляторным датчиком LTC2942

 

Настройки:

UCB3CTL0=0x0F

UCB3CTL1=0x40 (ACLK)

(P10.1, P10.2)SEL=1

(P10.1, P10.2)DIR=1

UCB3I2CSA=0x64 - адрес датчика

UCSCTL4=0x0755 (все частоты на кварц, кварц запущен)

Частота приёма-передачи 10 кГц (чтобы смотреть было удобнее)

Вроде всё. Подтягивающие сопротивления есть. Работа:

UCB3IFG=0;

UCB3CTL1|=UCTR; // UCTR=1

while (UCB3CTL1 & UCTXSTP); // проверка стопа

UCB3CTL1 |= UCTXSTT; // старт

while(UCB3CTL1 & UCTXSTT); // ждём, пока старт сбросится

UCB3TXBUF=0; // передать адрес регистра в слэйве

while(!(UCB3IFG&UCTXIFG)); // дождаться ухода

while(UCB3CTL1&UCTXNACK); // проверить получение подтверждения

UCB3CTL1&=~UCTR; // переключиться на чтение

UCB3CTL1 |= UCTXSTT; // рестарт

while(UCB3CTL1 & UCTXSTT); // ждём, пока старт сбросится

while(!(UCB3IFG&UCRXIFG)); // принять информацию статусного регистра LTC2942

Status=UCB3RXBUF;

Проблема в следующем: после выставления бита «старт» ничего не меняется. На выходах SCL и SDA по-прежнему висят две единицы. Старт не сбрасывается. Я полагал, что после выставления старта сброс бита происходит после передачи адреса слэйву и приёма от него подтверждения. Вроде пересмотрел все примеры – не помогло.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. Видимо, проблемы частично в дребезге - датчик висит на проводах длиной около 15 см, если в процессе инициализации старта прижать палец - вроде что-то проскакивает, но потом все равно выскакивает прерывание нарушения арбитража.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если в процессе инициализации старта прижать палец - вроде что-то проскакивает
А резисторы подтяжки внешние есть?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А резисторы подтяжки внешние есть?

Да, я написал. Основной вопрос в другом: никто не видит грубых ошибок? Если нет, буду бороться с дребезгом и прочими соплями.

 

Изменено пользователем 1921

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основной вопрос в другом: никто не видит грубых ошибок?
Грубые ошибки в процедуре инициализации модуля USCI. Ну оно в общем-то и понятно. Ведь пользовательские инструкции (User's manual) для лохов пишут, а реальные пацаны и без них обходятся.

post-3882-1296473598_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Грубые ошибки в процедуре инициализации модуля USCI. Ну оно в общем-то и понятно. Ведь пользовательские инструкции (User's manual) для лохов пишут, а реальные пацаны и без них обходятся.

Да нет, я просто не стал приводить полный текст настройки, он стандартный. Там вроде всё в порядке. Да, в коде один бит неправильно обозвал (непоодтверждения приёма), уже исправил, но сути дела не меняет. Видимо, дело всё-таки в дребезге. Может, резисторы стоит перенести ближе к датчику, они у меня около MSP... В общем, танцы с бубном.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В дребезге чего? :cranky: У меня есть девайс, где MSP430 мастером работает и до самого дальнего слейва метр почти и работает как часы. Осциллографом смотрели, что на линии творится? Есть вообще обмен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, всё оказалось банально до безобразия. Вывод первый: ну его аппаратный I2C, на 5438 глючит со страшной силой, сам себя подвешивает, что не сковырнёшь. Попробуйте цепочку: старт +адрес+RW+ACK+стоп <задержка> и сначала. Работает 3...5 секунд, потом клоки залипают внизу, выскакивает флаг бизи, стоп не проходит, по клокам постоянно прут импульсы... и всё! Дальше только через ресет. Программная реализация хоть предсказуема.

Вывод второй: та микросхема, которая была слэйвом, сидела на аккумуляторе 4,2 В, соответственно I2C от контроллера (<3,3 В) не пробивали её по входу (не хватало уровня). Запитал одним питаним - и всё пошло (попробуйте нагрузить 155 серию на 564, если кто помнит, эффект тот же, причём возникает при повышении частоты).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Талантливо) А у меня в 5438 не глючило и вроде как всё по глупым бумажкам сходилось... :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...