PDA

View Full Version : PBP code to read R/C signal from receiver



malc-c
- 24th October 2009, 18:03
Guys,

Have tried searching the net and this forum, but nothing comes up, and as I'm a bit rusty on PBP, I'm after some pointers as to how to read the PPM signal from a normal RC receiver (1 -2ms repeated every 20ms).

I've got some ASM code that already does this, but really want to learn and develope PBP a little more. One search did turn up something on RC groups, but Alain has removed the source code :(

Acetronics2
- 25th October 2009, 14:07
Hi, Malc

What are you looking for exactly ???

The basic reading is simply achieved only with a PULSIN Command ....

Alain

DanPBP
- 26th October 2009, 01:11
Short example:



'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

@ DEVICE PIC12F683, MCLR_OFF
@ DEVICE PIC12F683, INTRC_OSC_NOCLKOUT
@ DEVICE PIC12F683, WDT_OFF
@ DEVICE PIC12F683, BOD_ON
@ DEVICE PIC12F683, PWRT_ON

'-------------------------------------------------------------------------------

OSCCON = %01110000 ' Internal 4MHz osc
ADCON0 = 0 ' A/D off
CMCON0 = 7 ' Comparators off
ANSEL = 0 ' Set all digital
WPU = 0 ' Internal pull-ups = off
OPTION_REG = %10000000 ' Pull-ups = off, GPIO.2 = I/O, prescaler to Timer1
GPIO = %00000000 ' All outputs = 0 on boot
TRISIO = %00001000 ' GPIO.3 input, GPIO.0,2,3,4,5 output

'-------------------------------------------------------------------------------

signal VAR GPIO.3
pulse VAR BYTE

'-------------------------------------------------------------------------------

main:
PulsIn signal, 1, pulse ' reads signal from receiver

IF (pulse >= 148) AND (pulse <= 152) Then
Low GPIO.0 ' turns LED off
Else
High GPIO.0 ' turns LED on
EndIF

GoTo main

'-------------------------------------------------------------------------------

End

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

malc-c
- 27th October 2009, 11:37
Thanks for the code example. I'll hook up a receiver to my Easypic5 board and have a play... I'll also have a read of the online manual :)

malc-c
- 27th October 2009, 19:45
Dan,

I've tried the following with a 12F675 and whilst it compiles and loads OK it doesn't do anything



@ __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON

__CONFIG
_INTRC_OSC_NOCLKOUT
_WDT_ON
_PWRTE_ON
_MCLRE_OFF
_BODEN_ON

OPTION_REG = %10000000 ' Pull-ups = off, GPIO.2 = I/O, prescaler to Timer1
GPIO = %00000000 ' All outputs = 0 on boot
TRISIO = %00001000 ' GPIO.3 input, GPIO.0,2,3,4,5 output
ANSEL = 0 ' Set all digital
WPU = 0 ' Internal pull-ups = off
'-------------------------------------------------------------------------------

signal VAR GPIO.3
pulse VAR BYTE

'-------------------------------------------------------------------------------

main:
PulsIn signal, 1, pulse ' reads signal from receiver

IF (pulse >= 148) AND (pulse <= 152) Then
Low GPIO.0 ' turns LED off
Else
High GPIO.0 ' turns LED on
EndIF

GoTo main

'-------------------------------------------------------------------------------

End


GPIO.0 is high all the time. GPIO.3 glows faint on the Easypic and brightens when the switch on the TX is activated indicating the PPM signals are being received on GPIO.3

I've also loaded some hex generated from assembly that works so the connections are sound. Any ideas ???

malc-c
- 27th October 2009, 20:01
Edit:

This seems to work



main:
PulsIn signal, 1, pulse ' reads signal from receiver

IF (pulse >= 100) AND (pulse <= 160) Then
Low GPIO.0 ' turns LED off
Else
High GPIO.0 ' turns LED on
EndIF

GoTo main


seems the range between >= and <= was the issue

Acetronics2
- 27th October 2009, 21:16
There was no issue, Malc

Led OFF for Neutral , ON for everything else.

a bit surprising, but ... it is !

Alain

malc-c
- 28th October 2009, 18:00
No issue, just the the original range didn't work. Once I changed the values between the <= and >= then it worked !

DanPBP
- 28th October 2009, 19:16
I'm glad the code worked for you... :) Wish there were more threads about R/Cs electronics... I own 25 R/C trucks from Traxxas and now a heli clone of the Trex500 and many of them have PICs turning on/off lights, flashers, blilnkers, neons, sirens, and a few more things... :D PICs are great for R/C projects!!!

malc-c
- 28th October 2009, 21:51
Dan, have to agree with you. It would be nice to see some more RC related PIC / PBP stuff.

Maybe we could start a thread and request the mods to sticky it in the code examples section ???? :) :)