|
|
View previous topic :: View next topic |
Author |
Message |
baybarsk
Joined: 06 Mar 2010 Posts: 3
|
PIC18F65J10 delay function problem in MPLAB |
Posted: Sat Mar 06, 2010 5:42 am |
|
|
Hello,
I have some difficulties with using delay function.
I used PIC18F65J10 and 8MHZ crystal oscillator. Connection of crystal is like in this link:
http://www.stanford.edu/class/ee281/projects/aut2001/avrtetris/hardware_files/image008.jpg
Depend on code, led on Port A, 4th bit, must toggle every 500 ms. However, it toggles after 8 times more time. It takes about 4 seconds to toggle. I used
Code: |
#use delay (clock=8000000)
|
But as I said, it toggles about 4 second. When i use
Code: |
#use delay (clock=1000000)
|
even though its connected 8Mhz crystal, it toggles about right time.
I used different times, about 100ms, 1000ms and result not different.
I am using PCH v4.093, and as an editor MPLAB. I am not using CCS's editor. I compile code in MPLAB.
What can be the problem that cause delay function can't work right? I am thinking maybe because of MPLAB. In MPLAB, checkbox is checked, that says "configuration bits is set in code" .
Thanks
Code is below
Code: |
#include <18F65J10.h>
#device adc=8
#FUSES NOWDT
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NODEBUG
#FUSES NOPROTECT //Code not protected from reading
#use delay (clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
setup_spi2(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_4(T4_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
do{
output_toggle(pin_a4);
delay_ms(500);
}while(TRUE);
}
|
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Mar 06, 2010 11:05 am |
|
|
How are testing this ? Are you testing it on a hardware board, or in
the MPLAB simulator ? |
|
|
Guest
|
|
Posted: Sat Mar 06, 2010 2:22 pm |
|
|
I used DEBUG, also I used MPLAB in programmer mode, but in both result is same. I didn't use mplab sim.
It looks me strange. Its so simple program. I face. First I thought its because I use 18F65J10 first time and don't know well. But as I read till now, what I did is correct. |
|
|
Guest
|
|
Posted: Sat Mar 06, 2010 2:23 pm |
|
|
Sorry I forget indicate, I used hardware debug, and programmer. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Mar 06, 2010 3:20 pm |
|
|
Have you tried that crystal (and capacitors) on any other PIC ?
I mean, a different PIC than an 18F65J10. Try that and see if
the other PIC runs at the correct speed. |
|
|
baybarsk
Joined: 06 Mar 2010 Posts: 3
|
|
Posted: Tue Mar 09, 2010 7:25 am |
|
|
I am sorry, Guest was me,
I looked OSC pins with 100MHz oscilloscope, and there is a clean 8MHz.
I looked how my C code converted to assembly,
here code
Code: |
1: #include <18F65J10.h>
0000 EF16 GOTO 0x2c
2: #device adc=8
3:
4: #FUSES NOWDT
5: #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
6: #FUSES NODEBUG
7: #FUSES NOPROTECT //Code not protected from reading
8: #use delay (clock=8000000)
0004 6AEA CLRF 0xfea, ACCESS
0006 0E07 MOVLW 0x7
0008 6EE9 MOVWF 0xfe9, ACCESS
000A 50EF MOVF 0xfef, W, ACCESS
000C E00D BZ 0x28
000E 0E02 MOVLW 0x2
0010 6E01 MOVWF 0x1, ACCESS
0012 6A00 CLRF 0, ACCESS
0014 2E00 DECFSZ 0, F, ACCESS
0016 D7FE BRA 0x14
0018 2E01 DECFSZ 0x1, F, ACCESS
001A D7FB BRA 0x12
001C 0E97 MOVLW 0x97
001E 6E00 MOVWF 0, ACCESS
0020 2E00 DECFSZ 0, F, ACCESS
0022 D7FE BRA 0x20
0024 2EEF DECFSZ 0xfef, F, ACCESS
0026 D7F3 BRA 0xe
0028 EF5E GOTO 0xbc
9: #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
10:
11:
12:
13: void main()
14:
15: {
002C 6AF8 CLRF 0xff8, ACCESS
002E 9ED0 BCF 0xfd0, 0x7, ACCESS
0030 6AEA CLRF 0xfea, ACCESS
0032 6AE9 CLRF 0xfe9, ACCESS
0034 967E BCF 0xf7e, 0x3, ACCESS
0036 0E0C MOVLW 0xc
0038 6EAF MOVWF 0xfaf, ACCESS
003A 0EA2 MOVLW 0xa2
003C 6EAC MOVWF 0xfac, ACCESS
003E 0E90 MOVLW 0x90
0040 6EAB MOVWF 0xfab, ACCESS
0042 50C1 MOVF 0xfc1, W, ACCESS
0044 0BC0 ANDLW 0xc0
0046 6EC1 MOVWF 0xfc1, ACCESS
0048 0E07 MOVLW 0x7
004A 6EB4 MOVWF 0xfb4, ACCESS
16: setup_adc_ports(NO_ANALOGS|VSS_VDD);
004C 50C1 MOVF 0xfc1, W, ACCESS
004E 0BC0 ANDLW 0xc0
0050 090F IORLW 0xf
0052 6EC1 MOVWF 0xfc1, ACCESS
17: setup_adc(ADC_OFF|ADC_TAD_MUL_0);
0054 90C2 BCF 0xfc2, 0, ACCESS
18: setup_psp(PSP_DISABLED);
0056 98B0 BCF 0xfb0, 0x4, ACCESS
19: setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
0058 9AC6 BCF 0xfc6, 0x5, ACCESS
005A 9A94 BCF 0xf94, 0x5, ACCESS
005C 8894 BSF 0xf94, 0x4, ACCESS
005E 9694 BCF 0xf94, 0x3, ACCESS
0060 0E20 MOVLW 0x20
0062 6EC6 MOVWF 0xfc6, ACCESS
0064 0E40 MOVLW 0x40
0066 6EC7 MOVWF 0xfc7, ACCESS
20: setup_spi2(SPI_SS_DISABLED);
0068 9A63 BCF 0xf63, 0x5, ACCESS
006A 9895 BCF 0xf95, 0x4, ACCESS
006C 8A95 BSF 0xf95, 0x5, ACCESS
006E 9C95 BCF 0xf95, 0x6, ACCESS
0070 0E01 MOVLW 0x1
0072 6E63 MOVWF 0xf63, ACCESS
0074 0E00 MOVLW 0
0076 6E64 MOVWF 0xf64, ACCESS
21: setup_timer_0(RTCC_INTERNAL);
0078 0E80 MOVLW 0x80
007A 6ED5 MOVWF 0xfd5, ACCESS
22: setup_timer_1(T1_DISABLED);
007C 6ACD CLRF 0xfcd, ACCESS
23: setup_timer_2(T2_DISABLED,0,1);
007E 0E00 MOVLW 0
0080 6ECA MOVWF 0xfca, ACCESS
0082 0E00 MOVLW 0
0084 6ECB MOVWF 0xfcb, ACCESS
24: setup_timer_4(T4_DISABLED,0,1);
0086 6E76 MOVWF 0xf76, ACCESS
0088 0E00 MOVLW 0
008A 6E77 MOVWF 0xf77, ACCESS
25: setup_comparator(NC_NC_NC_NC);
008C 0E07 MOVLW 0x7
008E 6EB4 MOVWF 0xfb4, ACCESS
0090 5097 MOVF 0xf97, W, ACCESS
0092 6E97 MOVWF 0xf97, ACCESS
0094 0E06 MOVLW 0x6
0096 6E00 MOVWF 0, ACCESS
0098 2E00 DECFSZ 0, F, ACCESS
009A D7FE BRA 0x98
009C 0000 NOP
009E 50B4 MOVF 0xfb4, W, ACCESS
00A0 9CA1 BCF 0xfa1, 0x6, ACCESS
26: setup_vref(FALSE);
00A2 6AB5 CLRF 0xfb5, ACCESS
27: disable_interrupts(INT_TIMER1);
00A4 909D BCF 0xf9d, 0, ACCESS
28: disable_interrupts(GLOBAL);
00A6 9CF2 BCF 0xff2, 0x6, ACCESS
00A8 9EF2 BCF 0xff2, 0x7, ACCESS
00AA BEF2 BTFSC 0xff2, 0x7, ACCESS
00AC D7FD BRA 0xa8
29:
30:
31: do{
32:
33: output_toggle(pin_a4);
00AE 9892 BCF 0xf92, 0x4, ACCESS
00B0 7889 BTG 0xf89, 0x4, ACCESS
34: delay_ms(500);
00B2 0E02 MOVLW 0x2
00B4 6E06 MOVWF 0x6, ACCESS
00B6 0EFA MOVLW 0xfa
00B8 6E07 MOVWF 0x7, ACCESS
00BA D7A4 BRA 0x4
00BC 2E06 DECFSZ 0x6, F, ACCESS
00BE D7FB BRA 0xb6
35:
36: }while(TRUE);
37:
38: }
00C0 D7F6 BRA 0xae
39:
40:
41:
42:
43:
44:
45:
46:
00C2 0003 SLEEP
|
I cant understand what happened |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Mar 09, 2010 11:42 am |
|
|
Try a more simple program. This should turn on an LED briefly for
100 ms every 1 second. It should be easier to see the true blinking rate.
Also:
Have you tried testing a different type of PIC with the same crystal
and capacitors ?
Code: |
#include <18F65J10.h>
#fuses HS, NOWDT
#use delay(clock=8000000)
//==================================
void main()
{
while(1)
{
output_high(PIN_A4);
delay_ms(100);
output_low(PIN_A4);
delay_ms(900);
}
}
|
|
|
|
baybarsk
Joined: 06 Mar 2010 Posts: 3
|
|
Posted: Wed Mar 10, 2010 9:07 am |
|
|
Thanks PCM programmer, i tried your code,
but result still same.
I couldn't try crystal on other kind of PIC yet, but i will and then i'll write results.
But i can see 8Mhz sinus wave on OSC1 and OSC2 pins of PIC, with Oscilloscope.
I also deleted
line,
and config bits from MPLAB menu, i tried HS, HS+PLL, but in both result same. I cant understand why its 8 times slower? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Mar 10, 2010 1:56 pm |
|
|
I'm not sure what would cause the PIC to run 8x slower.
Did you build this board yourself, or was it built by a company ?
If it came from a factory, then post the manufacturer and part number
of the board. If possible, post a link to the web page for it. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|