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

 
 
> непонятки с 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, 13:20
Сообщение #2


.
******

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



Вроде ничего подозрительного не вижу. Попробуйте перед командой CMD_1WRS делать DS2482_reset() с таймаутом 1 мс после неё. Может это поможет выяснить проблему.

Кстати, в конфигурационном байте есть такая штука - Presence-Pulse Masking (PPM). Хотя она после сброса должна быть отключена, но стоило бы принудительно прописать конфиг.байт для гарантии.


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


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

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



Цитата(GetSmart @ Nov 25 2009, 16:20) *
Вроде ничего подозрительного не вижу. Попробуйте перед командой CMD_1WRS делать DS2482_reset() с таймаутом 1 мс после неё. Может это поможет выяснить проблему.

Кстати, в конфигурационном байте есть такая штука - Presence-Pulse Masking (PPM). Хотя она после сброса должна быть отключена, но стоило бы принудительно прописать конфиг.байт для гарантии.


В самом начале вышенаписанного кода добавил строчку DS2482_detect(), которая сбрасывает девайс (DS2482_reset) и пишет конфигурационный байт с проверкой (DS2482_write_config()), все равно не пашет. В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю. Уже пятая микросхема, ни одна не пашет, а команду они все понимают только в одну сторону, если например передавать байт по шине, а на прием или сигнал присутствия ни в какую, хотя код брал из аппнотуа how to use ds2482. sad.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 25 2009, 15:41
Сообщение #4


.
******

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



Цитата(asket @ Nov 25 2009, 21:13) *
В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю.

В PPM надо писать 0. АPU устанавливать в 1 нужно только перед последним выводом байта/бита, когда планируется большая пауза в общении с OWI (для конверсии температуры обязательно при большом кол-ве термометров)
Может ещё схемку запостите между DS2482 и DS2406.

Цитата(asket @ Nov 25 2009, 16:57) *
проблема такая: после ресет шины микруха не видит сигнала присутствия, хотя физически сигнал присутствует (на осциллографе) и передается со стороны подключаемого к нему DS2406 (dual switch), а DS2482 упорно не хочет ставить флаг PPD (presence pulse detected) в регистре статусе.

То есть осцилл показывает два "нулевых" пульса? Из которых первый - сброс, формируемый DS2482, а второй - presence pulse, формируемый DS2406. Между которыми ~10 мкс. Так?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:36
Рейтинг@Mail.ru


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