I'm trying to figure out how to read the telemetry stream coming from an RC receiver (FrSky D8R-II) and I could use some help. I'm pretty new to PICAXE and this is the first time I've tried to use the serin.
The code below doesn't work with both qualifiers in place (it just stops at the serin) and I can't figure out why. If I remove the $7E qualifier, I get the first block of data shown below. The second block of data is the raw data coming from the transmitter into COM1. The frame format, as shown on the attached PDF file section 3.1.3, is a total of 11 bytes including a HDR ($7E), Frame ID($FE), Port1, Port2, Link Quality, 5 data bytes, end byte. The second block of data shows the correct frame format with 11 bytes. Looking at the first block of data below, if you count from 7E to 7E and add in the $FE qualifier, there are only 10 bytes. There should be 11. I'm only interested in the data bytes but I'd like to understand whats going on here.
1) Why doesn't the serin see the $7E qualifier?
2) Why am I losing a byte?
3) Since the qualifier $FE comes after $7E in the data stream, why are there two 7E's in the first block of data?
View attachment TwoWayProtocol.pdf
Data from above code without the $7E quilifier:
2E 31 A3 06 00 00 00 7E 7E 2E 31 2D 32 00 00 00
7E 7E AE 4C 4B 06 00 00 00 7E 7E AE 6C 4B 06 00
00 00 7E 7E AE 4C 4B 06 00 00 00 7E 7E AE 4C 6B
06 00 00 00 7E 7E 2E 6C 6B 06 00 00 00 7E 7E 2E
6C 8B 06 00 00 00 7E 7E 5C 4C 8B 06 00 00 00 7E
7E 5C 4C 6B 06 00 00 00 7E 7E 5C 6C 6B 06 00 00
00 7E 7E 2E 4C 6B 06 00 00 00 7E 7E 5C 4C 4B 06
00 00 00 7E 7E AE 6C 4B 06 00 00 00 7E 7E 2E 4C
8B 06 00 00 00 7E 7E 5C 6C 8B 06 00 00 00 7E 7E
5C 6C 8B 06 00 00 00 7E 7E 2E 6C 8B 06 00 00 00
7E 7E 2E 6C 8B 06 00 00 00 7E 7E 2E 4C AB 06 00
00 00 7E 7E AE 6C 8B 06 00 00 00 7E 7E AE 6C AB
06 00 00 00 7E 7E AE 6C AB 06 00 00 00 7E 7E AE
6C 8B 06 00 00 00 7E 7E AE 6C 6B 06 00 00 00 7E
7E AE 6C 8B 06 00 00 00 7E 7E AE 6C 8B 06 00 00
00 7E 7E AE AC 88 06 00 00 00 7E 7E AE 6C 4B 06
00 00 00 7E 7E AE 4C 6B 06 00 00 00 7E 7E
Raw data from transmitter to COM1:
7E FE 57 6E 1D 1D 00 00 00 00 7E 7E FE 57 6E 48
3A 00 00 00 00 7E 7E FE 57 6E 73 57 00 00 00 00
7E 7E FE 57 6E 67 73 00 00 00 00 7E 7E FE 57 6E
5C 90 00 00 00 00 7E 7E FE 57 6E 56 AD 00 00 00
00 7E 7E FE 57 6E 56 CA 00 00 00 00 7E 7E FE 57
6E 56 E7 00 00 00 00 7E 7E FE 57 6E 56 DE 00 00
00 00 7E 7E FE 57 6E 56 D5 00 00 00 00 7E 7E FE
57 6E 57 CC 00 00 00 00 7E 7E FE 57 6E 56 C4 00
00 00 00 7E 7E FE 57 6E 57 BB 00 00 00 00 7E 7E
FE 57 6E 57 B2 00 00 00 00 7E 7E FE 57 6E 56 A9
00 00 00 00 7E 7E FE 57 6E 56 A0 00 00 00 00 7E
7E FE 57 6E 57 A0 00 00 00 00 7E 7E FE 57 6E 57
A1 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00 00
7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E
57 A1 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00
00 7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57
6E 58 A2 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00
00 00 7E 7E FE 57 6E 58 A1 00 00 00 00 7E 7E FE
57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 57 A2 00
00 00 00 7E 7E FE 57 6E 56 A1 00 00 00 00 7E 7E
FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 58 A1
00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00 00 7E
7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 57
A2 00 00 00 00 7E 7E FE 57 6E 57 A2 00 00 00 00
7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E
58 A2 00 00 00 00 7E
The code below doesn't work with both qualifiers in place (it just stops at the serin) and I can't figure out why. If I remove the $7E qualifier, I get the first block of data shown below. The second block of data is the raw data coming from the transmitter into COM1. The frame format, as shown on the attached PDF file section 3.1.3, is a total of 11 bytes including a HDR ($7E), Frame ID($FE), Port1, Port2, Link Quality, 5 data bytes, end byte. The second block of data shows the correct frame format with 11 bytes. Looking at the first block of data below, if you count from 7E to 7E and add in the $FE qualifier, there are only 10 bytes. There should be 11. I'm only interested in the data bytes but I'd like to understand whats going on here.
1) Why doesn't the serin see the $7E qualifier?
2) Why am I losing a byte?
3) Since the qualifier $FE comes after $7E in the data stream, why are there two 7E's in the first block of data?
View attachment TwoWayProtocol.pdf
Code:
[color=Green];PIC2 Tx end[/color]
[color=Blue]setfreq m8[/color]
[color=Black]main:[/color]
[color=Blue]serin c.0[/color][color=Black],[/color][color=Blue]T9600_8[/color][color=Black],[/color][color=Blue]([/color][color=Navy]$7E[/color][color=Black],[/color][color=Navy]$FE[/color][color=Blue])[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7[/color][color=Black],[/color][color=Purple]b8[/color][color=Black],[/color][color=Purple]b9[/color]
[color=Blue]sertxd([/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7[/color][color=Black],[/color][color=Purple]b8[/color][color=Black],[/color][color=Purple]b9[/color][color=Blue])
high c.4
pause [/color][color=Navy]200[/color]
[color=Blue]low c.4
pause [/color][color=Navy]200[/color]
[color=Blue]goto [/color][color=Black]main[/color]
Data from above code without the $7E quilifier:
2E 31 A3 06 00 00 00 7E 7E 2E 31 2D 32 00 00 00
7E 7E AE 4C 4B 06 00 00 00 7E 7E AE 6C 4B 06 00
00 00 7E 7E AE 4C 4B 06 00 00 00 7E 7E AE 4C 6B
06 00 00 00 7E 7E 2E 6C 6B 06 00 00 00 7E 7E 2E
6C 8B 06 00 00 00 7E 7E 5C 4C 8B 06 00 00 00 7E
7E 5C 4C 6B 06 00 00 00 7E 7E 5C 6C 6B 06 00 00
00 7E 7E 2E 4C 6B 06 00 00 00 7E 7E 5C 4C 4B 06
00 00 00 7E 7E AE 6C 4B 06 00 00 00 7E 7E 2E 4C
8B 06 00 00 00 7E 7E 5C 6C 8B 06 00 00 00 7E 7E
5C 6C 8B 06 00 00 00 7E 7E 2E 6C 8B 06 00 00 00
7E 7E 2E 6C 8B 06 00 00 00 7E 7E 2E 4C AB 06 00
00 00 7E 7E AE 6C 8B 06 00 00 00 7E 7E AE 6C AB
06 00 00 00 7E 7E AE 6C AB 06 00 00 00 7E 7E AE
6C 8B 06 00 00 00 7E 7E AE 6C 6B 06 00 00 00 7E
7E AE 6C 8B 06 00 00 00 7E 7E AE 6C 8B 06 00 00
00 7E 7E AE AC 88 06 00 00 00 7E 7E AE 6C 4B 06
00 00 00 7E 7E AE 4C 6B 06 00 00 00 7E 7E
Raw data from transmitter to COM1:
7E FE 57 6E 1D 1D 00 00 00 00 7E 7E FE 57 6E 48
3A 00 00 00 00 7E 7E FE 57 6E 73 57 00 00 00 00
7E 7E FE 57 6E 67 73 00 00 00 00 7E 7E FE 57 6E
5C 90 00 00 00 00 7E 7E FE 57 6E 56 AD 00 00 00
00 7E 7E FE 57 6E 56 CA 00 00 00 00 7E 7E FE 57
6E 56 E7 00 00 00 00 7E 7E FE 57 6E 56 DE 00 00
00 00 7E 7E FE 57 6E 56 D5 00 00 00 00 7E 7E FE
57 6E 57 CC 00 00 00 00 7E 7E FE 57 6E 56 C4 00
00 00 00 7E 7E FE 57 6E 57 BB 00 00 00 00 7E 7E
FE 57 6E 57 B2 00 00 00 00 7E 7E FE 57 6E 56 A9
00 00 00 00 7E 7E FE 57 6E 56 A0 00 00 00 00 7E
7E FE 57 6E 57 A0 00 00 00 00 7E 7E FE 57 6E 57
A1 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00 00
7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E
57 A1 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00
00 7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57
6E 58 A2 00 00 00 00 7E 7E FE 57 6E 57 A1 00 00
00 00 7E 7E FE 57 6E 58 A1 00 00 00 00 7E 7E FE
57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 57 A2 00
00 00 00 7E 7E FE 57 6E 56 A1 00 00 00 00 7E 7E
FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 58 A1
00 00 00 00 7E 7E FE 57 6E 57 A1 00 00 00 00 7E
7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E 57
A2 00 00 00 00 7E 7E FE 57 6E 57 A2 00 00 00 00
7E 7E FE 57 6E 57 A1 00 00 00 00 7E 7E FE 57 6E
58 A2 00 00 00 00 7E