| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| Izolator 
 
 
 Joined: 10 Feb 2004
 Posts: 12
 Location: Denmark, (Scandinavia-Europe)
 
 
			      
 
 | 
			
				| setup_timer_2(??,??,??) with Neoton zero drift RTC |  
				|  Posted: Mon Feb 23, 2004 3:29 pm |   |  
				| 
 |  
				| Hi Guys, 
 I'm using a slightly minimized version of Neotone's old code, cutting out month, years and leapyears.
 
 
  	  | Code: |  	  | //RTC variables
 int32 const xtl = 19660800;
 int32 clock = xtl;
 int8 days=0,hours=0,minutes=0,seconds=0;
 int1 leapyear=0,tick=0;
 
 // 0.83mS resolution with my xtl value
 // -=Process Zero Drift Real Time Clock Information=-
 // Decrement cycles per interupt
 // Increment seconds counter, Set 1 second flag, Add number of ticks per second to clock
 // Increment minutes counter
 // Increment hours counter
 // Increment days counter
 
 #int_TIMER2
 void TIMER2_isr() { clock -= 16384;
 if(clock < 16384) {seconds++;clock += xtl;Tick= 1;
 if(seconds == 60) {minutes++;seconds = 0;
 if(minutes == 60) {hours++;minutes = 0;
 if(hours == 24) {days++;hours= 0;
 }}}}}
 
 | 
 
 Problem:
 As I am a total newbie with Timers & Interrupt I just recently discovered that the interrupt needs to be setup and enabled. I dont understand the math of it ?!?!?
 
 I'm using:
 20Mhz osc. quartz
 Pic16F877
 PCM 3.173
 
 ...what do I do to make the routine work as intended, with my crystal ?
 
 I tried with:
 setup_timer_2(T2_DIV_BY_16,0xff,1);
 but that makes it count a little too fast: some 30sec in 20 min, hmm.
 Keep in mind that to me the 3 variables are just numbers and I guessed at random to test it....not the correct way I know.
 
 
  	  | Code: |  	  | 
 
 
 
 main() {
 
 setup_timer_2(??,??,??);         // what do I put instead of the ??'s to make Neotrons code behave as intended, a RTC that puts secs, mins, hours....
 enable_interrupts(int_timer2);
 enable_interrupts(global);
 
 while(1) {
 }
 }
 | 
 
 
 side question:
 what does the dear mr. Neotone mean by the following:
 
 1) // 0.83mS resolution with my xtl value
 2) int32 const xtl = 19660800; => do I need to change this to 20000000 ?
 
 Thanks for you assistance guys, this is making my head hurt
   
 BR
 Rasmus 'Izolator'
 
 Last edited by Izolator on Mon Feb 23, 2004 4:45 pm; edited 2 times in total
 |  |  
		|  |  
		| Neutone 
 
 
 Joined: 08 Sep 2003
 Posts: 839
 Location: Houston
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Mon Feb 23, 2004 4:40 pm |   |  
				| 
 |  
				| I think this has better comments. 19660800 is a frequency that can be divided to get the most common baud rates. It's the frequency of the crystle I use. 
 
  	  | Code: |  	  | /*********************************************
 *    Initialize RTC                          *
 *********************************************/
 void Initialize_RTC(void)
 {  Ticker = XTAL_FREQUENCY;
 setup_timer_2 ( T2_DIV_BY_4, 0xff, 4 );   // initialize 8 bit counter/timer 2 to interupt every 16384 clock cycles
 enable_interrupts( INT_TIMER2 );          // Start RTC
 }
 
 // Global Real Time Clock Information
 #int_TIMER2                                  // Clock interrupt adjusted to occurs ~ 1ms
 void TIMER2_isr()                            //  -=Process Zero Drift Real Time Clock Information=-
 {  tickmSec = 1;                             // set each MS very approximately
 Ticker -= 16384;                          // Decrement ticker by clocks per interupt
 if ( Ticker < 16384 )                     // If second has expired
 {  Ticker += XTAL_FREQUENCY;              // Increment ticker by clocks per second
 second++;                              // Increment number of seconds
 tickSec = 1;                           // set each Second very accuratly
 }
 }
 
 | 
 
 Last edited by Neutone on Mon Feb 23, 2004 4:43 pm; edited 1 time in total
 |  |  
		|  |  
		| Izolator 
 
 
 Joined: 10 Feb 2004
 Posts: 12
 Location: Denmark, (Scandinavia-Europe)
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Mon Feb 23, 2004 4:43 pm |   |  
				| 
 |  
				| Thankyou good Sir, 
 It seems to work right out of the box.
 
 Bless you, I might still pass my exam
   
 BR
 Rasmus 'Izolator'
 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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
 
 |