TMR1CS:
Timer1 Clock Source Select bit
T1CON = %00111011 ' Timer1 OSC enabled, Timer1 enabled, presc.1:8
TMR1CS:
Timer1 Clock Source Select bit
T1CON = %00111011 ' Timer1 OSC enabled, Timer1 enabled, presc.1:8
Warning I'm not a teacher
plus config needs to enable internal osc
Code:__config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_ON & _IESO_ON & _FCMEN_ON
Warning I'm not a teacher
I've modified the code according to the answers.
But with or without the 32,768kHz crystal, the LED will always blink.
As per datasheet, I have enabled LP oscillator. Why should I set the internal oscillator instead please?
Same question for T1CON.TMR1CS; why should I set this one?
Code:' ====== FUSES ==================================================================================== ' PIC 16F690 __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_ON & _IESO_ON & _FCMEN_ON ' ====== INTERRUPT SERVICE ROUTINE ================================================================ GOTO INIT: ' Just to place ISR at top of program DISABLE ISR: 'if TMR1IF is set (TMR1 has overflown) toggle PORTB.6 'LED PIR1.0 = 0 ' clear TMR1IF overflow flag resume ENABLE ' ====== INITIALIZE =============================================================================== INIT: PAUSE 1000 'circuit settle time ' ====== DEFINES ================================================================================== DEFINE OSC 4 ' ====== REGISTERS ================================================================================ ' 76543210 OPTION_REG = %10000000 ' Pull-Ups disabled OSCCON = %01100000 ' Internal RC set to 4Mhz ANSEL = %00000000 ' Analog inputs Channels 0 to 7 ANSELH = %00000000 ' Analog inputs Channels 8 to 11 INTCON = %11000000 ' INTerrupts CONtrol: GIE is ON, PEIE is ON T1CON = %00111011 ' Timer1 OSC enabled, Timer1 enabled, presc.1:8 PIE1 = %00000001 ' Enable TMR1IF overflow flag ' ====== PROGRAM ================================================================================== ON INTERRUPT GOTO ISR MAIN: goto MAIN: END
Roger
if I understand correctly your intent is to use the intosc @4mhz for cpu clock and the ext osc @32khz for timer1 clk sourceAs per datasheet, I have enabled LP oscillator. Why should I set the internal oscillator instead please?
so to use the HFINTOSC @4mhz config= _INTRC_OSC_NOCLKOUT [no clk out assumed]
osccon= $60
to use the ext osc for timer1Same question for T1CON.TMR1CS; why should I set this one?
you must enable the ext osc
bit 3 T1OSCEN: LP Oscillator Enable Control bit
and
select ext osc as timer clock source
bit 1 TMR1CS: Timer1 Clock Source Select bit
so t1con= %00111011 with 8:1 prescale and timer on
Warning I'm not a teacher
the data sheet says that T1OSCEN should be enable and the user should delay for a suitable time before timer is enabled
I don't have a 16f690 handy to test with
Warning I'm not a teacher
Thanks a lot Richard,
The code hereunder works
BTW, I had to change the config settings (fuses) since you might have copied them for another PIC and generated errors while compiling. Please let me know if I should take care to change some of them.
For the test, I removed the 32,768kHz crystal while running () and the LED stops blinking which is correct.
Code:' ====== FUSES ==================================================================================== ' PIC 16F690 @ __config _INTRC_OSC_NOCLKOUT &_WDT_OFF &_PWRTE_OFF &_MCLRE_OFF &_CP_OFF &_CPD_OFF &_BOR_OFF &_IESO_OFF &_FCMEN_OFF ' ====== INTERRUPT SERVICE ROUTINE ================================================================ GOTO INIT: ' Just to place ISR at top of program DISABLE ISR: 'if TMR1IF is set (TMR1 has overflown) toggle PORTB.6 'LED PIR1.0 = 0 ' clear TMR1IF overflow flag TMR1H = 0 TMR1L = 0 resume ENABLE ' ====== INITIALIZE =============================================================================== INIT: PIR1.0 = 0 ' clear TMR1IF overflow flag TMR1H = 0 TMR1L = 0 ' ====== DEFINES ================================================================================== DEFINE OSC 4 ' ====== REGISTERS ================================================================================ ' 76543210 OPTION_REG = %10000000 ' Pull-Ups disabled OSCCON = %01100000 ' Internal RC set to 4Mhz ANSEL = %00000000 ' Analog inputs Channels 0 to 7 ANSELH = %00000000 ' Analog inputs Channels 8 to 11 INTCON = %11000000 ' INTerrupts CONtrol: GIE is ON, PEIE is ON T1CON = %00111011 ' Timer1 OSC enabled, Timer1 enabled, presc.1:8 PIE1 = %00000001 ' Enable TMR1IF overflow flag ' ====== PROGRAM ================================================================================== PAUSE 1000 'circuit settle time ON INTERRUPT GOTO ISR MAIN: goto MAIN: END
Roger
config was generated by meCONFIG for pbp3BTW, I had to change the config settings (fuses) since you might have copied them for another PIC and generated errors while compiling. Please let me know if I should take care to change some of them.
Warning I'm not a teacher
Bookmarks