hello everyone,
im using an pic16f268a microcontroller to build an security alert system witch is powered with 9v battery the problem is that after 3-4 days that my system is working the battery is going off...
after a little search ifind out about the sleep mode but because im new to this i dont know how to use it.
any help? how i can wake and sleep my processor? can i wake it up when a button is pressed or something like this happens?
im using it in place with no power source thats why i want 9v battery also the size matter so i cant put bigger battery
so, how i can make my microcontroller sleep until for example one of the sensors become from 0 to 1?? im using mikroC to program the microcontroller.
there are three sensors with three pull up resistors one on-off button with one pull up resistor one buzzer the pic and the lm7805 regulator with two capacitors
Well for a start, dump the LM7805 regulator - that's wasting huge amounts of power. Assuming you need to use a 9V battery?, use a switch-mode regulator instead (you can get tiny adjustable ones ready made from Bangood for very little money).
What value are the pull-up resistors, and what are the 'sensors'? - if you're minimising current, you need to design those accordingly.
A VERY simple way of reducing current is to reduce the clock speed (your speed requirements are very low) - and the 628 has an internal 32KHz oscillator you could use.
the sensors are magnetic ones like the ones we use in the doors to know when is open or closed
the value of the resistors is 10k also because im using the delay so the alarm will ring after 3sec i dont know if i make 32khz of the clock speed will be usefull
**broken link removed** this part for example will do the job?
or this one
**broken link removed**
also i have the 78L05 regulator (sot 89) is this also wasting so much power?
the sensors are magnetic ones like the ones we use in the doors to know when is open or closed
the value of the resistors is 10k also because im using the delay so the alarm will ring after 3sec i dont know if i make 32khz of the clock speed will be usefull
You simply recalculate the delays - or as you're using C presumably simply telling the compiler the clock speed will do so automatically?.
BTW, the low speed internal oscillator is 37KHz, not 32KHz - and using it will greatly reduce consumption.
Presumably you mean simple reed switches?, activated with magnets? - in which case they are closed when the doors are closed - so each closed door is wasting 0.5mA with 10K pull-ups. Changing the 10K's to 100K's will reduce that waste to 10% (0.05mA).
**broken link removed** this part for example will do the job?
or this one
**broken link removed**
also i have the 78L05 regulator (sot 89) is this also wasting so much power?
Yes, it's wasting almost 50% as it's an analogue regulator - so simply replacing this with a switchmode regulator would almost double your battery life.
Using three AA's in series would avoid the need for a regulator at all, and offer a MUCH better cost to power ratio.
You simply recalculate the delays - or as you're using C presumably simply telling the compiler the clock speed will do so automatically?.
Yes, it's wasting almost 50% as it's an analogue regulator - so simply replacing this with a switchmode regulator would almost double your battery life.
Using three AA's in series would avoid the need for a regulator at all, and offer a MUCH better cost to power ratio.
so lets tell i buy one of these, (i prefer to use the ones i send you so i can use them even in smaller projects in my own board because with one of these i will use 2 boards)
then how i could put my pic into sleep mode (so i can save even more power) and wake it up by change the sensor situation from 0 to 1?
If you are running on very low power, you want a regulator that takes little current. It is usually called "low quiescent current".
The voltage regulator wastes power in two ways. Firstly, in the current that it takes all the time, even with no load, called the quiescent current. Secondly, linear regulators also loose power that is the voltage dropped multiplied by the current taken.
A switch-mode regulator reduces power lost at larger loads, as the output current can exceed the input current. However, for very low load currents, the switch mode regulator will usually have a worse quiescent current.
If you get the processor to go to sleep, the current taken will be tiny, so you will probably take less power from the battery with a low quiescent current linear regulator than you would with a switch mode regulator.
At high powers, a linear regulator will never be more efficient than 5/9 = 56%, while a switch mode regulator can be a lot better.
so lets tell i buy one of these, (i prefer to use the ones i send you so i can use them even in smaller projects in my own board because with one of these i will use 2 boards)
It's not really a 'board', it's more a component - they are tiny, and easily mount on your existing PCB. Bear in mind if you build your own you need to add all the other components as well, inductor, capacitors and diodes etc.
then how i could put my pic into sleep mode (so i can save even more power) and wake it up by change the sensor situation from 0 to 1?
The datasheet has a section on 'waking from sleep mode via interrupts'.
However, I would suggest you upgrade to the 16F1827 which is considerably cheaper, and has a far higher spec. In particular it's better for low power consumption (so called nano-watt technology), and also has much improved 'wake up via I/O interrupt' capabilities (you can do it via individual pins, and by either rising, falling, or changing).
I've used this chip in a GSM based device, in a kind of specialised 'alarm' function, and required battery live is five years or so (depending on number of activations).
It's not really a 'board', it's more a component - they are tiny, and easily mount on your existing PCB. Bear in mind if you build your own you need to add all the other components as well, inductor, capacitors and diodes etc.
I didn't use 'sleep' in this example, but this is how I set up the individual I/O interrupts on my 16F1827.
Code:
// setup PortB interrupt
INTCONbits.IOCIE = 1; // enable interrupt on PORTB change global
IOCBPbits.IOCBP4 = 1; // when input is pressed, enter the ISR
IOCBNbits.IOCBN5 = 1; // when input is released, enter the ISR
IOCBPbits.IOCBP0 = 1; // when Mode is pressed, enter the ISR
IOCBPbits.IOCBP2 = 1; // when Range is pressed, enter the ISR
IOCBNbits.IOCBN7 = 1; // when ON/OFF is pressed, enter the ISR
Using different interrupts for rising and falling edges.
I didn't use 'sleep' in this example, but this is how I set up the individual I/O interrupts on my 16F1827.
Code:
// setup PortB interrupt
INTCONbits.IOCIE = 1; // enable interrupt on PORTB change global
IOCBPbits.IOCBP4 = 1; // when input is pressed, enter the ISR
IOCBNbits.IOCBN5 = 1; // when input is released, enter the ISR
IOCBPbits.IOCBP0 = 1; // when Mode is pressed, enter the ISR
IOCBPbits.IOCBP2 = 1; // when Range is pressed, enter the ISR
IOCBNbits.IOCBN7 = 1; // when ON/OFF is pressed, enter the ISR
Using different interrupts for rising and falling edges.
Same as in assembler, you simply issue the 'sleep' command - when an interrupt occurs the processor will wake up.
In my example below the processor is woken by a timer interrupt every second, which updates a real time clock, and checks to see if the reed switch is activated - otherwise it goes back to sleep. This gives something like five years battery life.
Code:
; ****************** wait for unit to be turned on via reed switch ******************
Wait_Reed
sleep ; wake every second and check switch
btfsc PORTA, Reed ; wait for Reed switch activation
bra Wait_Reed
call Delay50 ; debounce delay
btfsc PORTA, Reed ; check Reed switch still activated
bra Wait_Reed
call LED_ON ; turn LED ON to show activation