asket 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 (изменено) · Жалоба Для экономии ножек на МК мною было принято решение использовать 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; } Заранее благодарен за любую помощь! Она нужна как воздух, срочно! Изменено 25 ноября, 2009 пользователем asket Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Что ещё висит на I2C ? Какое конкретно значение статус байта выдаёт 2482 ? Сигнал Reset значит 2482 формирует правильно (то есть команду воспринимает) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asket 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Что ещё висит на 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 // команда выполнена Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Вроде ничего подозрительного не вижу. Попробуйте перед командой CMD_1WRS делать DS2482_reset() с таймаутом 1 мс после неё. Может это поможет выяснить проблему. Кстати, в конфигурационном байте есть такая штука - Presence-Pulse Masking (PPM). Хотя она после сброса должна быть отключена, но стоило бы принудительно прописать конфиг.байт для гарантии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asket 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Вроде ничего подозрительного не вижу. Попробуйте перед командой CMD_1WRS делать DS2482_reset() с таймаутом 1 мс после неё. Может это поможет выяснить проблему. Кстати, в конфигурационном байте есть такая штука - Presence-Pulse Masking (PPM). Хотя она после сброса должна быть отключена, но стоило бы принудительно прописать конфиг.байт для гарантии. В самом начале вышенаписанного кода добавил строчку DS2482_detect(), которая сбрасывает девайс (DS2482_reset) и пишет конфигурационный байт с проверкой (DS2482_write_config()), все равно не пашет. В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю. Уже пятая микросхема, ни одна не пашет, а команду они все понимают только в одну сторону, если например передавать байт по шине, а на прием или сигнал присутствия ни в какую, хотя код брал из аппнотуа how to use ds2482. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба В конфигурационный байт единицу пишу на APU и PPM, а все остальные по нулю. В PPM надо писать 0. АPU устанавливать в 1 нужно только перед последним выводом байта/бита, когда планируется большая пауза в общении с OWI (для конверсии температуры обязательно при большом кол-ве термометров) Может ещё схемку запостите между DS2482 и DS2406. проблема такая: после ресет шины микруха не видит сигнала присутствия, хотя физически сигнал присутствует (на осциллографе) и передается со стороны подключаемого к нему DS2406 (dual switch), а DS2482 упорно не хочет ставить флаг PPD (presence pulse detected) в регистре статусе. То есть осцилл показывает два "нулевых" пульса? Из которых первый - сброс, формируемый DS2482, а второй - presence pulse, формируемый DS2406. Между которыми ~10 мкс. Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asket 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба В PPM надо писать 0. АPU устанавливать в 1 нужно только перед последним выводом байта/бита, когда планируется большая пауза в общении с OWI (для конверсии температуры обязательно при большом кол-ве термометров) Может ещё схемку запостите между DS2482 и DS2406. То есть осцилл показывает два "нулевых" пульса? Из которых первый - сброс, формируемый DS2482, а второй - presence pulse, формируемый DS2406. Между которыми ~10 мкс. Так? Вообщем-то выяснил в чем проблема, оказалось банально просто - монтажник запаял на плату не того номинала резистор в разрыве шины 1 wire, вместо 100 ом запаял 1.8 КОм, причем на всю партию (гнать надо таких монтажников!), после перепайки на осциллографе видно, что сигнал выпрямился и.. О, Чудо, появился PPD! Спасибо огромное, дай Бог Вам благополучия и здоровья! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться