Post Number: 2
Votes: 0 (Vote!)
|Posted on Monday, 31 December, 2007 - 02:58 pm: ||
Compiler PICC Lite
Display controller: Samsung KS0066
Control board to switch relay on for 1 second at 6 second intervals for 30,000 cycles. User to start sequence with push button. 16 character 2 line display to number of times relay switches (line 1 of display) and total elapsed time on line 2 of display.
Sequence for counter without elapsed time.
Display press start in display
Write display count on line 1 of display
Do while I < 30,000
Switch relay on 1 second
Delay 6 seconds
Increment variable I by 1
Convert variable I to decimal
Display variable I} elihw
This counter program works fine.
Problem adding elapsed time to line 2 of display
My next step was to display the total elapsed time in hours on the second line of the display.
I was thinking of interrupting the main program every-time TMR1 (16 bit)overflows, updating another variable J, doing the decimal conversion and then update the display. With the prescaler set at 8 this happens about every 0.5 seconds with a 4Mhz oscillator. If I were to do this, am I right in assuming it would increase the switching time of the relay sequence, ie. Approx 14 interupts per cycle. Is this additional time significant? (I have a tolerance in the relay switching of 0.5s per cycle).
Alternatively, I am think of incrementing another variable J at the end of each cycle, timing the full cycle using the simulator and then incrementing the variable by this value. If I divide this value by 3600 this will give me the number elapsed hours which will be updated once per cycle.
I interested in your informed opinion as to the best approach to this problem. I am new to PIC programming but I am encouraged by my success in getting the counter to work so far.
Post Number: 626
Votes: 0 (Vote!)
|Posted on Wednesday, 02 January, 2008 - 01:13 pm: ||
Is this additional time significant?
You're the only person who can answer that question. How accurate do you want your switching and timing to be? Also remember that you can set the timer so that the interrupt happens maybe every 0.1s or quicker - you're not forced to use 0.5s. Beware though that if you set your interrupt to happen more times per second, you need to make sure that the code in the interrupt routine is very fast. At 0.1s this shouldn't be a problem, but I'd be worried at 0.1ms! :-/
I definitely would *NOT* recommend trying to set timing by measuring how long the code takes to execute. It will work, sure, but what happens when you add one line of code? If you know that you're never going to change that code after you've written it, then I suppose it's OK. But for you that isn't going to be the case, is it?