1-Wire implementation, using DS2480B controller interfaced with serial port, working example to read DS18B20, based on work already in progress / Dallas - Public domain code

Dependencies:   mbed

Revision:
0:1193dbfe28e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Headers/ds2480.h	Thu Mar 24 17:21:29 2011 +0000
@@ -0,0 +1,220 @@
+//---------------------------------------------------------------------------
+// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
+// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+// Except as contained in this notice, the name of Dallas Semiconductor
+// shall not be used except as stated in the Dallas Semiconductor
+// Branding Policy.
+//---------------------------------------------------------------------------
+//
+//  DS2480.H - This file contains the DS2480B constants
+//
+//  Version: 2.00
+//
+//  History: 1.02 -> 1.03 Make sure uchar is not defined twice.
+//
+//
+
+
+#ifndef DS2480_H
+#define DS2480_H
+
+#include "ownet.h"
+
+#ifndef __MC68K__
+#include <stdlib.h>
+#ifndef _WIN32_WCE
+#include <stdio.h>
+#endif
+#endif
+
+// Mode Commands
+#define MODE_DATA                      0xE1
+#define MODE_COMMAND                   0xE3
+#define MODE_STOP_PULSE                0xF1
+
+// Return byte value
+#define RB_CHIPID_MASK                 0x1C
+#define RB_RESET_MASK                  0x03
+#define RB_1WIRESHORT                  0x00
+#define RB_PRESENCE                    0x01
+#define RB_ALARMPRESENCE               0x02
+#define RB_NOPRESENCE                  0x03
+
+#define RB_BIT_MASK                    0x03
+#define RB_BIT_ONE                     0x03
+#define RB_BIT_ZERO                    0x00
+
+// Masks for all bit ranges
+#define CMD_MASK                       0x80
+#define FUNCTSEL_MASK                  0x60
+#define BITPOL_MASK                    0x10
+#define SPEEDSEL_MASK                  0x0C
+#define MODSEL_MASK                    0x02
+#define PARMSEL_MASK                   0x70
+#define PARMSET_MASK                   0x0E
+#define VERSION_MASK                   0x1C
+
+// Command or config bit
+#define CMD_COMM                       0x81
+#define CMD_CONFIG                     0x01
+
+// Function select bits
+#define FUNCTSEL_BIT                   0x00
+#define FUNCTSEL_SEARCHON              0x30
+#define FUNCTSEL_SEARCHOFF             0x20
+#define FUNCTSEL_RESET                 0x40
+#define FUNCTSEL_CHMOD                 0x60
+
+// Bit polarity/Pulse voltage bits
+#define BITPOL_ONE                     0x10
+#define BITPOL_ZERO                    0x00
+#define BITPOL_5V                      0x00
+#define BITPOL_12V                     0x10
+
+// One Wire speed bits
+#define SPEEDSEL_STD                   0x00
+#define SPEEDSEL_FLEX                  0x04
+#define SPEEDSEL_OD                    0x08
+#define SPEEDSEL_PULSE                 0x0C
+
+// Data/Command mode select bits
+#define MODSEL_DATA                    0x00
+#define MODSEL_COMMAND                 0x02
+
+// 5V Follow Pulse select bits (If 5V pulse
+// will be following the next byte or bit.)
+#define PRIME5V_TRUE                   0x02
+#define PRIME5V_FALSE                  0x00
+
+// Parameter select bits
+#define PARMSEL_PARMREAD               0x00
+#define PARMSEL_SLEW                   0x10
+#define PARMSEL_12VPULSE               0x20
+#define PARMSEL_5VPULSE                0x30
+#define PARMSEL_WRITE1LOW              0x40
+#define PARMSEL_SAMPLEOFFSET           0x50
+#define PARMSEL_ACTIVEPULLUPTIME       0x60
+#define PARMSEL_BAUDRATE               0x70
+
+// Pull down slew rate.
+#define PARMSET_Slew15Vus              0x00
+#define PARMSET_Slew2p2Vus             0x02
+#define PARMSET_Slew1p65Vus            0x04
+#define PARMSET_Slew1p37Vus            0x06
+#define PARMSET_Slew1p1Vus             0x08
+#define PARMSET_Slew0p83Vus            0x0A
+#define PARMSET_Slew0p7Vus             0x0C
+#define PARMSET_Slew0p55Vus            0x0E
+
+// 12V programming pulse time table
+#define PARMSET_32us                   0x00
+#define PARMSET_64us                   0x02
+#define PARMSET_128us                  0x04
+#define PARMSET_256us                  0x06
+#define PARMSET_512us                  0x08
+#define PARMSET_1024us                 0x0A
+#define PARMSET_2048us                 0x0C
+#define PARMSET_infinite               0x0E
+
+// 5V strong pull up pulse time table
+#define PARMSET_16p4ms                 0x00
+#define PARMSET_65p5ms                 0x02
+#define PARMSET_131ms                  0x04
+#define PARMSET_262ms                  0x06
+#define PARMSET_524ms                  0x08
+#define PARMSET_1p05s                  0x0A
+#define PARMSET_2p10s                  0x0C
+#define PARMSET_infinite               0x0E
+
+// Write 1 low time
+#define PARMSET_Write8us               0x00
+#define PARMSET_Write9us               0x02
+#define PARMSET_Write10us              0x04
+#define PARMSET_Write11us              0x06
+#define PARMSET_Write12us              0x08
+#define PARMSET_Write13us              0x0A
+#define PARMSET_Write14us              0x0C
+#define PARMSET_Write15us              0x0E
+
+// Data sample offset and Write 0 recovery time
+#define PARMSET_SampOff3us             0x00
+#define PARMSET_SampOff4us             0x02
+#define PARMSET_SampOff5us             0x04
+#define PARMSET_SampOff6us             0x06
+#define PARMSET_SampOff7us             0x08
+#define PARMSET_SampOff8us             0x0A
+#define PARMSET_SampOff9us             0x0C
+#define PARMSET_SampOff10us            0x0E
+
+// Active pull up on time
+#define PARMSET_PullUp0p0us            0x00
+#define PARMSET_PullUp0p5us            0x02
+#define PARMSET_PullUp1p0us            0x04
+#define PARMSET_PullUp1p5us            0x06
+#define PARMSET_PullUp2p0us            0x08
+#define PARMSET_PullUp2p5us            0x0A
+#define PARMSET_PullUp3p0us            0x0C
+#define PARMSET_PullUp3p5us            0x0E
+
+// Baud rate bits
+#define PARMSET_9600                   0x00
+#define PARMSET_19200                  0x02
+#define PARMSET_57600                  0x04
+#define PARMSET_115200                 0x06
+
+// Baud rate bits - Inverted Read
+#define PARMSET_INV_9600               0x08
+#define PARMSET_INV_19200              0x0A
+#define PARMSET_INV_57600              0x0C
+#define PARMSET_INV_115200             0x0E
+
+
+// DS2480B program voltage available
+#define DS2480PROG_MASK                0x20
+
+// mode bit flags
+#define MODE_NORMAL                    0x00
+#define MODE_OVERDRIVE                 0x01
+#define MODE_STRONG5                   0x02
+#define MODE_PROGRAM                   0x04
+#define MODE_BREAK                     0x08
+
+// Versions of DS2480
+#define VER_LINK                       0x1C
+#define VER_DS2480                     0x08
+#define VER_DS2480B                    0x0C
+
+// exportable functions defined in ds2480ut.c
+SMALLINT DS2480Detect(int portnum);
+SMALLINT DS2480ChangeBaud(int portnum, uchar newbaud);
+
+// link functions from win32lnk.c or other link files
+SMALLINT  OpenCOM(int portnum, char *port_zstr);
+int       OpenCOMEx(char *port_zstr);
+void      CloseCOM(int portnum);
+void      FlushCOM(int portnum);
+SMALLINT  WriteCOM(int portnum, int outlen, uchar *outbuf);
+int       ReadCOM(int portnum, int inlen, uchar *inbuf);
+void      BreakCOM(int portnum);
+void      SetBaudCOM(int portnum, int new_baud);
+
+
+#endif //DS2480_H