|
|
View previous topic :: View next topic |
Author |
Message |
P2
Joined: 25 Mar 2012 Posts: 5
|
PIC18F67K22 TIMER1 using External Clock |
Posted: Sun Mar 25, 2012 1:52 pm |
|
|
PIC18F67K22 TIMER1 using External Clock 32KHz Oscillator (MAXIM DS32KHz) to drive pin RC1 Pin RC0 is not used.
Using PCWH 4.130
int32 n32Tick, n32OldTick;
#int_TIMER1
void TIMER1_isr(void)
{
n32Tick++;
}
in main()
n32Tick = n32OldTick = 0;
set_tris_c(0b10111010); // RC1 as i/p
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(1)
{
if ( n32Tick != n32OldTick)
{
printf("Tick=%ld\r\n", n32Tick);
n32OldTick = n32Tick; }
}
}
I set a break point in the ISR but it never gets called.
The 67K22 is a new chip for me are there any special "things" I need to do to make TIMER1 tick when driving it with an external clock ?
I know that TIMER1 can be set as a 16bit Timer but that is not the issue.
It simply does not interrupt at all.
I checked the lst file and it appears the ISR is clearing the T1IF
My next test I used the setup_timer_1(T1_FOSC|T1_DIV_BY_8); and it took off like a rocket, so clealry the ISR is working.
This led to to look at the data and errata sheets but I can't find anything special about TIMER1 and External Clock input.
I tried a Second Module and it's doing the same thing...
Code works with the old PIC18F6722 !
What am I missing ? |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1348
|
|
Posted: Sun Mar 25, 2012 2:07 pm |
|
|
Well for starters, post a complete, compilable, set of code. Something anyone can toss into CCS and compile immediately without needing to change things. We don't have all of what is needed to deduce the problem...like fuses...which can be important. Also, please use the CODE tags to post it. |
|
|
P2
Joined: 25 Mar 2012 Posts: 5
|
|
Posted: Sun Mar 25, 2012 5:30 pm |
|
|
I think it's a configuration issue... ! |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1348
|
|
Posted: Sun Mar 25, 2012 6:25 pm |
|
|
Part of the configuration is in the code that you didn't post (FUSES). If you really want help, please provide it. I know, for example, that the PIC24FJ64GA004 has a fuse that toggles how the secondary oscillator pin functions. That's not your chip, but hopefully that helps you understand why it is important. |
|
|
P2
Joined: 25 Mar 2012 Posts: 5
|
|
Posted: Sun Mar 25, 2012 6:34 pm |
|
|
OK here are the fuses I'm using.
#fuses NOWDT, WDT128, HSM, PLLEN, NOPROTECT, CCP2E7, NOBROWNOUT, BORV27, PUT, NOCPD, STVREN, NODEBUG, NOWRT, NOCPB, NOEBTR, NOWRTD, NOWRTC, NOWRTB
Here are the fuses that are available, I don't see any that look like TIMER1 related but I could be wrong!
VREGSLEEP_SW,VREGSLEEP,INTRC_LP,INTRC_HP,SOSC_LOW,SOSC_DIG
SOSC_HIGH,NOXINST,XINST,LP,XT,HSH,HSM,ECH,ECH_IO,RC,RC_IO
INTRC_IO,INTRC,ECM,ECM_IO,ECL,ECL_IO,NOPLLEN,PLLEN,NOFCMEN
FCMEN,NOIESO,IESO,PUT,NOPUT,NOBROWNOUT,BROWNOUT_SW
BROWNOUT_NOSL,BROWNOUT,BORV30,BORV27,BORV20,BORV18,BORM_LOW
BORM_MED,BORM_HIGH,ZPBORM,NOWDT,WDT_NOSLEEP,WDT_SW,WDT,WDT1
WDT2,WDT4,WDT8,WDT16,WDT32,WDT64,WDT128,WDT256,WDT512
WDT1024,WDT2048,WDT4096,WDT8192,WDT16384,WDT32768,WDT65536
WDT131072,WDT262144,WDT524288,WDT1048576,RTCOSC_INT
RTCOSC_T1,CCP2E7,CCP2C1,MSSPMSK5,MSSPMSK7,NOMCLR,MCLR
NOSTVREN,STVREN,BBSIZ1K,BBSIZ2K,DEBUG,NODEBUG,PROTECT
NOPROTECT,CPB,NOCPB,CPD,NOCPD,WRT,NOWRT,WRTC,NOWRTC,WRTB
NOWRTB,WRTD,NOWRTD,EBTR,NOEBTR,EBTRB,NOEBTRB |
|
|
P2
Joined: 25 Mar 2012 Posts: 5
|
|
Posted: Sun Mar 25, 2012 6:47 pm |
|
|
OK I have a work-around but I'm not happy with this.
#byte T1CON = 0XFCD
T1CON = 0X8B; // turn on the Crystal Oscillator but still feed PIN C1 with the output of the MAXIM Oscillator.
It's works but I'll have to measure the current consumption !
I don't like this solution..
If anyone has any better suggestions I'd like to hear them... !
Thanks |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1348
|
|
Posted: Sun Mar 25, 2012 7:31 pm |
|
|
None of:
SOSC_LOW
SOSC_DIG
SOSC_HIGH
Apply to your situation (page 405 of the datasheet)? I know they control how RC0 and RC1 are configured for external oscillators, which applies to timer1 in your case. Maybe I misunderstood your issue though?
EDIT: Why don't you like that solution? Bits T1CON<7..6> must be set to "10" and T1CON<3> should be "1" for you to have Timer1 interrupt off of an external source in asynchronous mode. After that is just a question of having your fuses (mentioned above) set correctly. What part is undesirable from those bits?
Last edited by jeremiah on Sun Mar 25, 2012 8:44 pm; edited 2 times in total |
|
|
P2
Joined: 25 Mar 2012 Posts: 5
|
|
Posted: Sun Mar 25, 2012 7:46 pm |
|
|
Great... I think that sounds very much like what the problem has been ( + my head space issues of course )
I searched every reference to TIMER1 in the data sheet, and I can now see they never use the word TIMER1 in the description of CONFIG1L !
Thanks again much appreciated. |
|
|
|
|
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
|