code for dual voltage 'window' on ADC input
Moderator: Benj
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
code for dual voltage 'window' on ADC input
Hi Guys,
I'm hoping someone can help with this one pretty quickly as I've got a customer waiting.
I have built a simple thermostat..hardware done but now I need some code to run it.
The unit needs to run on a 12 or 24 volt system so the PIC (12F675) needs to check that the incoming supply is between 2 well defined 'windows' of voltage. It has a resistive divider on AN2, scaling the incoming supply line to fall into 5v upper limit of ADC with a maximum 30V rail........this is simple.
However, I need the chip to deactivate the temperature measurement routine and disconnect an output (set GP0 - 0) if ever this rail measures outside 2 windows that are (unscaled, window 1 will be 14V to 16V and window 2 will be 27V to 30V). Outside of these two 'windows' of good voltage, the device will lock out - go into defined state but recover to normal operation at any time the voltage comes right.
In summary, voltage below 14V - Switch off GP0
Voltage above 14V but below 16V - normal operation
voltage above 16V but below 27V - Switch off GP0
Voltage above 27V but below 30V - normal operation
Voltage above 30V - lock out operation and indicate with flashing LED.
There needs to be some form of verification loop to ensure that noise doesn't trigger when nearing thresholds or hysteresis.
Is there simple code that can do the checks on an2.
Many thanks in advance
Dave B
I'm hoping someone can help with this one pretty quickly as I've got a customer waiting.
I have built a simple thermostat..hardware done but now I need some code to run it.
The unit needs to run on a 12 or 24 volt system so the PIC (12F675) needs to check that the incoming supply is between 2 well defined 'windows' of voltage. It has a resistive divider on AN2, scaling the incoming supply line to fall into 5v upper limit of ADC with a maximum 30V rail........this is simple.
However, I need the chip to deactivate the temperature measurement routine and disconnect an output (set GP0 - 0) if ever this rail measures outside 2 windows that are (unscaled, window 1 will be 14V to 16V and window 2 will be 27V to 30V). Outside of these two 'windows' of good voltage, the device will lock out - go into defined state but recover to normal operation at any time the voltage comes right.
In summary, voltage below 14V - Switch off GP0
Voltage above 14V but below 16V - normal operation
voltage above 16V but below 27V - Switch off GP0
Voltage above 27V but below 30V - normal operation
Voltage above 30V - lock out operation and indicate with flashing LED.
There needs to be some form of verification loop to ensure that noise doesn't trigger when nearing thresholds or hysteresis.
Is there simple code that can do the checks on an2.
Many thanks in advance
Dave B
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Dave,
This should get you started:
http://www.matrixmultimedia.com/mmforum ... 71&#p26475
I'm at work now, but when I get home this evening, If you have not got a flowchart doing what you would like to, then I will create one or you.
Martin
This should get you started:
http://www.matrixmultimedia.com/mmforum ... 71&#p26475
I'm at work now, but when I get home this evening, If you have not got a flowchart doing what you would like to, then I will create one or you.
Martin
Martin
- Enamul
- Posts: 1772
- Joined: Mon Mar 05, 2012 11:34 pm
- Location: Nottingham, UK
- Has thanked: 271 times
- Been thanked: 814 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi,
Here is a sample program to fulfil your requirement...I have made that for 4 MHZ crystal as clock but if you want to use internal clock please let me know..I will modify the code..
Hope this will help.
Enamul
Here is a sample program to fulfil your requirement...I have made that for 4 MHZ crystal as clock but if you want to use internal clock please let me know..I will modify the code..
Hope this will help.
Enamul
- Attachments
-
- 12f675.fcf
- (8 KiB) Downloaded 495 times
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Enamul,
Thanks so much for this, yes I am running internal clock at 4mhz. This simulates ALMOST as needed. The only issue is that when the led flashes on overrange, it should stop flashing when back in range......I may be able to figure this out myself but you have given me fuel for going forwards.
Much appreciated.
Dave
Thanks so much for this, yes I am running internal clock at 4mhz. This simulates ALMOST as needed. The only issue is that when the led flashes on overrange, it should stop flashing when back in range......I may be able to figure this out myself but you have given me fuel for going forwards.
Much appreciated.
Dave
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Enamul,
If I rewrite the macro 'normal' to contain the code for the temperature measurement and control routine, my thinking is that this will work as a thermostat that only works when the voltages measured are within the required windows.........Am I right?
dave
If I rewrite the macro 'normal' to contain the code for the temperature measurement and control routine, my thinking is that this will work as a thermostat that only works when the voltages measured are within the required windows.........Am I right?
dave
- Enamul
- Posts: 1772
- Joined: Mon Mar 05, 2012 11:34 pm
- Location: Nottingham, UK
- Has thanked: 271 times
- Been thanked: 814 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi,
I have changed to solve the issue of blinking..in normal condition...change to internal clock..
Enamul
I have changed to solve the issue of blinking..in normal condition...change to internal clock..
Yes..it should..you can add the code you have added in my latest posted program so that I can have a look..If I rewrite the macro 'normal' to contain the code for the temperature measurement and control routine, my thinking is that this will work as a thermostat that only works when the voltages measured are within the required windows.........Am I right?
Enamul
- Attachments
-
- 12f675_v1.fcf
- (8 KiB) Downloaded 479 times
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi dave,
I had a chance during lunch to create attached flowchart.
You mentioned about spikes not activating over voltage, so I have set flowchart for 100 samples before detection takes place.
Flash rate is approx 3Hz
With this and Enamul's version you have got 2 to work from....better than none
Martin
I had a chance during lunch to create attached flowchart.
You mentioned about spikes not activating over voltage, so I have set flowchart for 100 samples before detection takes place.
Flash rate is approx 3Hz
With this and Enamul's version you have got 2 to work from....better than none
Martin
- Attachments
-
- Dual voltage window 2.fcf
- (10.5 KiB) Downloaded 481 times
Martin
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Enamul,
You are a genius sir.........I bow to you...
Now I have to do my bit and produce the code to measure temperature, hysteresis and indication.
When I've done this, I'll forward you the code if you don't mind for an expert analysis.......thanks so much again.
I hope this talent you have means you have a good job!
Dave
You are a genius sir.........I bow to you...
Now I have to do my bit and produce the code to measure temperature, hysteresis and indication.
When I've done this, I'll forward you the code if you don't mind for an expert analysis.......thanks so much again.
I hope this talent you have means you have a good job!
Dave
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Martin,
Can't thank you enough, now all I have to do is write the code for the temperature control and allocate it to the correct part of the code......genius you guys are..
Thanks so much......I reckon I can roll from this...
Cheeeeeerss
Dave
Can't thank you enough, now all I have to do is write the code for the temperature control and allocate it to the correct part of the code......genius you guys are..
Thanks so much......I reckon I can roll from this...
Cheeeeeerss
Dave
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
No problem Dave,
Glad with combination of flowcharts you have enough to allow your project to be completed.
With my flowchart I'm assuming with potential dividing resistors there is a division of 6.
So for 27V you have 27/6*10 =4.5*10 = 45.
If that's not the case then values representing voltages within decision branch will need to be adjusted or yo can remove formula and just manually calculate requiired ADC values.
Martin
Glad with combination of flowcharts you have enough to allow your project to be completed.
With my flowchart I'm assuming with potential dividing resistors there is a division of 6.
So for 27V you have 27/6*10 =4.5*10 = 45.
If that's not the case then values representing voltages within decision branch will need to be adjusted or yo can remove formula and just manually calculate requiired ADC values.
Martin
Martin
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
FYI, This is the front end of the circuit.....
Dave
Dave
- Attachments
-
- Front end....
- Clipboard01.jpg (104.66 KiB) Viewed 17607 times
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Martin,
Yes, division is approximately 6.....depending on ADC input loading, this is where I need to 'play' with conversions and calcs when I have the finished hardware on the bench......this I am ok with thanks.....or I hope I will be....lol.
Am waiting for PCB's to be delivered tomorrow, then I can build a couple and play with absolutes.
Many thanks again ....both of you guys.
I dare say this won't be the last bit of help needed on this.....I'm bound to get stuck at some point in the 'refining' process but groundwork is there. For example, I need to detect and indicate if sensor goes faulty (open/short).... I also guess I'm gonna need to start figuring out the difference between integers, bytes, readasvoltage etc. in order to use the best suited to the application.
Dave
Yes, division is approximately 6.....depending on ADC input loading, this is where I need to 'play' with conversions and calcs when I have the finished hardware on the bench......this I am ok with thanks.....or I hope I will be....lol.
Am waiting for PCB's to be delivered tomorrow, then I can build a couple and play with absolutes.
Many thanks again ....both of you guys.
I dare say this won't be the last bit of help needed on this.....I'm bound to get stuck at some point in the 'refining' process but groundwork is there. For example, I need to detect and indicate if sensor goes faulty (open/short).... I also guess I'm gonna need to start figuring out the difference between integers, bytes, readasvoltage etc. in order to use the best suited to the application.
Dave
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
One question.......do you think it would be ok to replace the 100K resistor, R8 with a 10k....saves me buying another value in......10K is used elsewhere in the circuit and would reduce cost/complexity...
Dave
Dave
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: code for dual voltage 'window' on ADC input
It depends on the programmer you are using, but normally that should not be a problem at all. In the PICkit 3 documentation Microchip even suggests 4.7 - 10 K typical.daveb0360 wrote:One question.......do you think it would be ok to replace the 100K resistor, R8 with a 10k....saves me buying another value in......10K is used elsewhere in the circuit and would reduce cost/complexity...
Dave
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Thanks, am using Pickit 2....it's been a great little programmer.
Dave
Dave
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
I agree with kersing,
10 K will be suitable as you can even go lower than this.
As for thermistors, best way would be to produce a look-up-table (LUT)
Which gives the value of temperature determined by value of ADC connected to Thermistor
If you have a datasheet for thermistor (hopefully including beta value), I can create a flowchart that assign’s a variable with a value of degrees C measured by thermistor.
Martin.
10 K will be suitable as you can even go lower than this.
As for thermistors, best way would be to produce a look-up-table (LUT)
Which gives the value of temperature determined by value of ADC connected to Thermistor
If you have a datasheet for thermistor (hopefully including beta value), I can create a flowchart that assign’s a variable with a value of degrees C measured by thermistor.
Martin.
Martin
- Enamul
- Posts: 1772
- Joined: Mon Mar 05, 2012 11:34 pm
- Location: Nottingham, UK
- Has thanked: 271 times
- Been thanked: 814 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi,
I never used 100K in my circuit.. always 10K..so you can change that to 10K easily
I never used 100K in my circuit.. always 10K..so you can change that to 10K easily
EnamulOne question.......do you think it would be ok to replace the 100K resistor, R8 with a 10k....saves me buying another value in......10K is used elsewhere in the circuit and would reduce cost/complexity...
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi David,
I have integrated room temperature measurement.
Until you can post details of thermistor,I can make assumptions.
So I'm assuming the following:
Beta is 3500 @25 to 50C
Room temperature req is 21 deg C
Thermostat will switch boiler off at 20C (I can change that if required) since there could be residual heat still heating up room after Thermostat has shut off.
For external controls, I am curious to how your going determine set point (if it's adjustable), and how your going disable Thermostat if room is not in use?
Note Look-up data for LUT can be found in Supplementary code (view, project options, Click on Supplementary code)
If you would like to learn how LUT work then try here:
http://www.matrixmultimedia.com/mmforum ... 26&t=10066
Martin
I have integrated room temperature measurement.
Until you can post details of thermistor,I can make assumptions.
So I'm assuming the following:
Beta is 3500 @25 to 50C
Room temperature req is 21 deg C
Thermostat will switch boiler off at 20C (I can change that if required) since there could be residual heat still heating up room after Thermostat has shut off.
For external controls, I am curious to how your going determine set point (if it's adjustable), and how your going disable Thermostat if room is not in use?
Note Look-up data for LUT can be found in Supplementary code (view, project options, Click on Supplementary code)
If you would like to learn how LUT work then try here:
http://www.matrixmultimedia.com/mmforum ... 26&t=10066
Martin
- Attachments
-
- Dual voltage window 3.fcf
- (15.55 KiB) Downloaded 372 times
Martin
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Wow.....the help you provided is unbelievable.......thanks so much.
FYI, the heater is actually a water heater and has a maximum preset temp of 45C +/- 2c.
The thermistor is http://uk.farnell.com/vishay-bc-compone ... dp/1761147
2.2K @25c and beta of 3520k
Boards are coming today so will be building one up and uploading the code for trials over the next day or so.
Indicator LED needs to be slow flash whilst power to unit is on......probably 0.25sec every 2 secs or so. Like a car stereo or alarm indicator.
LED needs to rapid flash if over temp by more than 20 degc to warn of possible scald risk or empty tank. at the same time, this condition MUST ensure heater output is set OFF.....like an emergency override to prevent damage or scalding.
LED needs to be constant on when water is at temperature setpoint with slow flash off whilst heating......long on.......short off.
LED needs to go very rapid if sensor is open or short as well as preventing heater from starting whilst in this fault condition.
Bit of a tall order I suspect
Dave
FYI, the heater is actually a water heater and has a maximum preset temp of 45C +/- 2c.
The thermistor is http://uk.farnell.com/vishay-bc-compone ... dp/1761147
2.2K @25c and beta of 3520k
Boards are coming today so will be building one up and uploading the code for trials over the next day or so.
Indicator LED needs to be slow flash whilst power to unit is on......probably 0.25sec every 2 secs or so. Like a car stereo or alarm indicator.
LED needs to rapid flash if over temp by more than 20 degc to warn of possible scald risk or empty tank. at the same time, this condition MUST ensure heater output is set OFF.....like an emergency override to prevent damage or scalding.
LED needs to be constant on when water is at temperature setpoint with slow flash off whilst heating......long on.......short off.
LED needs to go very rapid if sensor is open or short as well as preventing heater from starting whilst in this fault condition.
Bit of a tall order I suspect
Dave
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi Guys,
Is there a limit to the number of macros that can be called from within the main loop?
I am thinking I could write a macro for each of the led flash functions and call the relevant one from within the main loop.....done in the correct order and cancelling the current one would seem logical is this feasible?
Dave
Is there a limit to the number of macros that can be called from within the main loop?
I am thinking I could write a macro for each of the led flash functions and call the relevant one from within the main loop.....done in the correct order and cancelling the current one would seem logical is this feasible?
Dave
- Enamul
- Posts: 1772
- Joined: Mon Mar 05, 2012 11:34 pm
- Location: Nottingham, UK
- Has thanked: 271 times
- Been thanked: 814 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi,
As you are a FC v4 user, there is no known limitation in the number of macros...
As you are a FC v4 user, there is no known limitation in the number of macros...
EnamulIs there a limit to the number of macros that can be called from within the main loop?
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Thanks Enamul,
I was more concerned as to whether there was any limitations within the chip........but it's good know there are no program limitations known....
Cheers again.
Dave
I was more concerned as to whether there was any limitations within the chip........but it's good know there are no program limitations known....
Cheers again.
Dave
-
- Posts: 139
- Joined: Mon Sep 21, 2009 10:17 am
- Location: Leicester
- Has thanked: 35 times
- Been thanked: 12 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Enamul wrote:Hi,
I never used 100K in my circuit.. always 10K..so you can change that to 10K easilyEnamulOne question.......do you think it would be ok to replace the 100K resistor, R8 with a 10k....saves me buying another value in......10K is used elsewhere in the circuit and would reduce cost/complexity...
Thanks, I ended up using 22k.......I have these elsewhere in the circuit
Dave
- Enamul
- Posts: 1772
- Joined: Mon Mar 05, 2012 11:34 pm
- Location: Nottingham, UK
- Has thanked: 271 times
- Been thanked: 814 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Actually normal macro is just a reusable code which is invoked when you call them..the limitation will come if you macros within INT macros in-depth upto 8...as the return address is saved in stack...in hardware PIC has 8-level deep stack..but we don't normally use that much..I am not quite sure MM FC custom macros and built-in macro uses similar hardware stack or software stack..I was more concerned as to whether there was any limitations within the chip........but it's good know there are no program limitations known....
Enamul
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: code for dual voltage 'window' on ADC input
Hi David,
Given safty requirements of your progect, I would suggest having watchdog enabled.
I also recommend using 12F617 instead of 12F675.
It has many advantages.
E.g twice as much memory (I have ran out of space with 12F675),
Cheaper,
can run at 4 or 8MHz,
Has 10bit PWM.
Also If I post a flowchart a bit later, it will be of your risk if you decide to use it.
Please only download and use if your going to accept full responsibily.
Martin
Given safty requirements of your progect, I would suggest having watchdog enabled.
I also recommend using 12F617 instead of 12F675.
It has many advantages.
E.g twice as much memory (I have ran out of space with 12F675),
Cheaper,
can run at 4 or 8MHz,
Has 10bit PWM.
Also If I post a flowchart a bit later, it will be of your risk if you decide to use it.
Please only download and use if your going to accept full responsibily.
Martin
Martin