I've been accused of basing the BX24-AHT design on Tom Laureanno's Basic Stamp code project.
I think Tom's code is still on his web site. I think Dan Lanciani also has some BX24 code on his website. The code I used in the BX24-AHT to capture the X-10 RF is below. I don't think anyone will find any similarities. The data Tom referred to on Ed Cheung's web site is inaccurate. I had to work out the protocol details myself (I published an accurate description of the protocol on my web page. There is also a link on my web page to an NEC datasheet for the chip that X-10 used in the older keychain remotes which details the protocol.) There was some discussion with Dan Lanciani (via email) that was mostly about how much he disliked the BX24 compiler and about the bits added by the RF repeater which I've never had. I published a BX24 routine (using the BasicX InputCapture function) for capturing and decoding the protocol a day or two before Dan published his code. Tom Laureanno purchased a BX24 of his own after I published my code.
Gerber drawings for the BX24-AHT board have long been available on my web page. All it will take is a glance at those and the other documentation there to see there are no elements of Tom's design in the BX24-AHT design. I don't believe Tom supported pressure and humidity sensors nor had additional serial ports for other things like Ocelot's, LCDs, keypads, etc. He used a TW523 (in output mode only) while I supported the CM11A, Ocelot, Leopard and a web device that did X-10.
'In the main loop, this code looks for a start pulse and 'calls GetRF() to capture the 32 bit code that follows it PulseWidth = 0 If (GetPin(11) = InMode) Then 'InMode=1 for RF input, 0 for IR input Register.TCCR1A = 0 'reset Timer1 Register.TCNT1H = 0 Register.TCNT1L = 0 Register.TIFR = TOV1 Register.TCCR1B = 2 'start Timer1 If (InMode = 1) Then level = GetADC(13) 'read linear output amplitude End If Do Loop Until (GetPin(11) = 0) LoByte = Register.TCNT1L 'read Timer1 HiByte = Register.TCNT1H PulseWidth = CInt(HiByte) * 256 + CInt(LoByte) If (InMode = 1) Then n = GetADC(13) 'read linear output amplitude (RSSI) If n > level Then level = n - level Else level = level - n End If End If End If
Sub GetRF() For n = 0 To 32 Register.TCCR1A = 0 'reset Timer1 Register.TCNT1H = 0 Register.TCNT1L = 0 Register.TIFR = TOV1 Register.TCCR1B = 2 'start Timer1 Call WaitForInterrupt(bxPinRisingEdge) LoByte = Register.TCNT1L 'read Timer1 HiByte = Register.TCNT1H PulseTrain(n) = CInt(HiByte) * 256 + CInt(LoByte) Next
End Sub
Hult's claims are really ludicrous. It looks like the only way to stop this endless litany of lies is to file a lawsuit.