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 #include "stdint.h"
Dance 0:de885a6da962 20 #include "USBMIDI.h"
Dance 0:de885a6da962 21
Dance 0:de885a6da962 22
Dance 0:de885a6da962 23 USBMIDI::USBMIDI(uint16_t vendor_id, uint16_t product_id, uint16_t product_release): USBDevice(vendor_id, product_id, product_release) {
Dance 0:de885a6da962 24 midi_evt = NULL;
Dance 0:de885a6da962 25 USBDevice::connect();
Dance 0:de885a6da962 26 }
Dance 0:de885a6da962 27
Dance 0:de885a6da962 28 void USBMIDI::write(MIDIMessage m) {
Dance 0:de885a6da962 29 USBDevice::write(EPBULK_IN, m.data, 4, MAX_PACKET_SIZE_EPBULK);
Dance 0:de885a6da962 30 }
Dance 0:de885a6da962 31
Dance 0:de885a6da962 32
Dance 0:de885a6da962 33 void USBMIDI::attach(void (*fptr)(MIDIMessage)) {
Dance 0:de885a6da962 34 midi_evt = fptr;
Dance 0:de885a6da962 35 }
Dance 0:de885a6da962 36
Dance 0:de885a6da962 37
Dance 0:de885a6da962 38 bool USBMIDI::EP2_OUT_callback() {
Dance 0:de885a6da962 39 uint8_t buf[64];
Dance 0:de885a6da962 40 uint32_t len;
Dance 0:de885a6da962 41 readEP(EPBULK_OUT, buf, &len, 64);
Dance 0:de885a6da962 42
Dance 0:de885a6da962 43 if (midi_evt != NULL) {
Dance 0:de885a6da962 44 for (uint32_t i=0; i<len; i+=4) {
Dance 0:de885a6da962 45 midi_evt(MIDIMessage(buf+i));
Dance 0:de885a6da962 46 }
Dance 0:de885a6da962 47 }
Dance 0:de885a6da962 48
Dance 0:de885a6da962 49 // We reactivate the endpoint to receive next characters
Dance 0:de885a6da962 50 readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
Dance 0:de885a6da962 51 return true;
Dance 0:de885a6da962 52 }
Dance 0:de885a6da962 53
Dance 0:de885a6da962 54
Dance 0:de885a6da962 55
Dance 0:de885a6da962 56 // Called in ISR context
Dance 0:de885a6da962 57 // Set configuration. Return false if the
Dance 0:de885a6da962 58 // configuration is not supported.
Dance 0:de885a6da962 59 bool USBMIDI::USBCallback_setConfiguration(uint8_t configuration) {
Dance 0:de885a6da962 60 if (configuration != DEFAULT_CONFIGURATION) {
Dance 0:de885a6da962 61 return false;
Dance 0:de885a6da962 62 }
Dance 0:de885a6da962 63
Dance 0:de885a6da962 64 // Configure endpoints > 0
Dance 0:de885a6da962 65 addEndpoint(EPBULK_IN, MAX_PACKET_SIZE_EPBULK);
Dance 0:de885a6da962 66 addEndpoint(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
Dance 0:de885a6da962 67
Dance 0:de885a6da962 68 // We activate the endpoint to be able to receive data
Dance 0:de885a6da962 69 readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
Dance 0:de885a6da962 70 return true;
Dance 0:de885a6da962 71 }
Dance 0:de885a6da962 72
Dance 0:de885a6da962 73
Dance 0:de885a6da962 74 uint8_t * USBMIDI::stringIinterfaceDesc() {
Dance 0:de885a6da962 75 static uint8_t stringIinterfaceDescriptor[] = {
Dance 0:de885a6da962 76 0x0c, //bLength
Dance 0:de885a6da962 77 STRING_DESCRIPTOR, //bDescriptorType 0x03
Dance 0:de885a6da962 78 'A',0,'u',0,'d',0,'i',0,'o',0 //bString iInterface - Audio
Dance 0:de885a6da962 79 };
Dance 0:de885a6da962 80 return stringIinterfaceDescriptor;
Dance 0:de885a6da962 81 }
Dance 0:de885a6da962 82
Dance 0:de885a6da962 83 uint8_t * USBMIDI::stringIproductDesc() {
Dance 0:de885a6da962 84 static uint8_t stringIproductDescriptor[] = {
Dance 0:de885a6da962 85 0x16, //bLength
Dance 0:de885a6da962 86 STRING_DESCRIPTOR, //bDescriptorType 0x03
Dance 0:de885a6da962 87 'M',0,'b',0,'e',0,'d',0,' ',0,'A',0,'u',0,'d',0,'i',0,'o',0 //bString iProduct - Mbed Audio
Dance 0:de885a6da962 88 };
Dance 0:de885a6da962 89 return stringIproductDescriptor;
Dance 0:de885a6da962 90 }
Dance 0:de885a6da962 91
Dance 0:de885a6da962 92
Dance 0:de885a6da962 93 uint8_t * USBMIDI::configurationDesc() {
Dance 0:de885a6da962 94 static uint8_t configDescriptor[] = {
Dance 0:de885a6da962 95 // configuration descriptor
Dance 0:de885a6da962 96 0x09, 0x02, 0x65, 0x00, 0x02, 0x01, 0x00, 0xc0, 0x50,
Dance 0:de885a6da962 97
Dance 0:de885a6da962 98 // The Audio Interface Collection
Dance 0:de885a6da962 99 0x09, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, // Standard AC Interface Descriptor
Dance 0:de885a6da962 100 0x09, 0x24, 0x01, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01, // Class-specific AC Interface Descriptor
Dance 0:de885a6da962 101 0x09, 0x04, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, // MIDIStreaming Interface Descriptors
Dance 0:de885a6da962 102 0x07, 0x24, 0x01, 0x00, 0x01, 0x41, 0x00, // Class-Specific MS Interface Header Descriptor
Dance 0:de885a6da962 103
Dance 0:de885a6da962 104 // MIDI IN JACKS
Dance 0:de885a6da962 105 0x06, 0x24, 0x02, 0x01, 0x01, 0x00,
Dance 0:de885a6da962 106 0x06, 0x24, 0x02, 0x02, 0x02, 0x00,
Dance 0:de885a6da962 107
Dance 0:de885a6da962 108 // MIDI OUT JACKS
Dance 0:de885a6da962 109 0x09, 0x24, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x00,
Dance 0:de885a6da962 110 0x09, 0x24, 0x03, 0x02, 0x06, 0x01, 0x01, 0x01, 0x00,
Dance 0:de885a6da962 111
Dance 0:de885a6da962 112 // OUT endpoint descriptor
Dance 0:de885a6da962 113 0x09, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00,
Dance 0:de885a6da962 114 0x05, 0x25, 0x01, 0x01, 0x01,
Dance 0:de885a6da962 115
Dance 0:de885a6da962 116 // IN endpoint descriptor
Dance 0:de885a6da962 117 0x09, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00,
Dance 0:de885a6da962 118 0x05, 0x25, 0x01, 0x01, 0x03,
Dance 0:de885a6da962 119 };
Dance 0:de885a6da962 120 return configDescriptor;
Dance 0:de885a6da962 121 }