I'm also wondering why this does not work at 1MHz.
To send a "1", the bus master software sends a very brief (1-15 µs) low pulse. To send a "0", the software sends a 60 µs low pulse. The falling (negative) edge of the pulse is used to start a monostable multivibrator in the slave device. The multivibrator in the slave clocks to read the data line about 30 µs after the falling edge. The slave's multivibrator unavoidably has analog tolerances that affect its timing accuracy, which is why the output pulses have to be 60 µs long, and the starting pulse can't be longer than 15 µs.
DIRECT_MODE_OUTPUT(reg, mask); DIRECT_WRITE_LOW(reg, mask); delayMicroseconds(3); DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise delayMicroseconds(9); r = DIRECT_READ(reg, mask);
Is there an easy way to tune the oscillator?
If I just run it at 8MHz, will I still run into issues at all?
Will it use much more battery life this way?