Code:
' STATION_ID3.BAS
' WRITTEN FOR PIC10F222
' WRITTEN BY DAVID PUROLA, N8NTA
' PROGRAM TO SEND STATION ID DATA AT A PREDITERMINED TIME INTERVAL or TRIGGERED
' BY PRESSING BUTTON FOR APPROX 2.3 SECONDS. CAN BE USED FOR REPEATER ID or FOR
' TRANSMITTER FOX HUNTING. TXENAB IS KEYED 250 Ms. BEFORE CW TRANSMISSION FOR
' KEYING OF THE RADIO PTT CIRCUIT.(07/18/2006)
'
asm
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_ON & _IOFSCS_8MHZ
movwf OSCCAL ; load factory osccal value at start-up
bcf OSCCAL,0 ; Set GP2 as I/O pin
ENDASM
DEFINE OSC 8
'
' ********************************************************************
' Define Port Variables
' ********************************************************************
DATA_OUT VAR GPIO.0 '0-MODULATED DATA TO RADIO AUDIO CIRCUIT (THRU RESISTIVE DIVIDER AND CAP)
TXENAB VAR GPIO.1 '0-TRANSMIT ENABLE OUTPUT (THRU FET TO DIODE AND RESISTOR TO GROUND FOR PTT)
SPARE2 VAR GPIO.2 '0-NOT USED
TRIGGER VAR GPIO.3 '1-EXTERNAL ID TRIGGER (PUSH BUTTON TO GROUND W/100K PULLUP)
' ********************************************************************
' Declare Constants
' ********************************************************************
FREQ CON 110 'CHANGE THIS CONSTANT TO VARY THE TONE FREQUENCY (APPROX 565 Hz.)
DIT CON 4 'CHANGE THIS CONSTANT TO VARY THE WPM RATE (DOT)
TIMEOUT CON 60 'ID TIMEOUT IN APPROX. .1 MINUTE INCREMENTS
PTTDELAY CON 250 'PTT PRE CW DELAY TIMING FOR RF GENERATION
'------------- DON'T CHANGE THESE VARIABLES AS THEY ARE DYNAMIC --------------
DAH CON DIT * 3 'DASH TIMING IS EQUAL TO 3 DOT'S
INTERDITDAH CON DIT * 12 'INTER DOT/DASH TIMING IS EQUAL TO 1 DOT
CHARTIME CON DIT * 3 * 12 'INTER CHARACTER TIME IS EQUAL TO 3 DOT'S
WRDTIME CON DIT * 7 * 12 'INTER WORD TIMING IS EQUAL TO 7 DOT'S
' ********************************************************************
' Declare Variables
' ********************************************************************
IDCHAR VAR BYTE
SCRATCH VAR BYTE
POINTER VAR BYTE
' ********************************************************************
' Define MORSE CHARACTERS
' ********************************************************************
' A B C D E F G H I J K L M N 0 P Q R S T U V W X Y Z
'$42,$84,$A4,$83,$01,$24,$C3,$04,$02,$74,$A3,$44,$C2,$82,$E3,$64,$D4,$43,$03,$81,$23,$14,$63,$94,$B4,$C4
' 0 1 2 3 4 5 6 7 8 9 /
'$FD,$7D,$3D,$1D,$0D,$05,$85,$C5,$E5,$F5,$95
'*********************************************************************
STATIONID: 'SEND STATION ID TO TRANSMITTER
'*********************************************************************
' ********************************************************************
' DO NOT CHANGE THESE LINES
' *******************************************************************
TRISIO = %11111000 'SET PORT DIRECTION REGISTER *
OPTION_REG = %11001000 'DISABLE PULL-UPS,PSA to WDT *
ADCON0 = %00000000 'Channel 0,A/D Off *
'********************************************************************
TXENAB = 1 'ENABLE TRANSMITTER
PAUSE PTTDELAY 'ALLOW TIME FOR RF TO BEGIN
IDCHAR = $FF 'DEFAULT FOR FIRST PASS
POINTER = 0
WHILE IDCHAR <> 0 'CYCLE THRU ALL CHARACTERS IN MESAGE UNTIL $00 IS REACHED (255 TOTAL CHARACTERS MAXIMUM)
' N 8 N T A _ T H I S _ I S _ T H E _ F O X
LOOKUP POINTER,[$82,$E5,$82,$81,$42,$FF,$81,$04,$02,$03,$FF,$02,$03,$FF,$81,$04,$01,$FF,$24,$E3,$94,$00],IDCHAR
IF IDCHAR <> $FF THEN 'IF NOT INTER CHARACTER SPACE THEN
SCRATCH = IDCHAR & 7 'HOW MANY DITS & DAHS
WHILE SCRATCH > 0 'LOOP FOR NUMBER OF DIT'S AND DAH'S
IF IDCHAR.7 = 1 THEN 'IF IT'S A DAH THEN
SOUND DATA_OUT,[FREQ,DAH] '~565 Hz
ELSE 'IF IT'S A DIT THEN
SOUND DATA_OUT,[FREQ,DIT] '~565 Hz
ENDIF
DATA_OUT = 0 'MAKE SURE OUTPUT IS AT 0
PAUSE INTERDITDAH 'PAUSE INTER DIT/DAH TIME
IDCHAR = IDCHAR << 1 'SHIFT FOR NEXT DIT or DAH
SCRATCH = SCRATCH - 1 'INCREMENT DIT/DAH POINTER
WEND
PAUSE CHARTIME 'PAUSE BETWEEN CHARACTERS
ELSE
PAUSE WRDTIME 'PAUSE BETWEEN WORDS
ENDIF
POINTER = POINTER + 1 'INCREMENT TO NEXT CHARACTER
WEND
GPIO = %00001000 'DISABLE TRANSMITTER & AUDIO OUTPUT
TRISIO = %11111001 'SET PORT DIRECTION REGISTER
IDCHAR = TIMEOUT 'SET FOR (TIMEOUT/10) MINUTES BEFORE NEXT TIMED ID
WHILE IDCHAR > 0 'MINUTES COUNTER
POINTER = 3 'SET FOR 6 SECONDS
WHILE POINTER > 0 '.05 SECOND COUNTER
SLEEP 1 'LOW POWER MODE FOR APPROX. 2.3 SECONDS
IF TRIGGER = 0 THEN STATIONID 'CHECK FOR EARLY ID
POINTER = POINTER - 1
WEND
IDCHAR = IDCHAR - 1
WEND
GOTO STATIONID 'SEND STATION ID TO TRANSMITTER
STOP
Bookmarks