Ok, so further testing - this time using Audacity to record the waveforms as it gives me more freedom to scroll back and forth - has resulted in the following 3 waveforms: http://img527.imageshack.us/my.php?i...8222006dl4.png
I'm going to opt to completely ignore the first transmission sequence as the start of it is a little messed up and target the second transmission sequence (I pushed the button as fast as I could, I always got 2 or more sequences).
So the following code is what I've got (haven't run it yet).
Does it look right?
I was playing around with it before as '1's instead of '0's in pulsin but it was picking up the block of 0's not the block of 1's. (If that makes any sense)
I've decided to chop the data comming up as
ADDRESS-DATA-S
1111000100110101-11000000-0
1111000100110101-00110000-0
1111000100110101-00000011-0
Following the encoder's specs this is actually
110F01FF1000S
110F01FF0100S
110F01FF0001S
F = Floating
S = Sync
Further reading of the specs - there'll be 4 sequences. Seeing as the first of the sequence is trashed, I just need to record and compare the other 3
	Code:
	' Configure the FUSE options for the compiler
@     device pic16F628A, hs_osc, wdt_off, pwrt_on, lvp_off, protect_off, bod_on, cpd_off, pwrt_off, mclr_off
' Running a 4Mhz clock
DEFINE OSC 20
DEFINE PULSIN_MAX 3000
' Setup the USART
DEFINE HSER_RCSTA 90h      ' Receive register to receiver enabled
DEFINE HSER_TXSTA 20h      ' Transmit register to transmitter enabled
DEFINE HSER_BAUD 9600      ' Set baud rate
CMCON  = 7
ALL_DIGITAL
RFIN VAR PORTB.7
INPUT RFIN
PBITS   VAR BYTE[17] ' The bits we've read
RAW     VAR BYTE     ' The raw pulsin value
ADDRESS VAR WORD     ' Storage for the address
DBYTE   VAR BYTE     ' Storage for the data
X       VAR BYTE
Y       VAR BYTE
GET_ADD:
    ADDRESS = 0 : RAW = 0 : DBYTE = 0
GET_PULSE:
    ' Count 4 long pulses.
    FOR x = 0 TO 3
        PULSIN RFIN, 0, RAW
        if RAW < 220 OR RAW > 230 THEN GET_PULSE
    NEXT X    
    ' Count 3 short pulse.
    FOR X = 0 to 2
        PULSIN RFIN, 0, RAW
        IF RAW < 70 OR RAW > 80 THEN GET_PULSE
    NEXT X
    ' Read 9 address bits and 8 data bits    
    FOR X = 0 TO 16
        PULSIN RFIN, 0, RAW
        PBITS[x] = NCD RAW
    NEXT X
    ' Read a sync bit    
    PULSIN RFIN, 0, RAW
    IF RAW < 70 OR RAW > 80 THEN GET_PULSE
    
    
    ADDRESS = 511 ' Maxmimum known ID
    FOR X = 0 to 8
        IF PBITS[x] > 7 THEN ADDRESS.0[X] = 0
    NEXT X
    
    DBYTE = 255 ' Maximum known data value
    Y=0
    FOR X = 9 TO 16
        IF PBITS[X] > 7 THEN DBYTE.0[Y] = 0
        Y = Y + 1
    NEXT X
    
    
    IF ADDRESS > 0 THEN
        WRITE 1, ADDRESS.LowByte
        WRITE 2, ADDRESS.HighByte
        Write 3, DBYTE
        HSEROUT ["ADD = ",IBIN9 ADDRESS," : ",IDEC ADDRESS,13,10]
        HSEROUT ["DAT = ",IBIN8 DBYTE," : ",IDEC DBYTE,13,10]
    ENDIF
    GOTO GET_ADD
END
 
				
			
Bookmarks