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 CCS Technical Support

How do I know if the power is cut off?

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



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

How do I know if the power is cut off?
PostPosted: Sun Dec 17, 2023 2:21 am     Reply with quote

Hello,
I am using the MCU PIC18F47Q83. I checked the write and erase times from the datasheet and found them to be 11ms. I want to create a delay using an RC circuit connected to the VDD and VSS lines when the +5V of the PIC is cut off. I would like to write data to EEPROM when the power is cut off using an ISR. How can I achieve this? Is there a peripheral device for this purpose?
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
temtronic



Joined: 01 Jul 2010
Posts: 9220
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sun Dec 17, 2023 6:44 am     Reply with quote

Several ways...
In the beginning, I fed 1/2 wave rectified low voltage AC into a MC1489(RS232 receiver) that fed an I/O pin. Used it both as a 'clock' ( 60hz ) as well as 'power off' signal

You could also use a spare ADC pin, measure the raw VDD ( before the big filter cap ! ). When it drops say after 4-8 line freq cycles , that would say 'loss of AC power.

Others probably will post their favourite way.

The 'trick' is be be sure you have at least 2-3X the energy needed for the EEPROM write AFTER 'power failed' so the write is sucessful !
Ttelmah



Joined: 11 Mar 2010
Posts: 19492

View user's profile Send private message

PostPosted: Sun Dec 17, 2023 11:45 am     Reply with quote

This is very standard hardware and code.
First thing you need to do is calculate how many bytes you want to write.
This then determines how long the supply must remain at a safe voltage
to write the EEPPROM after the fail. This then determines the size of
the capacitor needed on the supply. Ensure you allow at least a 50%
margin on this calculation. On your chip VddMIN is 1.8v, so this is the
voltage the supply must be above at the end of all the writes.
Add the time for your detector circuit to trigger, and the time needed to
get into the ISR.
Assume the worst case time for the writes. 11mSec/byte.

Then you just use a convenient interrupt. Your chip supports three
standard interrupt pins. These are the easiest to use.

Sequence is simple. On the interrupt, perform the write, and then delay
in the interrupt for enough time for the power to fail. Have the code then
test the input pin for the ISR. if the interrupt has gone off, exit the
interrupt, otherwise loop and re-test.

The actual detection depends upon the nature to the supply. If AC
a simple missing cycle detector on the AC from the transformer. If
DC, then a comparator on the 5v line. This though means the supply
will already have to start falling before it can be detected.
MCUprogrammer



Joined: 08 Sep 2020
Posts: 221

View user's profile Send private message

PostPosted: Sun Dec 17, 2023 11:53 pm     Reply with quote

What I would do is set the hardware to power the board long enough to detect when the power is removed and then write the EEPROM locations. For example, a blocking diode and a large capacitor between the power input and Vdd, which powers the PIC. Then use an external interrupt to detect when power is removed from the board. I plan to use pin B0 as the EXT ISR.
I plan to use a 470uf capacitor with a 100k resistor. The byte I will write is 8 bytes.
_________________
Best Regards...
MCUprogrammer
_______________________________
Work Hard
Ttelmah



Joined: 11 Mar 2010
Posts: 19492

View user's profile Send private message

PostPosted: Mon Dec 18, 2023 2:45 am     Reply with quote

How much power does the board draw???. Critical.
Also can you reduce this by switching things off?. If so do this at the
start of the interrupt.
Remember as an important extra, that most PIC's have a minimum
supply 'rise time' that is allowed for the reset to work properly. You need
to make sure that this will still work correctly with the decoupling capacitor
present, or provide your own reset circuit.

Now the discharge formula for a capacitor is:

Vt=V0*(e^(-t/rc))

Now the real time will be worse than this, since though you can estimate
the discharge resistance from the current the circuit draws when the power
is on, many circuits do not maintain a linear relationship with voltage as
the voltage drops.
Lets assume the circuit draws 10mA. For your 8 bytes you need to allow
88mSec. Add an extra mSec to read the data and get into the ISR, so lets
say 90mSec. Assume detection at 4.5v. That would give an end voltage just
fractionally over 3V. However a 'nominal' 470uF capacitor will normally
have a specification of +/-20%, so could be as small as 390uF. Also this
will reduce as the capacitor ages. So as I said, allow 50%, so just 313uF.
With this the voltage will fall to just 2.56V. Still 'OK', but not a huge margin.
If the supply consumption is more than 10mA, you would have problems.
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