Changes between Initial Version and Version 1 of MAX6675Sketch


Ignore:
Timestamp:
Jul 26, 2009 9:34:36 PM (15 years ago)
Author:
sgk
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MAX6675Sketch

    v1 v1  
     1= MAX6675 K型熱電対温度センサのスケッチ =
     2
     3 * [wiki:MAX6675 キットについてはこちら]
     4 * [wiki:MAX6675Instruction 作り方の説明]
     5 * [http://www.switch-science.com/products/detail.php?product_id=146 キットとして販売しています。]
     6
     7どんなスケッチ(ソフトウェア)で使うのかを説明します。
     8
     9すでにモジュールが完成して、Arduino Duemilanoveのデジタル8番~13番の位置に差し込んであるものとします。
     10
     11== 手っ取り早い方法 ==
     12
     13このページの添付ファイル「MAX6675.zip」をダウンロードして、展開します。
     14展開してできたフォルダを、Arduinoのスケッチブックのフォルダに移動します。
     15スケッチブックのフォルダは、ウィンドウズでは標準は「マイドキュメント」(XPの場合)または「ドキュメント」(Vistaの場合)の中にある、「Arduino」というフォルダです。
     16
     17Arduino統合環境を起動して、「ファイル」メニューの「スケッチブック」から「MAX6675」を探して開いてください。
     18
     19あとは、普通にArduinoに書き込んで実行します。
     20「シリアルモニタ」を有効にすると、定期的に温度が表示されます。
     21「-1000.00」と表示された場合は、熱電対がきちんとつながっていません。
     22また、モジュールが壊れている場合も同様の表示になります。
     23
     24スケッチの先頭に、以下の定義があります。
     25{{{
     26#!c
     27#define VCC  8
     28#define GND  9
     29#define SLAVE  10
     30}}}
     31モジュールをデジタルの8番~13番に直結しない場合は、これらの定義を変更してください。
     32
     33VCCおよびGNDの定義は、デジタルの8番および9番からモジュールに電源供給を行うためです。
     34こんなずるをしないで、ちゃんと電源に接続する場合は、この2行を削除してください。
     35
     36SLAVEの定義は、SPIで言うところのスレーブセレクトにデジタルの何番を使うかを決めています。
     37
     38== 手っ取り早くない方法 ==
     39
     40慣れている方なら、こっちの方が手っ取り早いかもしれません。
     41
     42 * 適当な名前でスケッチを新規作成します。
     43 * 下記の「MAX6675.pde」のソースをコピーして、先ほど作成したスケッチのウィンドウに貼り付けます。
     44 * ウィンドウの上部右端の「→」のアイコンをクリックするとメニューが現れます。
     45 * このメニューから「新規タブ」をクリック。
     46 * 画面下部でファイル名を聞かれます。「SPI.cpp」と入力します。
     47 * 現れたタブに、下記の「SPI.cpp」の内容をコピーペーストします。
     48 * 同様に「SPI.h」のタブを作り、「SPI.h」の内容を貼り付けます。
     49
     50=== MAX6675.pde ===
     51{{{
     52#!c
     53#include "SPI.h"
     54
     55#define VCC  8
     56#define GND  9
     57#define SLAVE  10
     58
     59void
     60setup()
     61{
     62#ifdef GND
     63  pinMode(GND, OUTPUT);
     64  digitalWrite(GND, LOW);
     65#endif
     66#ifdef VCC
     67  pinMode(VCC, OUTPUT);
     68  digitalWrite(VCC, HIGH);
     69#endif
     70
     71  Serial.begin(9600);
     72  SPI_Master.begin(SLAVE);
     73}
     74
     75void
     76loop()
     77{
     78  int value;
     79
     80  delay(500);
     81  SPI_Master.enable(SLAVE);
     82  value = SPI_Master.read() << 8;
     83  value |= SPI_Master.read();
     84  SPI_Master.disable();
     85 
     86  if ((value & 0x0004) != 0)
     87    Serial.println("Error");
     88  else
     89    Serial.println((value >> 3) * 0.25);
     90}
     91}}}
     92
     93=== SPI.cpp ===
     94{{{
     95#!c
     96#include "SPI.h"
     97
     98boolean SPI_Master_Class::initialized_ = false;
     99int SPI_Master_Class::enabled_ = -1;
     100
     101void
     102SPI_Master_Class::begin(int slaveselecter) {
     103  if (!initialized_) {
     104    initialized_ = true;
     105    enabled_ = -1;
     106    pinMode(SS, OUTPUT);  // Must be set as OUTPUT before SPE is asserted.
     107    pinMode(MOSI, OUTPUT);
     108    pinMode(MISO, INPUT);
     109    digitalWrite(MISO, HIGH);  // Pull-up
     110    pinMode(SCK, OUTPUT);
     111    SPCR = (1<<SPE)|(1<<MSTR);  // SPE: SPI Enable; MSTR: Master
     112    byte garbage;
     113    garbage = SPSR;
     114    garbage = SPDR;
     115  }
     116
     117  if (slaveselecter != SS)
     118    pinMode(slaveselecter, OUTPUT);
     119  digitalWrite(slaveselecter, HIGH);  // Disable
     120}
     121
     122void
     123SPI_Master_Class::enable(int slaveselecter) {
     124  disable();
     125  digitalWrite(slaveselecter, LOW);
     126  enabled_ = slaveselecter;
     127}
     128
     129void
     130SPI_Master_Class::disable() {
     131  if (enabled_ >= 0) {
     132    digitalWrite(enabled_, HIGH);
     133    enabled_ = -1;
     134  }
     135}
     136
     137byte
     138SPI_Master_Class::write_and_read(byte data) const {
     139  SPDR = data;
     140  while (!(SPSR & (1<<SPIF)))
     141    ;
     142  return SPDR;
     143}
     144
     145void
     146SPI_Master_Class::write(byte data) const {
     147  write_and_read(data);
     148}
     149
     150byte
     151SPI_Master_Class::read() const {
     152  return write_and_read(0x00);
     153}
     154
     155SPI_Master_Class SPI_Master;
     156}}}
     157
     158=== SPI.h ===
     159{{{
     160#!c
     161#ifndef __SPI_H__
     162#define __SPI_H__
     163
     164#include "WProgram.h"
     165
     166class SPI_Master_Class {
     167public:
     168  static void begin(int slaveselecter);
     169  void enable(int slaveselecter);
     170  void disable();
     171  byte write_and_read(byte data) const;
     172  void write(byte data) const;
     173  byte read() const;
     174
     175private:
     176  static boolean initialized_;
     177  static const int SS = 10;
     178  static const int MOSI = 11;
     179  static const int MISO = 12;
     180  static const int SCK = 13;
     181  static int enabled_;
     182};
     183
     184extern SPI_Master_Class SPI_Master;
     185
     186#endif //__SPI_H__
     187}}}