1-wire без delay
- Войдите на сайт для отправки комментариев
Пт, 12/02/2021 - 01:39
вот мучает меня все время вот какой вопрос. есть библиотека для работы с 1wire. если посмотреть в ее функцию отправки данных -
void OneWire::write_bit(uint8_t v) { IO_REG_TYPE mask IO_REG_MASK_ATTR = bitmask; volatile IO_REG_TYPE *reg IO_REG_BASE_ATTR = baseReg; if (v & 1) { noInterrupts(); DIRECT_WRITE_LOW(reg, mask); DIRECT_MODE_OUTPUT(reg, mask); // drive output low delayMicroseconds(10); DIRECT_WRITE_HIGH(reg, mask); // drive output high interrupts(); delayMicroseconds(55); } else { noInterrupts(); DIRECT_WRITE_LOW(reg, mask); DIRECT_MODE_OUTPUT(reg, mask); // drive output low delayMicroseconds(65); DIRECT_WRITE_HIGH(reg, mask); // drive output high interrupts(); delayMicroseconds(5); } }
можно увидеть что биты формируются при помощи делеев. как то мне кажется это не правильным и должно это делаться через? таймер?
Напиши свой, кто ж тебе мешает то ?
Раз тебе жалко 65-70микросекунд.
Только учти, что прерывания в момент приема/передачи , должны быть выключены (привет таймерам)
Это называется delay-фобия.
Вот так и СМИ людям мозги засирают.(
можно увидеть что биты формируются при помощи делеев. как то мне кажется это не правильным и должно это делаться через? таймер?
закомментируй делеи и проверь - нужны они там или нет.
"Правильно" это видимо в прерывании таймера. Только нужно руководствоваться не правилами, а целью. Что хотите получить в результате ?
ну 5 и 10 мксек и так нормально, а 55-65 на таймере выглядит получше. Но если после каждого вызова write_bit прокрутить луп, а не отправлять все сообщение подряд, то сойдет.
вот мучает меня все время
Не чешите - пройдёт.