а где интервал от 200 до 300?ondyon писал(а):ds2408
Проблемы с ds2408 (1-wire)
Re: Проблемы с ds2408 (1-wire)
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Проблемы с ds2408 (1-wire)
а код программки тестовой можно увидеть? у этого чипа и PRESENCE PULSE тоже короче, чем по стандарту...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Проблемы с ds2408 (1-wire)
а где интервал от 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;
}
Re: Проблемы с ds2408 (1-wire)
ondyon, попробуйте это чип перевести на паразитное питание. Вроде все чипы 1-wire после подачи питания должны формировать сигнал присутствие, а reset и будет сбросом питания.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Проблемы с ds2408 (1-wire)
[uquote="Dimon456",url="/forum/viewtopic.php?p=3734207#p3734207"]Вроде все чипы 1-wire после подачи питания должны формировать сигнал присутствие[/uquote]не все
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Проблемы с ds2408 (1-wire)
на паразитное - пробовал. В смысле, просто провод который +5в не подключал.
Результат - при больших значениях импульса RESET
на короткое время регистрировался низкий уровень, который не является импульсом присутствуия,
просто питание ещё не зарядилось до 5в, это конец заднего фронта импульса RESET
добавление задержки всего 5мс (а надо по паспорту 70!)
или подключение нормального питания
устраняло этот эффект
Насчёт импулься присутствия после включения питания - никогда не наблюдал
даже у датчиков температуры
Ещё поиграл с изменением резистора PullUp
менял от 2.2к до 10к
пока безрезультатно. (контрольные ds20s18 исправно работали при любом резисторе и даже без него)
Попробовал включить вход данных через резистор 100 ом
всё так же безрезультатно
Заказал ещё партию
Результат - при больших значениях импульса RESET
на короткое время регистрировался низкий уровень, который не является импульсом присутствуия,
просто питание ещё не зарядилось до 5в, это конец заднего фронта импульса RESET
добавление задержки всего 5мс (а надо по паспорту 70!)
или подключение нормального питания
устраняло этот эффект
Насчёт импулься присутствия после включения питания - никогда не наблюдал
даже у датчиков температуры
Ещё поиграл с изменением резистора PullUp
менял от 2.2к до 10к
пока безрезультатно. (контрольные ds20s18 исправно работали при любом резисторе и даже без него)
Попробовал включить вход данных через резистор 100 ом
всё так же безрезультатно
Заказал ещё партию