Проблемы с ds2408 (1-wire)

Обсуждаем контроллеры компании Atmel.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Проблемы с ds2408 (1-wire)

Сообщение Dimon456 »

ondyon писал(а):ds2408
а где интервал от 200 до 300?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Проблемы с ds2408 (1-wire)

Сообщение ARV »

а код программки тестовой можно увидеть? у этого чипа и PRESENCE PULSE тоже короче, чем по стандарту...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ondyon
Родился
Сообщения: 14
Зарегистрирован: Чт апр 16, 2015 13:43:52

Re: Проблемы с ds2408 (1-wire)

Сообщение ondyon »

а где интервал от 200 до 300?

да там всё то же самое, что и после 300. прогнал оба чипа от 1 до 5000


у этого чипа и PRESENCE PULSE тоже короче, чем по стандарту...

да какая разница. Я ловлю любой переход на 0
постоянно читаю без задержек
т.е. время между двумя последовательными READ минимально возможное,
равно времени операции READ + время операции if (a==0)
- не знаю, сколько тактов ардуинки оно занимает, но уж всяко импульс поймает, если он есть

програмку...
да просто модифицированный код функции reset()
ну и вызываю его в бесконечном цикле и пишу потом SUCCESS или FAIL

Спойлер

Код: Выделить всё


uint16_t impulse=200;

uint8_t OneWire::reset(void)
{
   IO_REG_TYPE mask = bitmask;
   volatile IO_REG_TYPE *reg IO_REG_ASM = baseReg;
   uint8_t r;
   uint8_t retries = 125;

   noInterrupts();
   DIRECT_MODE_INPUT(reg, mask);
   interrupts();

   // wait until the wire is high... just in case
   do {
      if (--retries == 0) return 0;
      delayMicroseconds(4);
   } while ( !DIRECT_READ(reg, mask));
   noInterrupts();


   impulse++;
   if(impulse>1000) impulse=300;

   DIRECT_WRITE_LOW(reg, mask);
   DIRECT_MODE_OUTPUT(reg, mask);   // drive output low

   delayMicroseconds(impulse);

   DIRECT_MODE_INPUT(reg, mask);   // allow it to float

   interrupts();

//   delayMicroseconds(140);   // 70 ORIG 

for(uint16_t n=0;n<1500;n++) {
   r = DIRECT_READ(reg, mask);
   if(!r) { Serial.print("Success"); break; }
}

   interrupts();
   delayMicroseconds(820);   //410 ORIG
        Serial.print("Reset impulse length:");
        Serial.print(impulse);
        Serial.print(" - ");
   return !r;
}
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Проблемы с ds2408 (1-wire)

Сообщение Dimon456 »

ondyon, попробуйте это чип перевести на паразитное питание. Вроде все чипы 1-wire после подачи питания должны формировать сигнал присутствие, а reset и будет сбросом питания.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Проблемы с ds2408 (1-wire)

Сообщение ARV »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3734207#p3734207"]Вроде все чипы 1-wire после подачи питания должны формировать сигнал присутствие[/uquote]не все
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ondyon
Родился
Сообщения: 14
Зарегистрирован: Чт апр 16, 2015 13:43:52

Re: Проблемы с ds2408 (1-wire)

Сообщение ondyon »

на паразитное - пробовал. В смысле, просто провод который +5в не подключал.

Результат - при больших значениях импульса RESET
на короткое время регистрировался низкий уровень, который не является импульсом присутствуия,
просто питание ещё не зарядилось до 5в, это конец заднего фронта импульса RESET

добавление задержки всего 5мс (а надо по паспорту 70!)
или подключение нормального питания
устраняло этот эффект

Насчёт импулься присутствия после включения питания - никогда не наблюдал
даже у датчиков температуры

Ещё поиграл с изменением резистора PullUp
менял от 2.2к до 10к
пока безрезультатно. (контрольные ds20s18 исправно работали при любом резисторе и даже без него)

Попробовал включить вход данных через резистор 100 ом
всё так же безрезультатно

Заказал ещё партию :)
Ответить

Вернуться в «AVR»