|
|
View previous topic :: View next topic |
Author |
Message |
Marek Guest
|
RTCC on 18F452 will not work |
Posted: Thu May 08, 2003 5:16 am |
|
|
I have not used RTCC before and cannot understand why this code does not seem to work.
Pin D4 goes high but pins D2&D3 do not do anything.
My xtal is 4MHz.
I copied the example code from the reference manual but it did not seem to work. I then realised the 18F452 has a 16 bit RTCC so I removed the if statement from the ISR and decreased the prescaler to 16 so it should still be 1 pulse per second but it still does not work....
Any ideas??
Thanks
#include <1sec.h>
#define high_start 33
byte high_count;
#int_RTCC
RTCC_isr() {
output_low(pin_D2);
output_high(pin_d3);
delay_ms(250);
output_low(pin_D3);
output_high(pin_d2);
//seconds=seconds-1
high_count=high_start; //reset counter
}
void main() {
do{
high_count=high_start;
set_rtcc(0);
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(global);
output_high(pin_d4);
}
while(true);
}
___________________________
This message was ported from CCS's old forum
Original Post ID: 14253 |
|
|
Andy Drummond Guest
|
Re: RTCC on 18F452 will not work |
Posted: Thu May 08, 2003 10:22 am |
|
|
:=I have not used RTCC before and cannot understand why this code does not seem to work.
:=Pin D4 goes high but pins D2&D3 do not do anything.
:=My xtal is 4MHz.
:=I copied the example code from the reference manual but it did not seem to work. I then realised the 18F452 has a 16 bit RTCC so I removed the if statement from the ISR and decreased the prescaler to 16 so it should still be 1 pulse per second but it still does not work....
:=
:=Any ideas??
:=
:=Thanks
:=
:=#include <1sec.h>
:=#define high_start 33
:=byte high_count;
:=#int_RTCC
:=RTCC_isr() {
:=
:= output_low(pin_D2);
:= output_high(pin_d3);
:= delay_ms(250);
:= output_low(pin_D3);
:= output_high(pin_d2);
:= //seconds=seconds-1
:= high_count=high_start; //reset counter
:=}
:=
:=
:=
:=void main() {
:=
:=do{
:= high_count=high_start;
:= set_rtcc(0);
:= setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
:= enable_interrupts(INT_RTCC);
:= enable_interrupts(global);
:= output_high(pin_d4);
:=}
:=while(true);
:=}
It looks to me like you're sitting in a tight loop setting the RTCC to zero all the time; how do you think it will manage to count up if you keep setting it to zero. Maybe ...
// Set up interrupts etc ...
high_count=high_start;
set_rtcc(0);
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(global);
output_low(pin_d4); // So theinterrupt sets it high ...
// Wait while things happen under interrupt control ..
while(true) restart_wdt(); // if you use the WDT ...
___________________________
This message was ported from CCS's old forum
Original Post ID: 14263 |
|
|
nilsener Guest
|
Re: RTCC on 18F452 will not work |
Posted: Thu May 08, 2003 10:26 am |
|
|
Dear Marek,
your ISR can not be called because you did not get a timer overflow. You have an endless do while loop in main() where you set the timer to zero 'set_rtcc(0)' every few microseconds.
Change your code so that the initialisation for the timer will be executed once and place a while loop at the end of main() with no code inside the loop, e.g.:
void main() {
high_count=high_start;
set_rtcc(0);
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(global);
output_high(pin_d4);
while(true); // endless loop
}
Hope it runs,
Best Regards
Nilsener
:=I have not used RTCC before and cannot understand why this code does not seem to work.
:=Pin D4 goes high but pins D2&D3 do not do anything.
:=My xtal is 4MHz.
:=I copied the example code from the reference manual but it did not seem to work. I then realised the 18F452 has a 16 bit RTCC so I removed the if statement from the ISR and decreased the prescaler to 16 so it should still be 1 pulse per second but it still does not work....
:=
:=Any ideas??
:=
:=Thanks
:=
:=#include <1sec.h>
:=#define high_start 33
:=byte high_count;
:=#int_RTCC
:=RTCC_isr() {
:=
:= output_low(pin_D2);
:= output_high(pin_d3);
:= delay_ms(250);
:= output_low(pin_D3);
:= output_high(pin_d2);
:= //seconds=seconds-1
:= high_count=high_start; //reset counter
:=}
:=
:=
:=
:=void main() {
:=
:=do{
:= high_count=high_start;
:= set_rtcc(0);
:= setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
:= enable_interrupts(INT_RTCC);
:= enable_interrupts(global);
:= output_high(pin_d4);
:=}
:=while(true);
:=}
___________________________
This message was ported from CCS's old forum
Original Post ID: 14264 |
|
|
marek Guest
|
Re: RTCC on 18F452 will not work |
Posted: Fri May 09, 2003 2:14 am |
|
|
Thanks guys, that was the problem.
By the way, when the ISR finishes is the PIC supposed to jump back to the start of main or back to where it was before the ISR?
The reason I ask is that when I removed the DO loop, as you suggested, and replaced it with a loop at the very end with no internal code the problem was still there although in theory MAIN should only have executed once.....
___________________________
This message was ported from CCS's old forum
Original Post ID: 14279 |
|
|
nilsener Guest
|
Re: RTCC on 18F452 will not work |
Posted: Fri May 09, 2003 2:34 pm |
|
|
Dear Marek,
if the ISR is finished, the PIC jumps back to where it was before, in your case it jumps back to the endless loop at the end of main.
If the PIC jumps back to the start of main it may be that something reset the PIC ? One reason may be an overflowing watchdog timer. If you have the watchdog enabled introduce a restart_wdt() command inside the endless loop to refresh the watchdog.
If you post your current code i will take a look.
Best Regards
Nilsener
:=
:=Thanks guys, that was the problem.
:=By the way, when the ISR finishes is the PIC supposed to jump back to the start of main or back to where it was before the ISR?
:=The reason I ask is that when I removed the DO loop, as you suggested, and replaced it with a loop at the very end with no internal code the problem was still there although in theory MAIN should only have executed once.....
___________________________
This message was ported from CCS's old forum
Original Post ID: 14314 |
|
|
|
|
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
|