Designing ham radio Projects - Bay-net.org

9 downloads 2493 Views 4MB Size Report
A practical guide to… designing ham radio projects with. PIC microcontrollers. George Zafiropoulos. KJ6VU www.bay-net.org ...
A practical guide to… designing ham radio projects with PIC microcontrollers

George Zafiropoulos KJ6VU www.bay-net.org

Topics • • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Ideas for Projects Using PIC Microcontrollers • • • • • • • • • • •

TR sequencer Memory keyer CW keyboard Station power controller Rotor controller Tone generator Test equipment controller Speaker / audio router Repeater controller Fox hunt tx controller Radio control

• • • • •

Morse code decoder APRS encoder Frequency counter Battery monitor Audio meter

Hardware Options

Design your own hardware

Use existing prototype board

Use pre-assembled hardware platform

Software Options

Write your own firmware

Write your own PC software

Topics • • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Picking a Microcontroller… Selection Criteria for Ham Radio Projects • • • • • • •

Cheap Easy to program (relatively) Serial interface (for control and configuration) Fast Non-volatile flash memory (program and data) 5V supply and I/O Wide variety of IO besides digital in/out… – A/D converter, SPI, UART, I2C, PWM (tone), etc…

• • • • •

DIP package Code examples Big eco-system RF immune Low noise generation

Microcontroller Suppliers

Devices for Hobby Projects Atmel AVR

Basic Stamp

Microchip PIC

Chips

Arduino

SRS TR-1 Board

Modules

Boards

Lets Pick the PIC… what’s a PIC? • Product of Microchip Technology • PIC1640 originally developed by General Instrument's Microelectronics Division • PIC = "Programmable Interface Controller“ • • • •

PICs are low cost & widely available Large user base Low cost or free development tools In 2008 Microchip shipped its 6,000,000,000th PIC processor

PIC 18Fxxxx Family

What’s Inside a PIC 18Fxxxx CPU Chip?

Lets Use the 18F2620… • • • • • • • • • • • • • • • • • •

CPU Up to 10 MIPS performance (40 MHz) C compiler optimized RISC architecture 8 x 8 Single Cycle Hardware Multiply System Internal oscillator support 31 kHz to 8 MHz Fail-Safe Clock Monitor – allows safe shutdown if clock fails Watchdog Timer with separate RC oscillator Wide operating Voltage range; 2.0V to 5.5V nanoWatt Power Managed Modes Run, Idle and Sleep modes Idle mode currents down to 5.8uA typical Sleep mode currents down to 0.1uA typical Analog Features 10-bit ADC, 10 channels, 100K samples/second Programmable Low Voltage Detection Module Programmable Brown-out Reset module Two Analog comparators with input multiplexing Peripherals Master Synchronous Serial Port supports SPI ™ and I2C™ Master and Slave Mode EUSART module including LIN bus support Four Timer Modules Up to 2 PWM outputs

18F2620 – 18F4620 – 18F8722 All code compatible, just more pins… 28 Pins

80 Pins

40 Pins

Topics

• • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Minimum Configuration – “Blinky” PicKit2 Programmer

Power Input

19 User Configurable I/O Pins PicKit2 Programmer

6 Analog Input Or Digital I/O Pins Power Input

13 Digital I/O Pins

Many Special Purpose I/O Pins PicKit2 Programmer

6 Analog Input Or Digital I/O Pins

PWM Interrupt

Timers PWM SPI / I2C Clock

Power Input

UART SPI data out SPI Data In or I2C Data

Howz That Work?

Minimum Configuration – “Blinky” PicKit2 Programmer

Power Input

Let’s add some additional input / output devices

Analog Inputs

Digital Outputs Digital Inputs

Now lets add an RS-232 Interface

RS-232 Interface

Topics

• • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Design Your Own Boards Low cost prototype PCB services Free design tools Prototype quality – Drilled and plated Production quality – Drilled, plated, solder mask, silkscreen Prototypes… Minimum order 2 boards ~$120 and up for 2 Or get 3 boards 2.5” x 3.8” for $52 www.expresspcb.com www.pcbexpress.com www.pcb123.com

Free Schematic Editor

Free Layout Editor

Use an bare “off the shelf” Project Board Examples from ME Labs Simple Prototype Boards

Blank Boards Multi-purpose Prototype Boards

Use an “off the shelf” Project Board with Firmware

