I have a PicAxe 022 development board for programming 28 or 40-pin chips. One nice thing about using the PicAxe mcu is that it comes in several varieties ranging from 8-pin to 40-pin chips. This means if you only need 4 input/outputs for a project you can choose a smaller (less expensive) chip - and if you decide to upgrade to a larger chip later (with more inputs/outputs), the original code should still work.
In addition to being versatile, the programming language (Basic) is very straightforward and easy to pick up. I am used to writing code in C to program my AVR microcontrollers and it only took about an hour to get similar code working on my PicAxe. Here is some sample code that will read 2 R/C servo signals and turn 2 LED's ON/OFF:
' Servo Decode ' PicAxe 40x ' JDW 2010 symbol T1 = w1 ' create symbols for variables symbol T2 = w2 main: pulsin 0,1,T1 ' pulseIn the 2 R/C channels and record values to T1 & T2 pulsin 1,1,T2 if T1 > 155 then ' check value high 4 ' if above 155, turn LED ON else low 4 ' if not, turn LED OFF endif if T2 > 155 then ' check value high 5 ' if above 155, turn LED ON else low 5 ' if not, turn LED OFF endif SerTxD (" ", #T1 , " ", #T2) ' write values to terminal for viewing on computer goto main
Here is a similar bit that will decode 2 R/C channels and output the corresponding PWM signals (80kHz) in either direction.
R/C signals go to input 0 and 1. PWM outputs to pwm1 and pwm2.
symbol PPM1 = w0 symbol PPM2 = w1 symbol PWM1 = w2 symbol PWM2 = w3 init: pwmout 1, 11, 0 pwmout 2, 11, 0 main: pulsin 0,1,PPM1 pulsin 1,1,PPM2 if PPM1 > 155 then let PWM1 = PPM1 - 150 low 3 high 2 pwmduty 1, PWM1 low 4 elseif PPM1 < 145 then let PWM1 = 150 - PPM1 low 2 high 3 pwmduty 1, PWM1 low 4 else low 2 low 3 pwmduty 1, 0 high 4 endif if PPM2 > 155 then let PWM2 = PPM2 - 150 low 7 high 6 pwmduty 2, PWM2 low 5 elseif PPM2 < 145 then let PWM2 = 150 - PPM2 low 6 high 7 pwmduty 2, PWM2 low 5 else low 6 low 7 pwmduty 2, 0 high 5 endif 'SerTxD (" ", #PPM1 , " ", #PPM2) goto main