GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
こんにちは、たろサです。
秋月電子さんで売っているDS18B20をGR-CITRUSにつなげたいと思っています。
とりあえず、割り込みのプログラムから始めてみようと思いまして、以下のようなコードを書いてみました・・・。 割り込みから勉強を始める必要はないのかもしれませんが・・・。
/* GR-CITRUS Sketch Template V2.20 */#include <Arduino.h>#include <iodefine_gcc63n.h>#include <user_interrupt.h>#define WIRE_PORT PORT4.PODR.BIT.B3 //PORT4-3 IO17// TMR0_CMIA0extern "C" void INT_Excep_TMR0_CMIA0(void) __ATTRIBUTE_INTERRUPT;uint8_t Status = 0;void Excep_TMR0_CMIA0(void){ WIRE_PORT = Status; Status = 1 - Status;}void TMR16bitSetup(){ //uint16_t TMR01usec = 10000; // 10000us割り込み uint16_t TMR01usec = 15; // 15us割り込み MSTP(TMR0) = 0; // TMR01 有効化 TMR1.TCCR.BYTE = 0; // TMR1 クロック入力を禁止 TMR0.TCCR.BIT.CSS = 0b11; // TMR0 TMR1.TCNTのオーバフロー信号でカウント TMR01.TCNT = 0; // タイマカウンタを0に初期化 TMR0.TCR.BIT.CCLR = 0b01; // コンペアマッチAによりクリア TMR0.TCR.BIT.CMIEA = 1; // コンペアマッチAによる割り込み要求(CMIAn)を許可 IEN(TMR0, CMIA0) = 1; // CMIA0を許可 IPR(TMR0, CMIA0) = 1; // 割り込みレベル1 TMR01.TCORA = TMR01usec * (uint16_t)(48000000 / 8 / 1000000) - 1;// TMR1.TCCR.BYTE = 0b01010; // TMR1 分周クロックPCLK/8}void setup(){ Serial.begin(115200); //仮想USBシリアル pinMode(17, OUTPUT); TMR16bitSetup(); //割り込みスタート TMR1.TCCR.BYTE = 0b01010; // TMR1 分周クロックPCLK/8}void loop(){ delay(1000);}
makeは通るみたいです。実行して17ピンの波形を見てはいないのですが、interrupt_handlers.cに気になるコメントがありまして、
/** * MOD BW 12/11/13 : Moved to Servo.cpp. */// TMR0_CMIA0//void INT_Excep_TMR0_CMIA0(void){ }
と書かれています。
ただ、Servo.cppを見ても、TMR0_CMIA0は使っていないように思います。
質問です。「TMR0_CMIA0は使わない方がいいでしょうか?」
また、TMR0とTMR1でカスケードにしていますが、TMR1だけで割り込みタイマーを動かせばいいとは思っています。以前、カスケードにする方法を教えてもらったので、そのコピペでとりあえず、試してます。カスケードにしない場合も勉強してみます。もし、時間のある方がいらっしゃれば、教えてください。
根本的な質問です。「1wireのDS18B20を接続して動かしているソースのサンプルとか、どこかにありますでしょうか?」
また、わざわざ割り込みを使わなくても、この方法でできるのでは?という助言などをもらえるとありがたいです。
よろしくお願いいたします。