SRS TR-1 Board

TR1 – Project Board

SRS TR-1 Board

TR1 Board

TR1 I/O Block Diagram

TR1 Serial Interface

RS-232

RS-485 “SierraBus”

Topics

• • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Software Development Flow Edit source code

Compile program Download into CPU

Run program

Use any ASCII text editor test.c

Compile or assemble into executable file test.hex

Use PicKit2 or similar programmer to transfer the .hex file into the program store flash memory in the PIC

It’s alive !

Compilers – Microchip MPLAB IDE & Assembler

Text editor Assembler Debugger Free !

Microchip C18 Compiler

Full-featured C compiler ANSI compliant Compatibility with object modules generated by the MPASM assembler Extensive library support • PWM • SPI • I2C • UART, USART • string manipulation • math libraries Free version available

Proton Basic Editor Compiler

Powerful and easy to use basic language • • • • • • •

• • • •

String handling Relational operations Boolean Logic Operators Floating Point Math In line assembly Graphical LCD support Compact Flash read and write Servo motor control X10 control USB in/out I2C

$199 Free lite version available for some chips

Plug in and Download the Program Open the .hex file

Hit the “Write” button

Topics

• • • • • •

Ham radio applications Microcontroller basics Hardware design examples Implementing your design Software tools Software examples

Software Examples Option #1 Design your own hardware Write your own firmware LED “Blinky” example

Option #2 Use firmware on TR1 board Write your own PC control program to control a coax relay

All Programs Have a Common Control Program Structure Initialize Program

Read Inputs Make Decisions Write Outputs

Subroutine Library

Loop forever

“Blinky” Written in Proton Basic ' ' ' '

============================================================================ blinky.bas Blinking LED demo using Proton Basic ============================================================================

Device 18F2620 XTAL = 40

' Select device type ' Set clock frequency to 40 MHz

CONFIG_START OSC = HSPLL CONFIG_END

' Set hardware configuration parameters ' Set 4x PLL on (10 MHz crystal * 4x = 40 MHz)

TRISC.1 = 0

' Set pin C1 connected to the status LED to be an output

main_loop: Low PORTC.1 DelayMS 200 High PORTC.1 DelayMS 200 GoTo main_loop

' ' ' ' '

Set pin C1 low (0 volts) LED on Delay 200 ms Set pin C1 high (5 volts) LED off Delay 200 ms Go to the top of the loop

“Blinky” Written in Microchip C18 /* blinky.c

-

This is a simple program that blinks the status LED

#include #pragma config WDT = OFF

/* Use PIC18 processor family /* Turn off watchdog timer checking

*/ */ */

/************************************************************************/ void delay (void) /* Delay subroutine */ { long i; /* Declare variable i as a long integer */ for (i = 0; i < 1000; i++); /* Increment the counter */ } /************************************************************************/ /************************************************************************/ void main (void) { TRISC = 0; /* Set IO register C to output mode */ while (1) /* Loop forever */ LATCbits.LATC1 = 0; delay (); LATCbits.LATC1 = 1; delay (); }

/* /* /* /*

Turn Wait Turn Wait

on status LED by calling the delay subroutine off status LED by calling the delay subroutine

*/ */ */ */

} /************************************************************************/

SC1 Open Source Projects – Antenna Relay Control

RS232

TR1 Board

“//pulse 1”

Control program on PC

Sends “//pulse 1”

Sends “//pulse 2”

Latching Coax Relay

Station Controller

Serial Commands Available in The TR1 Board OUTxx ON OUTxx OFF PULSE x ENABLE x DISABLE x HELP STATUS LOAD SAVE RESET

Turn ourput xx on (01-05) Turn output xx off (01-05) Pulse output x for 250 ms. Enables output x (1-5) Disables output x (1-5) Display this help information Display the current configuration Load configuration from flash memory Save configuration to flash memory Reset operating parameters to standard default values REBOOT Reboot the system STATETRIGGER xxx Updates PC program display if delay is > xxx (default = 250 ms) EYECANDY Test mode ADCALn xxx Ads or subtracts the offset xxx (in milivolts) to the A/D converter 'n' (1-4) ADnMIN xxx Sets low trigger alarm voltage to xxx volts ADnMAX xxx Sets high trigger alarm voltage to xxx volts RAD Read analog input voltage now WM ON Turn on basic watt meter monitoring. High reflected power disables sequencer" WM OFF Turn off basic watt meter monitoring WM CUSTOM Turn on watt meter monitoring. Inhibit sequence when reflected voltage hits WMLIMIT xxx Minimum reflected voltage that will inhibit the sequence

