TimerOne ライブラリは 86Duino Coding 105 から入手でき、Arduino TimerOne ライブラリの API を提供し、86Duino の 32 ビット ハードウェア タイマーにアクセスします。
ライブラリは、次のように異なるハードウェア タイマーを操作するための 2 つのオブジェクト — Timer1 and TimerRTC — を提供します。
Timer1
このオブジェクトには、86Duino CPU に内蔵された 32 ビット高精度内部タイマーを設定するためのルーチン群が含まれています。このタイマーは、様々な機能を実現するために様々な方法で設定できます。PWM 周期または周波数を迅速かつ簡単に設定できるほか、タイマー割り込み処理などの機能も備えています。
Servo ライブラリと Servo86 ライブラリも同じ内部タイマーを使用するため、Timer1 と Servo ライブラリ、および Servo86 ライブラリを同時に使用しないでください。
— ドキュメント —
最も重要なルーチンの簡単な説明
initialize(period)
他のメソッドを使用するには、まずこのメソッドを呼び出す必要があります。オプションでタイマーの周期(マイクロ秒単位)を指定できます。デフォルトでは1秒に設定されています。setPeriod(period)
周期をマイクロ秒単位で設定します。このライブラリがサポートする最小周期または最高周波数は1マイクロ秒(1MHz)です。最大周期は21474836マイクロ秒(約21.47秒)です。周期を設定すると、接続された割り込みとPWM出力の周波数が同時に変更されることに注意してください。pwm(pin, duty, period)
指定されたピンにPWM波形を生成します。PWMピンの中から出力ピンを選択する必要があり、それ以外のものは無視されることに注意してください。例えば、86Duino Zeroでは、これらはデジタルピン3、5、6、9、10、11、13です。periodパラメータ(マイクロ秒単位)は必須ではありませんが、必要に応じて設定することで、setPeriod(period)で設定された周期を変更できます。attachInterrupt(function, period)
指定された関数をマイクロ秒単位で指定された間隔で呼び出します。あまりに複雑な割り込みを高頻度で実行しようとすると、CPUがメインループに入らず、プログラムが「ロックアップ」する可能性があります。periodパラメータ(マイクロ秒単位)は必須ではありませんが、必要に応じて設定することで、setPeriod(period)で設定された周期を変更できます。setPwmDuty(pin, duty)
以前に pwm() を呼び出して既に設定してある場合に、特定のピンの pwm デューティを設定するための高速ショートカット。detachInterrupt()
接続されている割り込みを無効にします。disablePwm(pin)
指定されたピンの PWM をオフにして、そのピンを他の用途に使用できるようにします。read()
最後のロールオーバー以降の時間をマイクロ秒単位で読み取ります。
— 例 —
9番ピンに50%のデューティサイクルでPWM出力を設定し、0.5秒ごとにデジタルピン10を切り替える割り込みを添付します。
/*
* Timer1 library example
* June 2008 | jesse dot tane at gmail dot com
*/
#include "TimerOne.h"
void setup()
{
pinMode(10, OUTPUT);
Timer1.initialize(500000); // initialize timer1, and set a 1/2 second period
Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
}
void callback()
{
digitalWrite(10, digitalRead(10) ^ 1);
}
void loop()
{
// your program here...
}— Timer1 を使用するその他のスケッチ/スニペット —
Arduino チュートリアル からの例
- DirectDriveLEDMatrix
- DirectDrive88884Digit7SegmentDisplay
- ReadReceiver
- ACPhaseControl
- Suzuki V-Strom Motorcycle display
TimerRTC
このオブジェクトには、86Duino CPU の RTC タイマーの割り込み機能を利用するためのルーチンのコレクションが含まれています。Timer1 とは異なり、タイマー割り込み処理のみを提供し、PWM 機能を提供しません。TimerRTC の精度は Timer1 より低くなりますが、別のタイマーを使用しているため、TimerRTC と サーボライブラリとの間に競合はありません。
一方、Servo86 ライブラリは依然として RTC タイマーを採用しているため、TimerRTC と Servo86 ライブラリを同時に使用しないでください。
— ドキュメント —
最も重要なルーチンの簡単な説明
initialize(period)
他のメソッドを使用するには、まずこのメソッドを呼び出す必要があります。オプションでRTCタイマーの周期(マイクロ秒単位)を指定できます。デフォルトでは0.5秒に設定されています。setPeriod(period)
周期をマイクロ秒単位で設定します。最大周期は500000マイクロ秒、つまり約0.5秒です。RTCのティックあたりの時間は約30.5マイクロ秒で、1マイクロ秒よりも大きいため、ライブラリは実際には指定された周期ではなく、おおよその周期を設定します。また、1マイクロ秒の周期を設定した場合でも、実現可能な最小周期は122マイクロ秒です。attachInterrupt(function, period)
指定された関数をマイクロ秒単位で指定された間隔で呼び出します。あまりに複雑な割り込みを高頻度で実行しようとすると、CPUがメインループに入らず、プログラムが「ロックアップ」する可能性があります。periodパラメータ(マイクロ秒単位)は必須ではありませんが、必要に応じて設定することで、setPeriod(period)で設定された周期を変更できます。detachInterrupt()
接続されている割り込みを無効にします。
— 例 —
デジタルピン10を0.5秒ごとに切り替えて割り込みをかける
#include "TimerOne.h"
void setup()
{
pinMode(10, OUTPUT);
TimerRTC.initialize(500000); // initialize timer1, and set a 1/2 second period
TimerRTC.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
}
void callback()
{
digitalWrite(10, digitalRead(10) ^ 1);
}
void loop()
{
// your program here...
}ライブラリリファレンスホーム
86Duinoリファレンスのテキストは、Arduinoリファレンスを改変したもので、Creative Commons Attribution-ShareAlike 3.0ライセンスに基づいてライセンスされています。リファレンス内のコードサンプルはパブリックドメインとして公開されています。