PDA

View Full Version : 1st time COMPARATOR use...



flotulopex
- 2nd June 2007, 18:36
Hello,

I'm trying to use a comparator with my 12F675 for the first time.

This is a simple battery low-level indicator project and I have reduced the schema to its minimum. The LED should light-up when the battery voltage drops lower than 6,5V.
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1698&stc=1&d=1180804880">

I've found lots of information around the forum and the web but, I'm still stuck afters hours of testing...

Here is my code:
' Fuses
@ DEVICE PIC12F675,INTRC_OSC_NOCLKOUT ;Internal oscillator 4MHz
@ DEVICE PIC12F675,WDT_OFF
@ DEVICE PIC12F675,PWRT_ON
@ DEVICE PIC12F675,MCLR_OFF
@ DEVICE PIC12F675,BOD_OFF
@ DEVICE PIC12F675,PROTECT_OFF
@ DEVICE PIC12F675,CPD_OFF

'-------------------------------------------------------------------------------
' Registers 76543210
OSCCAL = %10000000 'Center frequency - used with Internal 4MHz OSC
TRISIO = %00000001 'Set Input/Output
GPIO = %00000000 'Ports High/Low
WPU = %00000000 'Weak pull-ups (check OPTION_REG)
OPTION_REG = %10000000 'Pull-ups / Interrupt / Prescaler
ANSEL = %00000001 'Analog I/O
CMCON = %01000010 'Comparator Module settings
VRCON = %10101100 'Voltage reference (= 2.5V)

'-------------------------------------------------------------------------------
' Variables
BatVal var CMCON.6
BatLoLED var GPIO.2

'-----------------------------------------------------------------------------
' Program
Pause 1 'Delay to allow for VREF to settle
MAIN:
BatLoLED = BatVal
Goto Main
End

I have to admit, I don't clearly understand all the comparator modes.

But I hope to get it working so I can start doing experiences with all different modes... and learn.

Darrel Taylor
- 2nd June 2007, 23:13
Hi Roger,

With a voltage divider of 22k and 10k, when the batt voltage is 6.5, the divider output will be 2.031 volts.

But the VRCON setting is for 2.5V. So it would switch at a batt voltage of 8 volts instead of 6.5

If VRCON were %10101010 it would give a reference of 2.08 V, and the comparator would switch at 6.66V.
<hr>
For the comparator you can use this configuration...

<img src=http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1700&stc=1&d=1180821736>

With CIS set to 1 it puts the GP0 input on the "-" input of the comparator.
Then as long as the batt is greater than 6.66V, the comparator output will be 0

In that case, CMCON should be %00001110.

HTH,

PS: Do you play Half-Life? Roger(SWE)?
<br>

flotulopex
- 3rd June 2007, 08:30
Hi Darrel,

My battery delivers 9V so according to your post, the VRCON setting should be correct.

I'm going to try the "110" Comparator mode; this, the functionality you explain, is exactly what I would like it to do.

Darrel, would you know a tutorial about the use of Comparator? I'm getting lost more and more...

Thank you.

NB: every day, I play a full life; (SWItzerland - green circle - see attached map)

Darrel Taylor
- 3rd June 2007, 22:29
Yup, big difference between Sweden and switzerland. Doh! :o


would you know a tutorial about the use of Comparator?
Not really, but maybe this will help. From Microchip...

PICmicro Comparator Tips n Tricks
http://ww1.microchip.com/downloads/en/DeviceDoc/41215a.pdf

Or, it might just confuse things even more :confused:
<br>

Darrel Taylor
- 4th June 2007, 03:14
My battery delivers 9V so according to your post, the VRCON setting should be correct.

I've looked that statement over several times, and I'm still not sure what you meant.

Your original VRCON should be correct?
-- or--
The VRCON according to my post should be correct?

So, in case there's still some confusion, here's something that might help to understand the voltage divider part.
It's already set up with your divider and 6.5v input...

PIC Voltage Divider Calculator
http://www.pbpgroup.com/modules/wfsection/article.php?articleid=25&15,22000,6.5

regards,

paul borgmeier
- 4th June 2007, 05:28
would you know a tutorial about the use of Comparator? I'm getting lost more and more...

See Melanie's post here
http://list.picbasic.com/forum/messages/3064/3607.html?

flotulopex
- 4th June 2007, 11:23
Yes Paul, I read Melanie's tutorial. At my level of comprehension, it is more like an example using a Comparator module in a 16F628.

Yes Darrel, I read the MICROCHIP's Comparator Tips & Tricks document.

The problem is, I don't clearly understand all the different pin/port/register names described in the datasheet. If some of them are obvious to me (VRef, A, D, etc..), others are not (CINV, VIN, CIN, etc..).

Sorry if this sounds stupid and looked easy as a conventional ampli-op before I started, but all the µC-specific terminology messes my mind up.

Just an example; when I read the 12F765's datasheet Comparator Operating Modes, I get lost at the very first figure....
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1703&stc=1&d=1180950921">
Here, I assume I have to set ports GPIO.0 & GPIO.1 to Analog (ANSEL register); is this right? But what is with the Output? Is it going to turn to an "1" when CIN+ > CIN-? How will I use it?

And now, is it just the same as before but when the condition is CIN+ > CIN-, does COUT (bit) go to a "1"?
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1704&stc=1&d=1180951555">

What are CINV, VIN, CIN and what are they doing exactly?

It's confusing me.

flotulopex
- 4th June 2007, 18:04
Okay, after some more trials and a correct connection to GP1 (... not GP0!!!), I got it working.

BUT how do I improve the accuracy?

When the measured voltage ist between 2,3V and 2,6V, my led flickers.

How do I fix this?

Another strange thing: if I "forget" to set the GP1 input as Analog (ANSEL), it still works(!?).

BTW, here are my corrected schema and code:
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=1708&stc=1&d=1180976545">


' Fuses
@ DEVICE PIC12F675,INTRC_OSC_NOCLKOUT ;Internal oscillator 4MHz
@ DEVICE PIC12F675,WDT_OFF
@ DEVICE PIC12F675,PWRT_ON
@ DEVICE PIC12F675,MCLR_OFF
@ DEVICE PIC12F675,BOD_OFF
@ DEVICE PIC12F675,PROTECT_OFF
@ DEVICE PIC12F675,CPD_OFF

'-------------------------------------------------------------------------------
' Registers 76543210
OSCCAL = %10000000 'Center frequency - used with Internal 4MHz OSC
TRISIO = %00000010 'Set Input/Output
GPIO = %00000000 'Ports High/Low
WPU = %00000000 'Weak pull-ups (check OPTION_REG)
OPTION_REG = %10000000 'Pull-ups / Interrupt / Prescaler
ANSEL = %00000010 'Analog I/O
CMCON = %01000100 'Comparator Module settings
VRCON = %10101100 'Voltage reference (= 2.5V)

'-------------------------------------------------------------------------------
' Variables
BatVal var CMCON.6
BatLoLED var GPIO.2

'-----------------------------------------------------------------------------
' Program
Pause 1 'Delay to allow for VREF to settle
MAIN:
BatLoLED = BatVal
pause 10
Goto Main
End