Пт ноя 01, 2019 17:47:34
Сб ноя 02, 2019 10:24:11
плохой эксперимент.ondyon писал(а):ds18B20 отвечает даже без резистора!
Правда.ondyon писал(а):У меня линия 3 см, вряд ли там помехи, которые могли спалить ds2408, правда?
Что тут имеется ввиду? Надо начать с проверки ответа чипа наличием присутсвия (presence). Но это надо понимать 1-wire, а не наугад порты менять.ondyon писал(а):чип не отвечает.
Вт ноя 05, 2019 09:06:49
Вт ноя 05, 2019 10:38:28
Вт ноя 05, 2019 12:27:17
// Perform the onewire reset function. We will wait up to 250uS for
// the bus to come high, if it doesn't then it is broken or shorted
// and we return a 0;
//
// Returns 1 if a device asserted a presence pulse, 0 otherwise.
//
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(2);
} while ( !DIRECT_READ(reg, mask));
noInterrupts();
DIRECT_WRITE_LOW(reg, mask);
DIRECT_MODE_OUTPUT(reg, mask); // drive output low
interrupts();
delayMicroseconds(480);
noInterrupts();
DIRECT_MODE_INPUT(reg, mask); // allow it to float
delayMicroseconds(70);
r = !DIRECT_READ(reg, mask);
interrupts();
delayMicroseconds(410);
return r;
}
Вт ноя 05, 2019 13:43:31
Вт ноя 05, 2019 14:48:17
noInterrupts();
DIRECT_MODE_INPUT(reg, mask);
interrupts();
// wait until the wire is high... just in case
do {
if (--retries == 0) return 0;
delayMicroseconds(2);
} while ( !DIRECT_READ(reg, mask));
// до этого места проходит
noInterrupts();
DIRECT_WRITE_LOW(reg, mask);
DIRECT_MODE_OUTPUT(reg, mask); // drive output low
interrupts();
delayMicroseconds(480); // можно поднять до 1000 и больше - другие девайсы продолжают работать.
noInterrupts();
DIRECT_MODE_INPUT(reg, mask); // allow it to float
delayMicroseconds(70); // ЭТО ВАЖНАЯ! если поднять до 1000 - другие чипы перестают работать. опустить до 50 - чипы работают
r = !DIRECT_READ(reg, mask);
interrupts();
delayMicroseconds(410); // эта задержка в конце не имеет важного эффекта, раз мы дальше ничего не делаем
return r;
Вт ноя 05, 2019 17:42:27
Вт ноя 05, 2019 18:29:17
Ср ноя 06, 2019 03:08:21
Ср ноя 06, 2019 11:52:18
Ср ноя 06, 2019 12:33:53
Ср ноя 06, 2019 14:03:06
и одна и та же библиотека используется, пример этой библиотеки есть в примерах протеуса 8.8 SP1.ondyon писал(а):В интернете куча примеров, где люди просто включали ds2408 на линию 1-wire без извращений,
do {
if (--retries == 0) return 0;
delayMicroseconds(4); //2
} while ( !DIRECT_READ(reg, mask));
noInterrupts();
DIRECT_WRITE_LOW(reg, mask);
DIRECT_MODE_OUTPUT(reg, mask); // drive output low
interrupts();
delayMicroseconds(960); //480
noInterrupts();
DIRECT_MODE_INPUT(reg, mask); // allow it to float
delayMicroseconds(140); //70
r = !DIRECT_READ(reg, mask);
interrupts();
delayMicroseconds(820); //410
Ср ноя 06, 2019 18:17:07
и одна и та же библиотека используется, пример этой библиотеки есть в примерах протеуса 8.8 SP1.ondyon писал(а):В интернете куча примеров, где люди просто включали ds2408 на линию 1-wire без извращений,
Ср ноя 06, 2019 19:01:46
Чт ноя 07, 2019 12:52:27
Чт ноя 07, 2019 13:39:11
Чт ноя 07, 2019 14:44:42
Чт ноя 07, 2019 16:01:03
Чт ноя 07, 2019 16:51:54