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

 
 
> непонятки с DS2482
asket
сообщение Nov 25 2009, 10:57
Сообщение #1


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Для экономии ножек на МК мною было принято решение использовать DS2482-800, для апробирования взята микросхема DS2482-100, проблема такая: после ресет шины микруха не видит сигнала присутствия, хотя физически сигнал присутствует (на осциллографе) и передается со стороны подключаемого к нему DS2406 (dual switch), а DS2482 упорно не хочет ставить флаг PPD (presence pulse detected) в регистре статусе. Кто нибудь сталкивался с этой проблемой? Как решали этот впрос?

Привожу пример кода для STM32, вроде все должно работать

Код
u32 OWReset(void)
{
   u8 command;
   u8 status;
   u32 poll_count = 0;

   // 1-Wire reset (Case B)
   //   S AD,0 [A] 1WRS [A] Sr AD,1 [A] [Status] A [Status] A\ P
   //                                   \--------/        
   //                       Repeat until 1WB bit has changed to 0
   //  [] indicates from slave
  
   command = CMD_1WRS;
   while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
   I2C_Master_BufferWrite(I2C_address, &command, 1);
  
   // loop checking 1WB bit for completion of 1-Wire operation
   // abort if poll limit reached
   do
   {
      while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
      status = I2C_Master_BufferRead1Byte(I2C_address);
   }
   while ((status & STATUS_1WB) && (poll_count++ < POLL_LIMIT));

   // check for failure due to poll limit reached
   if (poll_count >= POLL_LIMIT)
   {
      DS2482_reset();
      return FALSE;
   }

   // check for short condition
   if (status & STATUS_SD)
      short_detected = TRUE;
   else
      short_detected = FALSE;

   // check for presence detect
   if (status & STATUS_PPD)
      return TRUE;
   else
      return FALSE;
}


Заранее благодарен за любую помощь! Она нужна как воздух, срочно!

Сообщение отредактировал asket - Nov 25 2009, 10:58
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Nov 25 2009, 11:27
Сообщение #2


.
******

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



Что ещё висит на I2C ? Какое конкретно значение статус байта выдаёт 2482 ?
Сигнал Reset значит 2482 формирует правильно (то есть команду воспринимает) ?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
asket
сообщение Nov 25 2009, 12:25
Сообщение #3


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(GetSmart @ Nov 25 2009, 14:27) *
Что ещё висит на I2C ? Какое конкретно значение статус байта выдаёт 2482 ?
Сигнал Reset значит 2482 формирует правильно (то есть команду воспринимает) ?

Кроме DS2482 ничего не висит, а выдает после отправки команды сразу же в первом байте только 1WB, во втором байте 1WB + LL, а в третьем - 1WB сбрасывается, оставляя LL, таким образом команда выполнена, и больше ничего.

Вот на программном осциллографе удалось увидеть следующее

START 0011000 W ACK 10110100 ACK STOP // передача команды 0xB4
START 0011000 R ACK 00000001 NACK STOP // прием статуса шина занята
START 0011000 R ACK 00001001 NACK STOP // прием статуса шина занята + лог.уровень = 1
START 0011000 R ACK 00001001 NACK STOP // прием статуса шина занята + лог.уровень = 1
START 0011000 R ACK 00001000 NACK STOP // команда выполнена

Спасибо!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 01:33
Рейтинг@Mail.ru


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