PDA

View Full Version : Help with DS2436 Voltage monitor



vladimir059@hot
- 30th July 2006, 03:40
I am a beginner with 1-wire technology. Maybe someone can help me to write program to Voltage Monitor DS2436.
Thank you in advance
Vladimir.

DynamoBen
- 30th July 2006, 04:55
We are happy to help if you have specific questions. It’s a fairly straight forward process start with the datasheets and PICBasic user manual; specifically OWIN and OWOUT.

Go here to see OWIN and OWOUT examples: http://www.melabs.com/resources/samples.htm

vladimir059@hot
- 30th July 2006, 22:43
Hello DynamoBen.
Thank you for reply. I need to adapt code written for Basic Stamp 2p24 module.
I’d like to program PIC16F84A – 04/P to display voltage and temperature on Hitachi 44780 style display. I tried to download this program directly to PIC Basic PRO complier, but it gives error messages. As I’m just started with this product and I need little help, please. Can you correct following code?

'************************************************* ***************
'* Name : UNTITLED.BAS *
'* Author : [VLADIMIR] *
'* Notice : Copyright (c) 2006 [None] *
'* : All Rights Reserved *
'* Date : 7/30/2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************

' File...... DS2436.BS2
' Purpose... Reads information from a Dallas DS2436
'
' {$STAMP BS2p}
' {$PBASIC 2.5}
'
' -----[ Program Description ]--------------------------------------------------
' This program is based on the PSK_DS1822.bsp sample program in the
' BASIC Stamp 2p24 Professional Starter Kit (.pdf) document. Thank you Parallax!
'
' Program output is via DEBUG and looks like:
'
' DS2436 DATA
' Voltage: 4.8v (01 E3)
' Temperature: 25°C (19 10)
' counter = 18
'
' -----[ Revision History ]-----------------------------------------------------
'
' -----[ I/O Definitions ]------------------------------------------------------
'
OWpin CON 1

' -----[ Constants ]------------------------------------------------------------
'
' 1-Wire Support
'
ReadROM CON $33 ' read ID, serial num, CRC
MatchROM CON $55 ' look for specific device
SkipROM CON $CC ' skip rom (one device)
SearchROM CON $F0 ' search

OW_FERst CON %0001 ' Front-End Reset
OW_BERst CON %0010 ' Back-End Reset
OW_BitMode CON %0100
OW_HighSpd CON %1000

' DS2346 control
'
ConvertV CON $B4 ' convert the voltage
ConvertT CON $D2 ' convert the temperature
ReadRegister CON $B2 ' read page 4 and page 5 of DS2436

NoDevice CON %11 ' no device present
DegSym CON 176

' -----[ Variables ]------------------------------------------------------------
'
voltage VAR Word
vLo VAR voltage.BYTE0
vHi VAR voltage.BYTE1
temp VAR Word
tLo VAR temp.BYTE0
tHi VAR temp.BYTE1
counter VAR Word
romData VAR Word(8)

devCheck VAR Word

' -----[ EEPROM Data ]----------------------------------------------------------
'
' -----[ Initialization ]-------------------------------------------------------
'
Initialize:
DEBUG CLS
PAUSE 250 ' allow DEBUG screen to open
counter = 0
'
GOSUB Device_Check ' look for device
IF (devCheck <> NoDevice) THEN Main
No_Device_Found:
DEBUG CLS,"No 1-wire device present.", CR
DEBUG "-- Insert device and re-start."
END

' -----[ Main Code ]------------------------------------------------------------
'
Main:
DEBUG HOME, "DS2436 Data"
counter = counter + 1 ' count number of conversions

GOSUB Get_Volt ' voltage conversion
GOSUB Get_Temp ' temperature conversion

testValue1: ' voltage = $01E3 ' uncomment to test without DS2436
testValue2: ' temp = $1910 ' uncomment to test without DS2436

DEBUG CR, "Voltage: ",DEC voltage/100, ".", DEC1 voltage/10,"v (", HEX2 vHi, " ", HEX2 vLo, ")"
DEBUG CR, "Temperature: ",DEC tHi, DegSym, "C (", HEX2 tHi, " ", HEX2 tLo, ")"
DEBUG CR, DEC ? counter

PAUSE 500 ' delay for a bit....
GOTO Main

END
' -----[ Subroutines ]----------------------------------------------------------
'
'DS2436 Page 4 Memory is read using the Read_Registers [$B2] command
'addr purpose
' $60 Temp LSB (decimal degrees C)
' $61 Temp MSB (integer degrees C)
' $62 status (BIT0 shows T conversion status, Bit 3 shows V status)
' $63 status
' $77 Voltage LSB
' $78 Voltage MSB

Get_Volt:
OWOUT OWpin,OW_FERst,[SkipROM,ConvertV] ' send voltage conversion command
PAUSE 15 ' give it some time (could wait until bit3 at $62 equals 0)
OWOUT OWpin,OW_FERst,[SkipROM,ReadRegister, $77] ' lo byte voltage
OWIN OWpin,OW_BERst,[vLo]
OWOUT OWpin,OW_FERst,[SkipROM,ReadRegister, $78] ' hi byte voltage
OWIN OWpin,OW_BERst,[vHi]
RETURN