BOOT SILENT Turns off boot message BOOT VERBOSE Turns on boot message OPMODE xxx Set operating mode: 1 direct station control (default) or 2 TR Sequencer mode EVENT1 x Set event 1...3 to mode 1 pulse, 2 on, 3 off, 4 send update, 5 toggle KEYER ON Turn on keyer mode. Output 5 will send CW using the CW command KEYER OFF Turn off keyer mode. Output 5 will operate in normal sequencer mode CW xxxxx Send text xxxxx in CW using output 5 in keyer mode WPM xx Set CW speed in approximate words per minute (1-99) SETADDR xx Where xx is the board's network address (between 1 and 15) GETADDR Get the value of the board's network address SILENT ON Do not send messages to serial port when state changes SILENT OFF Send messages to serial port when state changes MSGDIRECT Set response to plain text format MSGNET Set response to network packet format OUT0n ON Manually turn ON output n (1-5) OUT0n OFF Manually turn OFF output n (1-5)

Antenna Relay Control – PC Program (Setup) '=================================================================== ' DEFINE VARIABLES AND PARAMETERS '=================================================================== ' Define error handlers on error goto [errorhandler] 'Go to [errorhandler] if there is a problem oncomerror [comerror] 'Go to [comerror] if the com port has problems Com = 16384 'Set com buffer size to 16k '=================================================================== ' OPEN CONFIG FILE coax_relay.env '=================================================================== 'First check to see if the .env file exists in the current directory CallDLL #ff, "IsFile", "coax_relay.env" As ptr, result As long If result 0 Then notice "Configuration file (coax_relay.env) not found." goto [done] end if 'File exists, open the file. open ".\coax_relay.env" for input as #11 line input #11, indata$ cport$ = indata$ close #11 '------------------------------------------------------------------'Com port parameters if cport$ = "" then cport$ = "1" 'Assign com port number cspeed$ = "9600" 'Assign com port baud rate comport$ = "com" + cport$ + ":" + cspeed$ + ",N,8,1,CS0,RS,DS0”

Antenna Relay Control – PC Program (Setup) '=================================================================== ' CONFIGURE WINDOW '=================================================================== win.main.width = 300 : global win.main.width 'Set window width win.main.height = 100 : global win.main.height 'Set window height win.main.ULX = 1 : global win.main.ULX 'Set window upper left X coord win.main.ULY = 1 : global win.main.ULY 'Set window upper left Y coord '------------------------------------------------------------------' SETUP MAIN WINDOW [WindowSetup] WindowWidth = win.main.width 'Set window parameters WindowHeight = win.main.height UpperLeftX = win.main.ULX UpperLeftY = win.main.ULY statictext #main.msg sw.version$, 10, 10, 290, 18 'Print text in window button #main.radio1, "Radio 1", [radio1], UL, 10, 35, 65, 30 'Define button 1 button #main.radio2, "Radio 2", [radio2], UL, 90, 35, 65, 30 'Define button 2 button #main.exit, "Exit", [done], UL, 170, 35, 65, 30 'Define button 3

Antenna Relay Control – PC Program (Application) '=================================================================== ' OPEN MAIN WINDOW '=================================================================== Open "SRS Remote Coax Switch" for Window as #main 'Open the main window #main "trapclose [Done]" [mainloop] wait

'Main program loop

'=================================================================== ' SUBROUTINES '=================================================================== [radio1] 'Go here when button 1 is pressed print #comm, "//pulse 1" 'Send string to com port goto [mainloop] 'Go to main loop [radio2] print #comm, "//pulse 2" goto [mainloop] [comerror] notice "COM port open failed.

Check the coax_relay.env file."

'=================================================================== ' SHUTDOWN PROGRAM '=================================================================== [errorhandler] [done] close #main 'Begin shutdown sequence, close windows close #comm 'Close com port close #ff 'Close .dll end 'End program

Summary • Easier then you may think • Many good tools and examples • Pick a project and jump in Express PCB www.expresspcb.com Microchip www.microchip.com ME Labs www.melabs.com Proton Basic www.picbasic.org Sierra Radio www.sierraradio.net