![]() | ![]() | ![]() |
| |||||||
| Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc. |
![]() |
| | Tools |
| | #1 |
|
First of all, I know it is a well documented subject, but I have now spent many hours trying to find out what changes I need to make to my 16F84A code, to make it compatible with a newer 16F628A, and am now a little confused by all the different sources of information, I have searched for the migration document that Nigel mentions in a lot of his posts with no luck, I am very new to PIC programming, and not confident in what changes need to be made, I would also like to enable the internal oscillator to save on external components, and to add higher accuracy than when using a external resonator. I have the assember code, and understand that I need to add a couple of extra lines of text. I can upload the text file if this helps, the circuit is for a very simple CTCSS tone generator. Many thanks in advance, Karl.
__________________ If you don't ask, you don't get!!!! | |
| |
| | #2 |
|
The only changes I can think of are to the configuration line for the internal oscillator, and add the lines 'movlw 7', 'movwf CMCON' to disable the comparators to allow use of the digital pins.
Last edited by dougy83; 15th June 2009 at 01:29 AM. | |
| |
| | #3 |
|
Post your code and I'll show you what to change
| |
| |
| | #4 |
|
The other main change is the user memory (SFRs) starts at 0x20 instead of 0x0c. There are also differences in the peripherals but these are not really a problem unless the code uses the EEPROM. Mike. | |
| |
| | #5 |
|
Thanks for the suggestions so far, I have attached the origional code, Karl
__________________ If you don't ask, you don't get!!!! | |
| |
| | #6 |
|
A quick play and I think this should work, Code: #include "p16F628a.inc" ; This includes PIC16F628 definitions for the MPASM assembler __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC title "CTCSS Encoder v1.4 for 16c84 Tony Hunt VK5AH" ; 14-4-99 ; Assemble with MPASM ; See below for wiring details ; ;list P=16C84 ;__config 3FF9H ;XTAL OSC @4Mhz,NO WATCHDOG,PWRRST,NO CP. ;__idlocs 1234 errorlevel -302 ; CNT1 equ 20H ;PRESCALLER COUNTER REG 1 CNT2 equ 21H ;PRESCALLER COUNTER REG 2 CNT3 equ 22H ;PRESCALLER COUNTER REG 3 TONREG equ 23H ;REGISTER FOR TONE NUMBER PRES1 equ 24H ;PRESCALLER STORE 1 PRES2 equ 25H ;PRESCALLER STORE 2 PRES3 equ 26H ;PRESCALLER STORE 3 OPTREG equ OPTION_REG; 81H PC equ PCL; 2 PULLUP equ 7 OUT equ 2 PTT equ 7 goto START org 0100 ;move to make room for extra code START bsf STATUS,RP0 ;SELECT REG BANK 1 bsf TRISB,PTT ;SETUP RB7 AS INPUT FOR PTT bcf TRISA,OUT ;SETUP RA2 AS OUTPUT FOR TONE bcf OPTREG,PULLUP ;SET PULLUP RESISTORS ON PORTB movlw 0xFF ; SET PORTB AS I/Ps movwf TRISB ; RB0-RB5 FOR SWITCH INPUTS ; movlw 0x07 ;turn off comparators movwf CMCON bcf STATUS,RP0 ;SELECT REG BANK 0 bcf INTCON,GIE ;DISABLE GIE INTERUPTS bsf INTCON,RBIE ;ENABLE PORT B CHANGE INTERUPT movf TRISB,W ;READ DIP SWITCHES INTO W movwf TONREG ;STORE IN 0F REG bcf TONREG,6 ; CLEAR BITS 6&7 AS bcf TONREG,7 ; THEY ARE IRRELAVANTS movf TONREG,W ;RE-STORE INTO W addwf TONREG,F ; MULTIPLY BY 3 addwf TONREG,F ; FOR TONE TABLE OFFSET ; movf TONREG,W ;RELOAD TO W FOR OFFSET call TONTBL ;GOTO TONE LOOKUP TABLE movwf PRES1 ;STORE FIRST VALUE FROM TABLE ; incf TONREG,F ;INCREMENT FOR NEXT TABLE VALUE movf TONREG,W ;RELOAD W FOR OFFSET call TONTBL ;GOTO TONE LOOKUP TABLE movwf PRES2 ;STORE SECOND VALUE FROM TABLE ; incf TONREG,F ;INCREMENT FOR NEXT TABLE VALUE movf TONREG,W ;RELOAD W FOR OFFSET call TONTBL ;GOTO TONE LOOKUP TABLE movwf PRES3 ;STORE THIRD VALUE FROM TABLE ; ; RELOAD movf PRES1,W ;LOAD W WITH PRESET FOR 1 movwf CNT1 ;PRELOAD PRESCALLER 1 movf PRES2,W ;LOAD W WITH PRESET FOR 3 movwf CNT3 ;PRELOAD PRESCALLER 3 movf PRES3,W ;LOAD W WITH PRESET FOR 2 READY PTTCHK btfsc PORTB,PTT ;TEST PTT LINE goto WAIT ;SLEEP TILL LOW call CHORUS ;DO DIVIDER/PRESCALLER ROUTINE ; OUTPUT btfss PORTA,OUT ;TEST O/P HI OR LO AT PRESENT goto HI ;IF LO GO SET HI goto LO ;IF HI GO SET LO ; HI nop ;BALANCE OUT CYCLE TIME MARK&SPACE bsf PORTA,OUT ;MAKE O/P HI goto RELOAD ;RETURN TO START OF CYCLE ; LO bcf PORTA,OUT ;MAKE O/P LO goto RELOAD ;RETURN TO START OF CYCLE ; CHORUS PRE1 decfsz CNT1,F ;DECREMENT PRESCALLER 1 goto PRE2 goto FINE ;CALL FINE ADJUST SUBROUTINE PRE2 movwf CNT2 ;RELOAD PRESCALLER 2 ; PREE decfsz CNT2,F ;DECREMENT PRESCALLER 2 goto PREE ;GO BACK AND DECREMENT PRE2 TILL 00 ; goto PRE1 ;GO BACK AND DECREMENT PRE1 TILL 00 ; FINE decfsz CNT3,F ;DECREMENT PRESCALLER 3 goto FINE ;GO BACK AND DECREMENT PRE3 TILL 00 return ;RETURN TO CHANGE O/P AND CHECK PTT ETC ; WAIT bcf INTCON,RBIF ;CLEAR PORT B CHANGE INT FLAG sleep ;SLEEP AND WAIT FOR PTT nop bcf INTCON,GIE ;DISABLE GLOBAL INTERUPTS AGAIN goto PTTCHK ;CHECK IF PTT PASSES TEST ; ; ; ;TONES TABLE AT 0008H org 0007H TONTBL addwf PC,F ; W+PC ->PC, JUMP DOWN TABLE ; ; ; 16c84 PIN ; 11 10 9 8 7 6 ; TONE FREQ RB5 RB4 RB3 RB2 RB1 RB0 ; dt 02,01,0x9D ; 000 1Khz TEST 0 0 0 0 0 0 dt 86,82,10 ; 001 67.0 0 0 0 0 0 1 dt 81,85,10 ; 002 69.4 * 0 0 0 0 1 0 dt 84,80,0x0F ; 003 71.9 0 0 0 0 1 1 dt 7F,85,0x0F ; 004 74.4 0 0 0 1 0 0 dt 7B,7C,0x0F ; 005 77.0 0 0 0 1 0 1 dt 76,86,0x0F ; 006 79.7 0 0 0 1 1 0 dt 72,82,0x0F ; 007 82.5 0 0 0 1 1 1 dt 74,8F,0x0E ; 008 85.4 0 0 1 0 0 0 dt 63,91,10 ; 009 88.5 0 0 1 0 0 1 dt 5F,9A,10 ; 010 91.5 0 0 1 0 1 0 dt 5B,47,11 ; 011 94.8 0 0 1 0 1 1 dt 55,88,11 ; 012 97.4 0 0 1 1 0 0 dt 56,49,11 ; 013 100.0 0 0 1 1 0 1 dt 09,6E,0xB9 ; 014 103.5 0 0 1 1 1 0 dt 08,81,0xC9 ; 015 107.2 0 0 1 1 1 1 dt 0A,71,98 ; 016 110.9 0 1 0 0 0 0 dt 0B,76,83 ; 017 114.8 0 1 0 0 0 1 dt 0A,0xCA,83 ; 018 118.8 0 1 0 0 1 0 dt 0A,9A,83 ; 019 123.0 0 1 0 0 1 1 dt 09,0xF1,83 ; 020 127.3 0 1 0 1 0 0 dt 08,93,9D ; 021 131.8 0 1 0 1 0 1 dt 07,94,0xB0 ; 022 136.5 0 1 0 1 1 0 dt 07,7C,0xAD ; 023 141.3 0 1 0 1 1 1 dt 07,85,0xA5 ; 024 146.2 0 1 1 0 0 0 dt 08,7B,89 ; 025 151.4 0 1 1 0 0 1 dt 08,80,83 ; 026 156.7 0 1 1 0 1 0 dt 07,0xA2,90 ; 027 159.8 * 0 1 1 0 1 1 dt 08,47,86 ; 028 162.2 0 1 1 1 0 0 dt 07,60,95 ; 029 165.5 * 0 1 1 1 0 1 dt 08,86,78 ; 030 167.9 0 1 1 1 1 0 dt 07,92,87 ; 031 171.3 * 0 1 1 1 1 1 dt 07,90,85 ; 032 173.8 1 0 0 0 0 0 dt 07,7D,85 ; 033 177.3 * 1 0 0 0 0 1 dt 09,5A,66 ; 034 179.9 1 0 0 0 1 0 dt 09,48,66 ; 035 183.5 * 1 0 0 0 1 1 dt 07,9E,78 ; 036 186.2 1 0 0 1 0 0 dt 08,0xBB,60 ; 037 189.9 * 1 0 0 1 0 1 dt 09,4C,60 ; 038 192.8 1 0 0 1 1 0 dt 08,9D,60 ; 039 196.6 * 1 0 0 1 1 1 dt 09,2F,60 ; 040 199.5 * 1 0 1 0 0 0 dt 07,82,70 ; 041 203.5 1 0 1 0 0 1 dt 07,76,70 ; 042 206.5 * 1 0 1 0 1 0 dt 07,66,70 ; 043 210.7 1 0 1 0 1 1 dt 07,6F,6A ; 044 218.1 1 0 1 1 0 0 dt 06,0xA3,70 ; 045 225.7 1 0 1 1 0 1 dt 06,98,70 ; 046 229.1 * 1 0 1 1 1 0 dt 06,8A,70 ; 047 233.6 1 0 1 1 1 1 dt 06,72,70 ; 048 241.8 1 1 0 0 0 0 dt 04,0xC3,99 ; 049 250.3 1 1 0 0 0 1 dt 04,0xB9,99 ; 050 254.1 * 1 1 0 0 1 0 dt 05,1C,99 ; 051 255 * 1 1 0 0 1 1 dt 03,15,20 ; 052 1750 Eu Tone 1 1 0 1 0 0 dt 05,0F,10 ; 053 1800 Eu Tone 1 1 0 1 0 1 dt 01,84,9D ; 054 1200 Packet 1 1 0 1 1 0 dt 02,13,30 ; 055 2200 Packet 1 1 0 1 1 1 dt 03,26,50 ; 056 800 * 1 1 1 0 0 0 dt 03,0F,50 ; 057 900 * 1 1 1 0 0 1 dt 02,3F,50 ; 058 1100 * 1 1 1 0 1 0 dt 03,36,20 ; 059 1300 * 1 1 1 0 1 1 dt 01,68,20 ; 060 1500 * 1 1 1 1 0 0 dt 03,09,20 ; 061 2000 * 1 1 1 1 0 1 dt 02,1A,20 ; 062 2500 * 1 1 1 1 1 0 dt 02,07,20 ; 063 3500 * 1 1 1 1 1 1 ; ; * Indicates non EIA standard tone ; org 2100H de "TonyHunt VK5AH CTCSSENC v 1.4 " end All CTCSS tones are within EIA standard of .08% . Use a 4Mhz crystal with 2x18pF capacitors. PTT line is active LOW. PTT is RB7 Pin 13. OUTPUT tone is on RA2 Pin1 ,see Low pass filter diag. Lines RB0-RB5 can be fitted with DIP switches to set tone frequencies as per table above. A 1 on the table indicates the RB pin is logic HI . All RB port pins have been programmed with internal pullup resistors and will float HI if left open. The binary inputs are read only on power up and not each time the PTT is keyed. For CTCSS tones use a Low pass filter as shown here as the output waveform is square. RO is an padding resistor to allow for level adjustment typically 20k. RA2--------2k2----------RO----Output Pin1 | | 1uF | GND | |
| |
| | #7 | |
| Quote:
![]() As suggested, there's very little to alter, add the two comparator disabling lines, alter the config word, and alter the GPR start address - if you use the data EEPROM, I seem to remember there's a slight difference there as well. | ||
| |
| | #8 |
|
Thankyou Pommie, will try it in a circuit tonight and let you know if it works OK, forgot to ask, is this code using the internal oscilator or external? Karl.
__________________ If you don't ask, you don't get!!!! | |
| |
| | #9 |
|
It is using an external 4MHz crystal. You could change it to use the internal oscillator but it is only accurate to 1% and this will cause problems with the frequencies. Mike. | |
| |
| | #10 |
|
Still no luck with the code, I assembled with the MPLAB software and programmed a chip but appears dead, am going to study the differences in the code and try and make sense of it, I hate to be beaten!!
__________________ If you don't ask, you don't get!!!! | |
| |
| | #11 |
|
Post the code, and the full circuit, and we'll look it over.
| |
| |
| | #12 |
|
I have attached the files, from what I have read online and thru the posts, with changes made it should work. Thanks again for your help.
__________________ If you don't ask, you don't get!!!! | |
| |
| | #13 |
|
On a very quick look, you're not turning the comparators off still, they are in bank 0 not bank 1. You're also not declaring the processor. I've done those very simple mods, try it now. | |
| |
| | #14 |
|
Thanks to everyone for the help, all now appears to be working perfect, Karl
__________________ If you don't ask, you don't get!!!! | |
| |
| | #15 |
|
Karl, Is this for 2 meter repeater access? If so, how are you sending tone through transmiter? Regards, Mike, K8LH | |
| |
|
| Tags |
| 16f84a, code |
| Thread Tools | |
| Display Modes | |
| |
Similar | ||||
| Title | Starter | Forum | Replies | Latest |
| migrating code 16F84 ==> 16F628A | whiz115 | Micro Controllers | 8 | 14th March 2008 11:56 PM |
| 16c84 code on 16f84a | serj.t.s | Micro Controllers | 3 | 3rd September 2007 01:17 PM |
| code from 16f84a to 16f88 | savnik | Micro Controllers | 13 | 1st July 2007 04:50 AM |
| 16F84A project... need source code for an alarm system im making | wazza_d | Electronic Projects Design/Ideas/Reviews | 0 | 16th May 2007 10:33 AM |
| Need help on porting code from 16c71 to 16f628a | johnnyquest | Micro Controllers | 2 | 20th December 2004 11:05 AM |