Get_Temp:
OWOUT OWpin,OW_FERst,[SkipROM,ConvertT] ' send voltage conversion command
PAUSE 15 ' give it some time (could wait until bit1 at $62 equals 0)
OWOUT OWpin,OW_FERst,[SkipROM,ReadRegister, $60] ' lo byte temp
OWIN OWpin,OW_BERst,[tLo]
OWOUT OWpin,OW_FERst,[SkipROM,ReadRegister, $61] ' hi byte temp
OWIN OWpin,OW_BERst,[tHi]
RETURN


' This subroutine checks to see if any 1-Wire devices are present on the
' bus. It does NOT search for ROM codes
Device_Check:
devCheck = 0
OWOUT OWpin,OW_FERst,[SearchROM] ' reset and start search
OWIN OWpin,OW_BitMode,[devCheck.BIT1,devCheck.BIT0]
RETURN

Thank you in advance
Vladimir

DynamoBen
- 30th July 2006, 23:07
"Can you correct following code?"

This forum tends to take the "teach a man to fish" attitude. We try to provide people with information to assit them with problems not solve them for the person. I and others are more than happy to assist you with specific problems or questions. Keep in mind we don't have a schematic and often don't know what the intentions of your design are.

Your code seems very close to being correct. Make sure you have read through the section at the back of the manual about the differences between PICBasic and Stamp. That will help.

I do see that you have a bunch of debug commands which I would assume are supposed to be text sent to the LCD; if so check out the LCDOut command. These debug statements are causing your errors, lcdout should remedy this. You will also want to specify the xtal speed you are using with the following command at the top of your program:

DEFINE OSC 20 ; 20mhz XTAL (change notes above)

Beyond that I found that the search function in the forum will turn up a lot of useful info. I too was a beginner once so I understand the challenges you are facing; that being said you have a jumpstart since what you have works on a stamp.

vladimir059@hot
- 31st July 2006, 00:06
Hello DynamoBen.
I couldn’t agree with you more! I’m talking about “teach a man to fish attitude”.
But like anyone else living on this planet I’m trying to find easiest ways first. Another point I’m just started reading PIC BASIC Pro manual, and as English isn’t my native language it probably takes me about a week to finish. I’m very impatient person and after I spent almost 300 CAD I’d really like to accomplish something in first two days. Especially DS2436 voltage monitor project, as I already tried to put through on Basic Stamp II, unsuccessfully unfortunately. That’s why my attempt to put problems on somebody’s shoulders is not a habit; it is just exiting about new “toy” and wish to play with it as soon as possible. I assure you in few weeks I will be familiar with PIC Basic and I will write such program from scratch myself.
Anyway, thank you for your messages I will check up web site for similar programs and hints.
Best regards
Vladimir

DynamoBen
- 31st July 2006, 00:22
The best way to learn is:

Read and understand the datasheets and user manual
Review the Melabs examples (some of which come from users on this forum)
Utilize the search function above
and most of all...experiment.

If you still can't find your answer, go ahead and post. This forum is a wealth of information; and a nice bunch of people. ;)

Soon you too with be a contributing member.

Darrel Taylor
- 31st July 2006, 01:00
Hi Vladimir,

Just wanted to reinforce that Ben pretty much hit the nail on the head.

DEBUG is your biggest problem. It's not the same in PBP.

Something to focus in on, instead of trying to learn it all at once.

Make sure you have read through the section at the back of the manual about the differences between PICBasic and Stamp. That will help.

regards,
Darrel

vladimir059@hot
- 31st July 2006, 03:18
Thank you everybody for replies and advises. I corrected the code and a bit improve it. Now it works flawless.
Thanks again

Vladimir.

DynamoBen
- 31st July 2006, 03:46
See you didn't need us to correct the code, well done!

emavil
- 30th October 2006, 02:58
I'm planning to construct a power-on delay device which mimics the functionality of a simple REF-Guard. I'm using PIC16F628A and wire three 7-Segment displays inorder to display the countdown in seconds. After countdown, the device will display the reading of the Mains voltage on the 7-segment displays or to an LCD. My problem is how to monitor read the Mains voltage and display it on an LCD or 7-segment. How do i monitor the power fluctuation or a sudden low voltage. Anybody who knows how to monitor (real-time) then 220vAC?

How about monitoring/reading DC voltages?

sayzer
- 30th October 2006, 08:08
Hi emavil,

Say you are monitoring AC line and it is 220VAC.
This is your initial reference voltage.

But suddenly it drops to say 205VAC.

Then, you want to display the difference of 15 ?

Or it goes up to 238V, for example, and you want to show the difference of 18 ?

Is my understanding correct?

-----------------------

mister_e
- 30th October 2006, 16:39
Vrms=Vmax*0.707

Maybe you could use some Zero crossing, and do an average around Vrms point on the SinWave? (45 degree, 2.08mSec after zero crossing for a 60Hz sine)

OR use a simple transformer BUT calibrate it... :eek:

OR Use the AC line, rectify it, drop the voltage to something readable, then process the whole thing.

Everything above will need calibration anyway.