View previous topic :: View next topic |
Author |
Message |
picnic
Joined: 09 Oct 2008 Posts: 15
|
Can't get Timer 1 to count RC0 input |
Posted: Wed Nov 23, 2011 4:54 am |
|
|
I'm using a PIC18F46K22 and trying to count the RC0 input using Timer1 but it doesn't count. Changing the code to use T1_INTERNAL does create a count so the program seems sound except for actually talking to the outside world.
Code: | // Test1
//
//
#include <18F46K22.h>
#fuses INTRC_IO
#fuses NOWDT
#fuses NOMCLR
#fuses NOPROTECT
#fuses NOCPD
#fuses NOBROWNOUT
#use delay(clock=4000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, errors)
#byte PMD0 = 0xF3F
#byte T1CON = 0xFCD
#byte T1GCON = 0xFCC
#define LED PIN_C2
#define CLOCK PIN_D2
#INT_TIMER2
void isr_t2() {
output_toggle( CLOCK );
}
void main() {
printf( "Test1\r\n" );
output_high( LED );
output_high( CLOCK );
output_float( PIN_C0 );
output_float( PIN_A4 );
set_timer0(0);
setup_timer_0( T0_EXT_L_TO_H | T0_DIV_1 );
set_timer1(0);
setup_timer_1( T1_EXTERNAL | T1_DIV_BY_1 );
setup_timer_2(T2_DIV_BY_4, 62, 4); // 1ms Interrupts
enable_interrupts(INT_TIMER2); // enable timer interrupt
enable_interrupts(INT_RDA); // UART receive
enable_interrupts(GLOBAL); // enable all interrupts
while ( 1 ) {
delay_ms( 500 );
output_toggle( LED );
printf( "T0=%Lu\r\n", get_timer0() );
printf( "t1=%Lu\r\n", get_timer1() );
printf( "t2=%d\r\n", get_timer2() );
printf( "T1CON=%02x\r\n", T1CON );
printf( "T1GCON=%02x\r\n", T1GCON );
printf( "PMD0=%02x\r\n", PMD0 );
}
}
|
Timer 2 is used to generate an edge every 1ms on RD2, this output is connected to RC0 (T1CKI) and RA4 (T0CKI). Timer 0 counts the pulses but Timer1 does not.
I'm sure I must be doing something stupid but I can't see it. Can anyone shed any light on why Timer 1 won't count the RC0 input?
TIA |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19551
|
|
Posted: Wed Nov 23, 2011 8:37 am |
|
|
Look at figure 12.1 in the data sheet. Note 5. FCMEN is enabled by default, which means the secondary oscillator is also enabled.
Best Wishes |
|
|
picnic
Joined: 09 Oct 2008 Posts: 15
|
|
Posted: Wed Nov 23, 2011 10:43 am |
|
|
You are a gentleman and a scholar Little bit of reading around the FCMEN and playing around and now T1 is now counting for me. Thank you very much.
The trick for anyone else who stumbles across this problem was to add these fuses
#fuses NOFCMEN
#fuses IESO
Again thanks. |
|
|
|