CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

RTC with events

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Blob



Joined: 02 Jan 2006
Posts: 75
Location: Neeroeteren, Limburg, Belgium

View user's profile Send private message

RTC with events
PostPosted: Wed Sep 11, 2013 8:00 am     Reply with quote

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: 9128
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Wed Sep 11, 2013 6:27 pm     Reply with quote

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

View user's profile Send private message

PostPosted: Thu Sep 12, 2013 1:09 am     Reply with quote

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

View user's profile Send private message

PostPosted: Thu Sep 12, 2013 3:01 am     Reply with quote

Blob wrote:
24*60/day = 1440
1440/day*365 = 525600/year.

this takes only 5 bytes
Wrong, it fits in 20 bits --> 2.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

View user's profile Send private message

PostPosted: Thu Sep 12, 2013 3:57 am     Reply with quote

awch,

painful mistake...

FF = 1 byte

F = 1 nibble

I see I made the same mistake in my first post Embarassed Embarassed
Blob



Joined: 02 Jan 2006
Posts: 75
Location: Neeroeteren, Limburg, Belgium

View user's profile Send private message

PostPosted: Thu Sep 19, 2013 7:11 am     Reply with quote

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...
Very Happy
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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