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

 
 
> HMC5843 Honeywell digital compass, I2C communication trouble (MSP430)
Kaplinsky
сообщение Dec 4 2009, 12:23
Сообщение #1


Частый гость
**

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



Салют разработчикам !

Имею затык при взаимодействии с компасом HMC5843 посредством протокола I2C.
В качестве МК применяю MSP430F2471

Проблема в следующем:
для прочтения регистра нужно записать в HMC5843 по I2C протоколу адрес регистра а затем произвести операцию чтения.
Делаю так:

Код
#define NACK_1 0x0100
#define NACK_2 0x0200

unsigned int I2C_Read(unsigned char addr){
unsigned int data = 0;  


  UCB0CTL1 |= UCTXSTT | UCTR;                   // UCTR - Transmit, UCTXSTT - generate START
  while (UCB0CTL1 & UCTXSTT);                     // waiting untill START sent
  
  
  UCB0TXBUF = addr;                                    // Loading register address
  while (!(IFG2 & UCB0TXIFG)) if (UCB0STAT & UCNACKIFG){         // waiting until data sent or NACK

    UCB0CTL1 |= UCTXSTP;                            // Generate STOP
    while (UCB0CTL1 & UCTXSTP);                   // Ensure stop condition got sent
    
    return NACK_1;                                     // wait untill rx flag is set
  }

  
  UCB0CTL1 &= ~UCTR;                              // Clear UCTR for reading operation
  UCB0CTL1 |= UCTXSTT;                            // Send START, SLAVE ADDR with WRITE
  while (UCB0CTL1 & UCTXSTT);                   // waiting untill START sent
  
    
  while (!(IFG2 & UCB0RXIFG)) if (UCB0STAT & UCNACKIFG){

    UCB0CTL1 |= UCTXSTP;                            // Generate STOP
    while (UCB0CTL1 & UCTXSTP);                   // Ensure stop condition got sent
    
    return NACK_2;                                         // wait untill rx flag is set
  }


  data = UCB0RXBUF;
  
  UCB0CTL1 |= UCTXSTP;                              // Generate STOP
  while (UCB0CTL1 & UCTXSTP);                     // Ensure stop condition got sent
  
  return data;

}//I2C_Read


Получаю такой результат:



Почему вылазит этот NACK ???
Адрес правильный а он со мной говорить не хочет !


Скорость I2C - 10Кгц
Подтягивающие резисторы 15К.


При чтении почему-то компас шлет два байта (регистр из которого читать не указываем по причине невозможности см. выше)
и что интересно при запросе чтения компас дает нам ACK а при запросе записи NACK - почему ?


или


Из нижней картинки хорошо видно что есть START мы передаем адрес 0x1E и бит чтения 1, далее компасс дает ACK и выдает ДВА байта - 0x10 (что может быть значением нулевого регистра компаса) и еще какой-то байт 0x7F и потом говорит нам NACK а мы делаем STOP.

вот процедура чтения:
Код
#define NACK_1 0x0100
#define NACK_2 0x0200

unsigned int I2C_Read(unsigned char addr){
unsigned int data = 0;  

  
  UCB0CTL1 &= ~UCTR;                              // Clear UCTR for reading operation
  UCB0CTL1 |= UCTXSTT;                            // Send START, SLAVE ADDR with WRITE
  while (UCB0CTL1 & UCTXSTT);                   // waiting untill START sent
  
    
  while (!(IFG2 & UCB0RXIFG)) if (UCB0STAT & UCNACKIFG){

    UCB0CTL1 |= UCTXSTP;                            // Generate STOP
    while (UCB0CTL1 & UCTXSTP);                   // Ensure stop condition got sent
    
    return NACK_2;                                         // wait untill rx flag is set
  }


  data = UCB0RXBUF;
  
  UCB0CTL1 |= UCTXSTP;                              // Generate STOP
  while (UCB0CTL1 & UCTXSTP);                     // Ensure stop condition got sent
  
  return data;

}//I2C_Read


Почему два байта и почему NACK при попытке записи - ломаю голову третий день. Подкиньте идею.


--------------------
Смотреть в себя, зреть муки свои, зная, что сам ты виновник мук - вот истинное страдание.
Отладка / Софокл, "Аякс".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kaplinsky   HMC5843 Honeywell digital compass   Dec 4 2009, 12:23
- - rezident   Цитата(Kaplinsky @ Dec 4 2009, 17:23) Поч...   Dec 4 2009, 13:58
- - Alexashka   Тоже не внимательно прочитал) Если адрес не его то...   Dec 5 2009, 08:40
- - Kaplinsky   3С и 3D это уже 8-ми битные адреса с учетом флага ...   Dec 6 2009, 18:18
|- - jam   Цитата(Kaplinsky @ Dec 6 2009, 21:18) 3С ...   Dec 6 2009, 19:27
|- - Kaplinsky   Цитата(jam @ Dec 6 2009, 21:27) Они же пр...   Dec 6 2009, 19:47
|- - jam   Цитата(Kaplinsky @ Dec 6 2009, 22:47) Дум...   Dec 6 2009, 22:59
- - rezident   Мне кажется подозрительной большая пауза на SCL пе...   Dec 7 2009, 00:08
|- - jam   Цитата(rezident @ Dec 7 2009, 03:08) Мне ...   Dec 7 2009, 00:25
|- - rezident   Цитата(jam @ Dec 7 2009, 05:25) Наверно э...   Dec 7 2009, 01:07
|- - jam   Цитата(rezident @ Dec 7 2009, 04:07) Что ...   Dec 7 2009, 02:28
- - Kaplinsky   Вот такая схема подключения используется только е...   Dec 7 2009, 08:29
|- - jam   Цитата(Kaplinsky @ Dec 7 2009, 11:29) Вот...   Dec 7 2009, 09:11
- - rezident   Цитата(jam @ Dec 7 2009, 07:28) Любой уча...   Dec 7 2009, 12:28
- - Kaplinsky   Немного поэкспериментировал с резисторами, вместо ...   Dec 7 2009, 17:39
|- - rezident   Цитата(Kaplinsky @ Dec 7 2009, 22:39) 2 R...   Dec 7 2009, 18:34
|- - Kaplinsky   Цитата(rezident @ Dec 7 2009, 20:34) Чтен...   Dec 7 2009, 19:46
- - Alexashka   Таки объясните откуда Nax брался? Таймаут в слейве...   Dec 8 2009, 16:57
|- - Kaplinsky   Цитата(Alexashka @ Dec 8 2009, 18:57) Так...   Dec 8 2009, 18:53
|- - rezident   Цитата(Kaplinsky @ Dec 8 2009, 23:53) ког...   Dec 8 2009, 21:02
|- - Kaplinsky   Цитата(rezident @ Dec 8 2009, 23:02) ACK ...   Dec 8 2009, 21:11
|- - rezident   Цитата(Kaplinsky @ Dec 9 2009, 02:11) ОК,...   Dec 9 2009, 01:52
|- - Kaplinsky   Цитата(rezident @ Dec 9 2009, 03:52) Как ...   Dec 9 2009, 08:23
- - Pavel V.   Буквально на днях боролся с аппаратным I2C на проц...   Dec 9 2009, 13:47
- - Kaplinsky   Цитата(Pavel V. @ Dec 9 2009, 15:47) Чита...   Dec 9 2009, 14:07
- - Pavel V.   Цитата(Kaplinsky @ Dec 9 2009, 17:07) Под...   Dec 9 2009, 14:28
- - 1921   Преречитываю в который раз как увлекательный роман...   Feb 1 2011, 08:04


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

 


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


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