Transistor Gijutsu, October 2014, Special Features Chapter 8,Software of the thermistor thermometer of 0.001 ° resolution, トランジスタ技術2014年10月号 特集第8章のソフトウェア 0.001℃分解能で気配もキャッチ「超敏感肌温度計」

Dependencies:   USBDevice mbed

Information

tg_201410s8_AD7714 トランジスタ技術 2014年 10月号 第8章のソフトウェア

Program for Section 8 in October. 2014 issue of the Transistor Gijutsu
(Japanese electronics magazine)

概要

このプログラムは、サーミスタの抵抗値変化をAD7714(24bitADC)で測定し、抵抗値を温度値に変換することで、0.001℃程度の分解能で温度変化を測定します。

ファイル

このソフトウエアは、次のファイルから構成されています。

  • AD7714.cpp - AD7714の内部レジスタを設定
  • Thermistor.cpp - サーミスタの抵抗値から温度値に変換
  • ExpAvr.cpp - 指数平均によるソフトウエアLPF
  • main.cpp - main()関数

詳細については、10月号の記事および上記ファイル中のコメントを参照してください。

Committer:
Dance
Date:
Fri Aug 29 08:38:36 2014 +0000
Revision:
0:de885a6da962
Transistor Gijutsu, October 2014, Special Features Chapter 8; ????????2014?10??????8????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dance 0:de885a6da962 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
Dance 0:de885a6da962 2 *
Dance 0:de885a6da962 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Dance 0:de885a6da962 4 * and associated documentation files (the "Software"), to deal in the Software without
Dance 0:de885a6da962 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
Dance 0:de885a6da962 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
Dance 0:de885a6da962 7 * Software is furnished to do so, subject to the following conditions:
Dance 0:de885a6da962 8 *
Dance 0:de885a6da962 9 * The above copyright notice and this permission notice shall be included in all copies or
Dance 0:de885a6da962 10 * substantial portions of the Software.
Dance 0:de885a6da962 11 *
Dance 0:de885a6da962 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Dance 0:de885a6da962 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Dance 0:de885a6da962 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Dance 0:de885a6da962 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Dance 0:de885a6da962 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Dance 0:de885a6da962 17 */
Dance 0:de885a6da962 18
Dance 0:de885a6da962 19 #ifndef USBDEVICE_H
Dance 0:de885a6da962 20 #define USBDEVICE_H
Dance 0:de885a6da962 21
Dance 0:de885a6da962 22 #include "mbed.h"
Dance 0:de885a6da962 23 #include "USBDevice_Types.h"
Dance 0:de885a6da962 24 #include "USBHAL.h"
Dance 0:de885a6da962 25
Dance 0:de885a6da962 26 class USBDevice: public USBHAL
Dance 0:de885a6da962 27 {
Dance 0:de885a6da962 28 public:
Dance 0:de885a6da962 29 USBDevice(uint16_t vendor_id, uint16_t product_id, uint16_t product_release);
Dance 0:de885a6da962 30
Dance 0:de885a6da962 31 /*
Dance 0:de885a6da962 32 * Check if the device is configured
Dance 0:de885a6da962 33 *
Dance 0:de885a6da962 34 * @returns true if configured, false otherwise
Dance 0:de885a6da962 35 */
Dance 0:de885a6da962 36 bool configured(void);
Dance 0:de885a6da962 37
Dance 0:de885a6da962 38 /*
Dance 0:de885a6da962 39 * Connect a device
Dance 0:de885a6da962 40 *
Dance 0:de885a6da962 41 * @param blocking: block if not configured
Dance 0:de885a6da962 42 */
Dance 0:de885a6da962 43 void connect(bool blocking = true);
Dance 0:de885a6da962 44
Dance 0:de885a6da962 45 /*
Dance 0:de885a6da962 46 * Disconnect a device
Dance 0:de885a6da962 47 */
Dance 0:de885a6da962 48 void disconnect(void);
Dance 0:de885a6da962 49
Dance 0:de885a6da962 50 /*
Dance 0:de885a6da962 51 * Add an endpoint
Dance 0:de885a6da962 52 *
Dance 0:de885a6da962 53 * @param endpoint endpoint which will be added
Dance 0:de885a6da962 54 * @param maxPacket Maximum size of a packet which can be sent for this endpoint
Dance 0:de885a6da962 55 * @returns true if successful, false otherwise
Dance 0:de885a6da962 56 */
Dance 0:de885a6da962 57 bool addEndpoint(uint8_t endpoint, uint32_t maxPacket);
Dance 0:de885a6da962 58
Dance 0:de885a6da962 59 /*
Dance 0:de885a6da962 60 * Start a reading on a certain endpoint.
Dance 0:de885a6da962 61 * You can access the result of the reading by USBDevice_read
Dance 0:de885a6da962 62 *
Dance 0:de885a6da962 63 * @param endpoint endpoint which will be read
Dance 0:de885a6da962 64 * @param maxSize the maximum length that can be read
Dance 0:de885a6da962 65 * @return true if successful
Dance 0:de885a6da962 66 */
Dance 0:de885a6da962 67 bool readStart(uint8_t endpoint, uint32_t maxSize);
Dance 0:de885a6da962 68
Dance 0:de885a6da962 69 /*
Dance 0:de885a6da962 70 * Read a certain endpoint. Before calling this function, USBUSBDevice_readStart
Dance 0:de885a6da962 71 * must be called.
Dance 0:de885a6da962 72 *
Dance 0:de885a6da962 73 * Warning: blocking
Dance 0:de885a6da962 74 *
Dance 0:de885a6da962 75 * @param endpoint endpoint which will be read
Dance 0:de885a6da962 76 * @param buffer buffer will be filled with the data received
Dance 0:de885a6da962 77 * @param size the number of bytes read will be stored in *size
Dance 0:de885a6da962 78 * @param maxSize the maximum length that can be read
Dance 0:de885a6da962 79 * @returns true if successful
Dance 0:de885a6da962 80 */
Dance 0:de885a6da962 81 bool readEP(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
Dance 0:de885a6da962 82
Dance 0:de885a6da962 83 /*
Dance 0:de885a6da962 84 * Read a certain endpoint.
Dance 0:de885a6da962 85 *
Dance 0:de885a6da962 86 * Warning: non blocking
Dance 0:de885a6da962 87 *
Dance 0:de885a6da962 88 * @param endpoint endpoint which will be read
Dance 0:de885a6da962 89 * @param buffer buffer will be filled with the data received (if data are available)
Dance 0:de885a6da962 90 * @param size the number of bytes read will be stored in *size
Dance 0:de885a6da962 91 * @param maxSize the maximum length that can be read
Dance 0:de885a6da962 92 * @returns true if successful
Dance 0:de885a6da962 93 */
Dance 0:de885a6da962 94 bool readEP_NB(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
Dance 0:de885a6da962 95
Dance 0:de885a6da962 96 /*
Dance 0:de885a6da962 97 * Write a certain endpoint.
Dance 0:de885a6da962 98 *
Dance 0:de885a6da962 99 * Warning: blocking
Dance 0:de885a6da962 100 *
Dance 0:de885a6da962 101 * @param endpoint endpoint to write
Dance 0:de885a6da962 102 * @param buffer data contained in buffer will be write
Dance 0:de885a6da962 103 * @param size the number of bytes to write
Dance 0:de885a6da962 104 * @param maxSize the maximum length that can be written on this endpoint
Dance 0:de885a6da962 105 */
Dance 0:de885a6da962 106 bool write(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
Dance 0:de885a6da962 107
Dance 0:de885a6da962 108
Dance 0:de885a6da962 109 /*
Dance 0:de885a6da962 110 * Write a certain endpoint.
Dance 0:de885a6da962 111 *
Dance 0:de885a6da962 112 * Warning: non blocking
Dance 0:de885a6da962 113 *
Dance 0:de885a6da962 114 * @param endpoint endpoint to write
Dance 0:de885a6da962 115 * @param buffer data contained in buffer will be write
Dance 0:de885a6da962 116 * @param size the number of bytes to write
Dance 0:de885a6da962 117 * @param maxSize the maximum length that can be written on this endpoint
Dance 0:de885a6da962 118 */
Dance 0:de885a6da962 119 bool writeNB(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
Dance 0:de885a6da962 120
Dance 0:de885a6da962 121
Dance 0:de885a6da962 122 /*
Dance 0:de885a6da962 123 * Called by USBDevice layer on bus reset. Warning: Called in ISR context
Dance 0:de885a6da962 124 *
Dance 0:de885a6da962 125 * May be used to reset state
Dance 0:de885a6da962 126 */
Dance 0:de885a6da962 127 virtual void USBCallback_busReset(void) {};
Dance 0:de885a6da962 128
Dance 0:de885a6da962 129 /*
Dance 0:de885a6da962 130 * Called by USBDevice on Endpoint0 request. Warning: Called in ISR context
Dance 0:de885a6da962 131 * This is used to handle extensions to standard requests
Dance 0:de885a6da962 132 * and class specific requests
Dance 0:de885a6da962 133 *
Dance 0:de885a6da962 134 * @returns true if class handles this request
Dance 0:de885a6da962 135 */
Dance 0:de885a6da962 136 virtual bool USBCallback_request() { return false; };
Dance 0:de885a6da962 137
Dance 0:de885a6da962 138 /*
Dance 0:de885a6da962 139 * Called by USBDevice on Endpoint0 request completion
Dance 0:de885a6da962 140 * if the 'notify' flag has been set to true. Warning: Called in ISR context
Dance 0:de885a6da962 141 *
Dance 0:de885a6da962 142 * In this case it is used to indicate that a HID report has
Dance 0:de885a6da962 143 * been received from the host on endpoint 0
Dance 0:de885a6da962 144 *
Dance 0:de885a6da962 145 * @param buf buffer received on endpoint 0
Dance 0:de885a6da962 146 * @param length length of this buffer
Dance 0:de885a6da962 147 */
Dance 0:de885a6da962 148 virtual void USBCallback_requestCompleted(uint8_t * buf, uint32_t length) {};
Dance 0:de885a6da962 149
Dance 0:de885a6da962 150 /*
Dance 0:de885a6da962 151 * Called by USBDevice layer. Set configuration of the device.
Dance 0:de885a6da962 152 * For instance, you can add all endpoints that you need on this function.
Dance 0:de885a6da962 153 *
Dance 0:de885a6da962 154 * @param configuration Number of the configuration
Dance 0:de885a6da962 155 */
Dance 0:de885a6da962 156 virtual bool USBCallback_setConfiguration(uint8_t configuration) { return false; };
Dance 0:de885a6da962 157
Dance 0:de885a6da962 158 /*
Dance 0:de885a6da962 159 * Called by USBDevice layer. Set interface/alternate of the device.
Dance 0:de885a6da962 160 *
Dance 0:de885a6da962 161 * @param interface Number of the interface to be configured
Dance 0:de885a6da962 162 * @param alternate Number of the alternate to be configured
Dance 0:de885a6da962 163 * @returns true if class handles this request
Dance 0:de885a6da962 164 */
Dance 0:de885a6da962 165 virtual bool USBCallback_setInterface(uint16_t interface, uint8_t alternate) { return false; };
Dance 0:de885a6da962 166
Dance 0:de885a6da962 167 /*
Dance 0:de885a6da962 168 * Get device descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
Dance 0:de885a6da962 169 *
Dance 0:de885a6da962 170 * @returns pointer to the device descriptor
Dance 0:de885a6da962 171 */
Dance 0:de885a6da962 172 virtual uint8_t * deviceDesc();
Dance 0:de885a6da962 173
Dance 0:de885a6da962 174 /*
Dance 0:de885a6da962 175 * Get configuration descriptor
Dance 0:de885a6da962 176 *
Dance 0:de885a6da962 177 * @returns pointer to the configuration descriptor
Dance 0:de885a6da962 178 */
Dance 0:de885a6da962 179 virtual uint8_t * configurationDesc(){return NULL;};
Dance 0:de885a6da962 180
Dance 0:de885a6da962 181 /*
Dance 0:de885a6da962 182 * Get string lang id descriptor
Dance 0:de885a6da962 183 *
Dance 0:de885a6da962 184 * @return pointer to the string lang id descriptor
Dance 0:de885a6da962 185 */
Dance 0:de885a6da962 186 virtual uint8_t * stringLangidDesc();
Dance 0:de885a6da962 187
Dance 0:de885a6da962 188 /*
Dance 0:de885a6da962 189 * Get string manufacturer descriptor
Dance 0:de885a6da962 190 *
Dance 0:de885a6da962 191 * @returns pointer to the string manufacturer descriptor
Dance 0:de885a6da962 192 */
Dance 0:de885a6da962 193 virtual uint8_t * stringImanufacturerDesc();
Dance 0:de885a6da962 194
Dance 0:de885a6da962 195 /*
Dance 0:de885a6da962 196 * Get string product descriptor
Dance 0:de885a6da962 197 *
Dance 0:de885a6da962 198 * @returns pointer to the string product descriptor
Dance 0:de885a6da962 199 */
Dance 0:de885a6da962 200 virtual uint8_t * stringIproductDesc();
Dance 0:de885a6da962 201
Dance 0:de885a6da962 202 /*
Dance 0:de885a6da962 203 * Get string serial descriptor
Dance 0:de885a6da962 204 *
Dance 0:de885a6da962 205 * @returns pointer to the string serial descriptor
Dance 0:de885a6da962 206 */
Dance 0:de885a6da962 207 virtual uint8_t * stringIserialDesc();
Dance 0:de885a6da962 208
Dance 0:de885a6da962 209 /*
Dance 0:de885a6da962 210 * Get string configuration descriptor
Dance 0:de885a6da962 211 *
Dance 0:de885a6da962 212 * @returns pointer to the string configuration descriptor
Dance 0:de885a6da962 213 */
Dance 0:de885a6da962 214 virtual uint8_t * stringIConfigurationDesc();
Dance 0:de885a6da962 215
Dance 0:de885a6da962 216 /*
Dance 0:de885a6da962 217 * Get string interface descriptor
Dance 0:de885a6da962 218 *
Dance 0:de885a6da962 219 * @returns pointer to the string interface descriptor
Dance 0:de885a6da962 220 */
Dance 0:de885a6da962 221 virtual uint8_t * stringIinterfaceDesc();
Dance 0:de885a6da962 222
Dance 0:de885a6da962 223 /*
Dance 0:de885a6da962 224 * Get the length of the report descriptor
Dance 0:de885a6da962 225 *
Dance 0:de885a6da962 226 * @returns length of the report descriptor
Dance 0:de885a6da962 227 */
Dance 0:de885a6da962 228 virtual uint16_t reportDescLength() { return 0; };
Dance 0:de885a6da962 229
Dance 0:de885a6da962 230
Dance 0:de885a6da962 231
Dance 0:de885a6da962 232 protected:
Dance 0:de885a6da962 233 virtual void busReset(void);
Dance 0:de885a6da962 234 virtual void EP0setupCallback(void);
Dance 0:de885a6da962 235 virtual void EP0out(void);
Dance 0:de885a6da962 236 virtual void EP0in(void);
Dance 0:de885a6da962 237 virtual void connectStateChanged(unsigned int connected);
Dance 0:de885a6da962 238 virtual void suspendStateChanged(unsigned int suspended);
Dance 0:de885a6da962 239 uint8_t * findDescriptor(uint8_t descriptorType);
Dance 0:de885a6da962 240 CONTROL_TRANSFER * getTransferPtr(void);
Dance 0:de885a6da962 241
Dance 0:de885a6da962 242 uint16_t VENDOR_ID;
Dance 0:de885a6da962 243 uint16_t PRODUCT_ID;
Dance 0:de885a6da962 244 uint16_t PRODUCT_RELEASE;
Dance 0:de885a6da962 245
Dance 0:de885a6da962 246 private:
Dance 0:de885a6da962 247 bool addRateFeedbackEndpoint(uint8_t endpoint, uint32_t maxPacket);
Dance 0:de885a6da962 248 bool requestGetDescriptor(void);
Dance 0:de885a6da962 249 bool controlOut(void);
Dance 0:de885a6da962 250 bool controlIn(void);
Dance 0:de885a6da962 251 bool requestSetAddress(void);
Dance 0:de885a6da962 252 bool requestSetConfiguration(void);
Dance 0:de885a6da962 253 bool requestSetFeature(void);
Dance 0:de885a6da962 254 bool requestClearFeature(void);
Dance 0:de885a6da962 255 bool requestGetStatus(void);
Dance 0:de885a6da962 256 bool requestSetup(void);
Dance 0:de885a6da962 257 bool controlSetup(void);
Dance 0:de885a6da962 258 void decodeSetupPacket(uint8_t *data, SETUP_PACKET *packet);
Dance 0:de885a6da962 259 bool requestGetConfiguration(void);
Dance 0:de885a6da962 260 bool requestGetInterface(void);
Dance 0:de885a6da962 261 bool requestSetInterface(void);
Dance 0:de885a6da962 262
Dance 0:de885a6da962 263 CONTROL_TRANSFER transfer;
Dance 0:de885a6da962 264 USB_DEVICE device;
Dance 0:de885a6da962 265
Dance 0:de885a6da962 266 uint16_t currentInterface;
Dance 0:de885a6da962 267 uint8_t currentAlternate;
Dance 0:de885a6da962 268 };
Dance 0:de885a6da962 269
Dance 0:de885a6da962 270
Dance 0:de885a6da962 271 #endif