Нужна помощь по изменению временных интервалов в библиотеке OneWire
- Войдите на сайт для отправки комментариев
Вс, 03/03/2013 - 16:46
Подскажите, где в библиотеке “OneWire” используемой в среде “Arduino-0023” нужно делать изменения, что бы можно было изменять интервалы A, B, C, D (см. рисунок). http://s49.radikal.ru/i125/1303/5e/5541b366cd87.gif
В файле \libraries\OneWire\OneWire.cpp есть две функции передачи и приема бита:
void OneWire::write_bit(uint8_t v) { IO_REG_TYPE mask=bitmask; volatile IO_REG_TYPE *reg IO_REG_ASM = 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); // интервал А } } // // Read a bit. Port and bit is used to cut lookup time and provide // more certain timing. // uint8_t OneWire::read_bit(void) { IO_REG_TYPE mask=bitmask; volatile IO_REG_TYPE *reg IO_REG_ASM = baseReg; uint8_t r; noInterrupts(); DIRECT_MODE_OUTPUT(reg, mask); DIRECT_WRITE_LOW(reg, mask); delayMicroseconds(3); // интервал D DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise delayMicroseconds(10); r = DIRECT_READ(reg, mask); interrupts(); delayMicroseconds(53); return r; }Интерваны А и В выделены - 10 строка интервал В, 21 интервал А.
А вот на интервалы C и D вы никак повлиять не можете, потому как их генерят устройства подключенные к шине.
Насчёт интервала "С" согласен, он по протоколу формируется ведомым устройством, а вот по интервалу "D" осмелюсь возразить - я думаю что его формирует микроконтроллер и задача этого интервала в синхронизации ведомого ведущим (во нагородил). Другими словами синхронизация очередного тайм-слота.
Да, так оно и есть, D это строка 38. Подредактировал.
И ещё. Я неправильно указал, что библиотека "OneWire" взята из среды Arduino-0023. Это я её туда поместил, а вот где взя - уже не вспомню. Поэтому что бы не было разночтений, не отправите ли мне ту библиотеку "OneWire" (желательно всю) на которую ссылаетесь, или ссылку на неё.
http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
О, а у меня совсем другая (2008 года). Буду разбираться. Спасибо.