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

непонятки с DS2482

Для экономии ножек на МК мною было принято решение использовать 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

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


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

Что ещё висит на I2C ? Какое конкретно значение статус байта выдаёт 2482 ?

Сигнал Reset значит 2482 формирует правильно (то есть команду воспринимает) ?

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


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

Что ещё висит на 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 // команда выполнена

 

Спасибо!

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


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

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

 

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

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


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

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

 

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

 

В самом начале вышенаписанного кода добавил строчку DS2482_detect(), которая сбрасывает девайс (DS2482_reset) и пишет конфигурационный байт с проверкой (DS2482_write_config()), все равно не пашет. В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю. Уже пятая микросхема, ни одна не пашет, а команду они все понимают только в одну сторону, если например передавать байт по шине, а на прием или сигнал присутствия ни в какую, хотя код брал из аппнотуа how to use ds2482. :(

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


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

В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю.

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

Может ещё схемку запостите между DS2482 и DS2406.

 

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

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

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


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

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

Может ещё схемку запостите между DS2482 и DS2406.

 

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

 

Вообщем-то выяснил в чем проблема, оказалось банально просто - монтажник запаял на плату не того номинала резистор в разрыве шины 1 wire, вместо 100 ом запаял 1.8 КОм, причем на всю партию (гнать надо таких монтажников!), после перепайки на осциллографе видно, что сигнал выпрямился и.. О, Чудо, появился PPD! :biggrin: Спасибо огромное, дай Бог Вам благополучия и здоровья!

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


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

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

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

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

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

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

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

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

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

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