>> The generic ports are TTL, but when they get configured for I2C, they become >> open-collector. I2C requires the pull-up resistors to implement its tricky >> protocol over two wires. >> > I am not using pins that can be configured as an I2C bus per se, but using > two ordinary TTL level pins. Is the issue that there is some intermediate > state between high and low that will send the whole mess haywire if I don't > have a default condition set via resistors?
When you're transmitting information, you can have collisions if you're driving the line high when the receiver tries to drive it low. This sort of thing is hard on the driver transistors, and leads to weird voltages that aren't valid logic levels. However, it MAY be possible to avoid such collisions by only transmitting when you're certain the other device won't try to transmit too. Your device will see the low bits as low, and the high bits as "ouch, you cooked my driver transistor". The harder to avoid problem comes on receive, when you set your I/O pins to "input". Then your pins aren't pulling the lines high or low, and the I2C device can only pull them low or let them float. So they float. To random levels. So you'll receive the low bits as low and the high bits as "random". Not terribly useful. The idea is for the pull-up resistors to make the lines high by default, and then the MCU and target device can pull them low as needed. If there's a collision with both devices pulling the lines low, no problem, they just go low, and the I2C protocol allows for this to be detected and dealt with. - John -- You received this message because you are subscribed to the Google Groups "neonixie-l" group. To post to this group, send an email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/neonixie-l?hl=en-GB.
