|
|
@ -44,12 +44,22 @@ void owPullLow() |
|
|
|
{ |
|
|
|
{ |
|
|
|
owPin.outputMode(); |
|
|
|
owPin.outputMode(); |
|
|
|
owPin.writeLow(); |
|
|
|
owPin.writeLow(); |
|
|
|
owOutTestPin.writeLow(); |
|
|
|
//owOutTestPin.writeLow();
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void owRelease() |
|
|
|
void owRelease() |
|
|
|
{ |
|
|
|
{ |
|
|
|
owPin.inputMode(); |
|
|
|
owPin.inputMode(); |
|
|
|
|
|
|
|
//owOutTestPin.writeHigh();
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void onEnterInterrupt() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
owOutTestPin.writeLow(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void onLeaveInterrupt() |
|
|
|
|
|
|
|
{ |
|
|
|
owOutTestPin.writeHigh(); |
|
|
|
owOutTestPin.writeHigh(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -166,9 +176,9 @@ void owHandleReset() |
|
|
|
|
|
|
|
|
|
|
|
void onewireInterrupt() |
|
|
|
void onewireInterrupt() |
|
|
|
{ |
|
|
|
{ |
|
|
|
//owOutTestPin.writeLow();
|
|
|
|
onEnterInterrupt(); |
|
|
|
onewireInterruptImpl(); |
|
|
|
onewireInterruptImpl(); |
|
|
|
//owOutTestPin.writeHigh();
|
|
|
|
onLeaveInterrupt(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//bool debugState = false;
|
|
|
|
//bool debugState = false;
|
|
|
@ -230,6 +240,8 @@ bool ignoreNextFallingEdge = false; |
|
|
|
|
|
|
|
|
|
|
|
void owSearchSendBit() |
|
|
|
void owSearchSendBit() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
onEnterInterrupt(); |
|
|
|
|
|
|
|
|
|
|
|
// wait for a falling edge (active wait is more reliable than interrupts to send the bit fast enough)
|
|
|
|
// wait for a falling edge (active wait is more reliable than interrupts to send the bit fast enough)
|
|
|
|
while (!owPin.read()); |
|
|
|
while (!owPin.read()); |
|
|
|
while (owPin.read()); |
|
|
|
while (owPin.read()); |
|
|
@ -276,13 +288,18 @@ void owSearchSendBit() |
|
|
|
|
|
|
|
|
|
|
|
delayMicroseconds(SendBitDuration - (micros() - sendBitStart)); |
|
|
|
delayMicroseconds(SendBitDuration - (micros() - sendBitStart)); |
|
|
|
owRelease(); |
|
|
|
owRelease(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void onewireInterruptSearchROM() |
|
|
|
void onewireInterruptSearchROM() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
onEnterInterrupt(); |
|
|
|
|
|
|
|
|
|
|
|
if (ignoreNextFallingEdge) |
|
|
|
if (ignoreNextFallingEdge) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ignoreNextFallingEdge = false; |
|
|
|
ignoreNextFallingEdge = false; |
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -295,6 +312,7 @@ void onewireInterruptSearchROM() |
|
|
|
debug.SC_APPEND_STR("Master didn't send our bit, leaving ROM search"); |
|
|
|
debug.SC_APPEND_STR("Master didn't send our bit, leaving ROM search"); |
|
|
|
status = OS_WaitReset; |
|
|
|
status = OS_WaitReset; |
|
|
|
attachInterrupt(InterruptNumber, onewireInterrupt, FALLING); |
|
|
|
attachInterrupt(InterruptNumber, onewireInterrupt, FALLING); |
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -304,7 +322,7 @@ void onewireInterruptSearchROM() |
|
|
|
{ |
|
|
|
{ |
|
|
|
++searchROMCurrentByte; |
|
|
|
++searchROMCurrentByte; |
|
|
|
searchROMCurrentBit = 0; |
|
|
|
searchROMCurrentBit = 0; |
|
|
|
debug.SC_APPEND_STR("sent another ROM byte"); |
|
|
|
//debug.SC_APPEND_STR("sent another ROM byte");
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (searchROMCurrentByte == 8) |
|
|
|
if (searchROMCurrentByte == 8) |
|
|
@ -313,6 +331,7 @@ void onewireInterruptSearchROM() |
|
|
|
status = OS_WaitReset; |
|
|
|
status = OS_WaitReset; |
|
|
|
debug.SC_APPEND_STR("ROM sent entirely"); |
|
|
|
debug.SC_APPEND_STR("ROM sent entirely"); |
|
|
|
attachInterrupt(InterruptNumber, onewireInterrupt, FALLING); |
|
|
|
attachInterrupt(InterruptNumber, onewireInterrupt, FALLING); |
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -322,6 +341,7 @@ void onewireInterruptSearchROM() |
|
|
|
|
|
|
|
|
|
|
|
setTimerEvent(10, owSearchSendBit); |
|
|
|
setTimerEvent(10, owSearchSendBit); |
|
|
|
detachInterrupt(InterruptNumber); |
|
|
|
detachInterrupt(InterruptNumber); |
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
@ -346,6 +366,8 @@ void onewireInterruptSearchROM() |
|
|
|
byte currentByte = owROM[searchROMCurrentByte]; |
|
|
|
byte currentByte = owROM[searchROMCurrentByte]; |
|
|
|
searchRomNextBit = bitRead(currentByte, searchROMCurrentBit); |
|
|
|
searchRomNextBit = bitRead(currentByte, searchROMCurrentBit); |
|
|
|
searchRomNextBitToSend = searchROMSendingInverse ? !searchRomNextBit : searchRomNextBit; |
|
|
|
searchRomNextBitToSend = searchROMSendingInverse ? !searchRomNextBit : searchRomNextBit; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onLeaveInterrupt(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool readBit() |
|
|
|
bool readBit() |
|
|
|