| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| Blob 
 
 
 Joined: 02 Jan 2006
 Posts: 75
 Location: Neeroeteren, Limburg, Belgium
 
 
			    
 
 | 
			
				| RTC with events |  
				|  Posted: Wed Sep 11, 2013 8:00 am |   |  
				| 
 |  
				| Hello All, 
 I am planning to build a little control unit based on the RTC by ckielstra.
 http://www.ccsinfo.com/forum/viewtopic.php?p=59789
 I want to control the lights on my shrimp tank.
 
 
 In memory I will define data blocks with this format:
 Months F 1-12
 Days F 1-7
 Hours FF 0-23
 Minutes FF 0-59
 Seconds FF 0-59
 Instruction FF
 Instruction option FF
 
 So in total
 F F FF FF FF FF FF
 12 bytes / data string
 
 
 I will then define some instructions, for example:
 Feb 01 06:30 main light 0%            => start sunrise
 Feb 01 08:00 main light 80%          => end sunrise
 Feb 01 12:00 main light 100%        => noon
 Feb 01 14:00 main light 100%        => start afternoon
 Feb 01 18:00 main light 75%          => start evening
 Feb 01 20:00 secondary light 0%    => start moon rise
 Feb 01 21:00 main light 0%            => start night
 Feb 01 22:00 secondary light 100% => full moon
 Feb 02 03:30 secondary light 100% => start moon fall
 Feb 02 05:00 secondary light 0%     => end moon fall
 
 
 Other instructions may be cloud simulator/ lightnings/ rain (engage extra pump) etc.
 
 With this module it will be possible to simulate the seasons etc.
 
 I plan to define this data chronologically sorted in memory.
 Than have a "pointer" pointing to the first instruction set, retrieving date and instruction
 check the date with the actual time
 if actual time lies between this and next data entry => do instructions
 (fe calculate dimming proportion etc)
 if not => go to next data entry and check again.
 
 When the year has passed, the pointer will return to the beginning of the stack.
 
 I have some 18F2620 here,
 If there are not to many instructions, I will have enough memory to store them.
 Maybe I won't need the seconds, so that will decrease memory usage.
 
 Does this setup makes sense?
 Or is there an easier way to determine time controlled events?
 
 Thanks in advance,
 Blob
 |  |  
		|  |  
		| temtronic 
 
 
 Joined: 01 Jul 2010
 Posts: 9588
 Location: Greensville,Ontario
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Sep 11, 2013 6:27 pm |   |  
				| 
 |  
				| One idea,which I've used for 20+ years, is to take the day (24hrs) and split into 15 minute intervals. 24 hrs *4, 15minute periods=96, which easily fits into a single byte, thus saving a lot of memory. If you only require 1/2hr 'units', then 6 bits of a byte will contain the 'time' element, giving you 2 bits for 'light intensity'control bits.00=off, 01=75%, 10=80%, 11=100%. Now a single byte contains both the 'time' AND 'light' variables. You'll have to cut code to 'encode' and 'decode' the 'time/light' byte but that's rather simple and well worth the effort considering all the memory you'll save.
 If you require more 'control bits', simply use another byte for another 8 'features'.
 
 hth
 jay
 |  |  
		|  |  
		| Blob 
 
 
 Joined: 02 Jan 2006
 Posts: 75
 Location: Neeroeteren, Limburg, Belgium
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu Sep 12, 2013 1:09 am |   |  
				| 
 |  
				| Hello, 
 Following temtronics idea, I am thinking to count minutes
 
 24*60/day = 1440
 1440/day*365 = 525600/year.
 
 this takes only 5 bytes
 if I take 3 bytes for the instruction and options this will make 8 bytes / block
 
 I think I can live with that.
 |  |  
		|  |  
		| ckielstra 
 
 
 Joined: 18 Mar 2004
 Posts: 3680
 Location: The Netherlands
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu Sep 12, 2013 3:01 am |   |  
				| 
 |  
				| Wrong, it fits in 20 bits --> 2.5 bytes. 	  | Blob wrote: |  	  | 24*60/day = 1440 1440/day*365 = 525600/year.
 
 this takes only 5 bytes
 | 
 
 In your example day schedule you defined 10 switching moments, assume you want to control waterpump and some other devices as well then a minimum of 25 switching moments per day.
 
 366 days in a year (leap year).
 
 366 days * 25 switching moments = 9125 data entries.
 
 The PIC18F2620 has 64kbyte of Flash memory. Be on the save side and assume 50kbyte is available for the data table. Then you have 50 kbyte / 9125 data entries = 5 bytes per entry (rounded down to whole bytes).
 
 Take 3 bytes for the date/time and 2 bytes for the commands. You have 4 bits left in the date/time for future extensions.
 |  |  
		|  |  
		| Blob 
 
 
 Joined: 02 Jan 2006
 Posts: 75
 Location: Neeroeteren, Limburg, Belgium
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu Sep 12, 2013 3:57 am |   |  
				| 
 |  
				| awch, 
 painful mistake...
 
 FF = 1 byte
 
 F = 1 nibble
 
 I see I made the same mistake in my first post
    |  |  
		|  |  
		| Blob 
 
 
 Joined: 02 Jan 2006
 Posts: 75
 Location: Neeroeteren, Limburg, Belgium
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu Sep 19, 2013 7:11 am |   |  
				| 
 |  
				| Works as a charm, thanks guys! 
 I found the rise and set times of the sun and the moon of my location of interest at www.timeanddate.com
 
 the site also provides info about solar noon and distance of the sun/moon and phase of the moon etc.
 
 I made some calculations on it to simulate sun strength in summer/winter and strength of the moon light.
 
 I putted all data chronological and converted it to my "data package" format
 
 Only with the sun and moon simulation, I now have 2895 entries.
 so, enough space to make rain - lightning - temperature extensions... working on that
 
 
 sun and moon brightness is controlled with the PWM outputs of my pic18f2620
 
 sun and moon rise and set nicely.
 
 I hope the shrimps will like it too...
 
  |  |  
		|  |  
		|  |  
  
	| 
 
 | 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
 
 |