Changes between Version 6 and Version 7 of MAX6675Sketch


Ignore:
Timestamp:
Dec 19, 2011 5:20:59 PM (12 years ago)
Author:
maris
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MAX6675Sketch

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