Skip to content

Commit

Permalink
0.1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
askn37 committed Jul 18, 2019
1 parent ab1de89 commit 3611e58
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 163 deletions.
76 changes: 7 additions & 69 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
// まとめて全部
#include <Arduino.h>
#include <Futilities.h>
/* 注意 SoftwareSerial.h とは共存できない */

// あるいは必要なヘッダファイルだけ
#include <adcomp.h> // AD比較変換
Expand All @@ -31,7 +30,6 @@
#include <hexdig.h> // 16進変換
#include <IntervalEvent.h> // インターバルイベントクラス
#include <memstat.h> // メモリ情報
#include <pcintvect.h> // ピン変化割込 /* 注意 SoftwareSerial.h とは共存できない */
```

# リファレンス
Expand All @@ -46,7 +44,7 @@
- [16進変換](#hexdigh)
- [インターバルイベントクラス](#IntervalEventh) (C++)
- [メモリ情報](#memstath)
- [ピン変化割込](#pcintvecth)
- ~~[ピン変化割込](#pcintvecth)~~ 0.1.5で[PCIntVect](https://github.com/askn37PCIntVect)ライブラリに機能分離

----

Expand Down Expand Up @@ -688,80 +686,20 @@ size_t freeSize = memFreeSize();

----

## pcintvect.h

ピン変化割込

依存性:

注意:
SoftwareSerial とは併用できない。

### void attachPCInterrupt (uint8\_t interruptPin, void (*userFunc)(void) = NULL)

指定のピンに対応する外部ピン変化割込を有効にし、
指定のユーザー定義ルーチンを割込ベクタに割り付ける。

通常の attachInterrupt() と違って、第1引数にはピン番号を直接記述する。
また割込種別は EDGE しかないため、第3引数はない。
第2引数の割込ベクタは同一ポートグループに属する各最大8本のピンで共有され、
個々のピンに個別に割り当てるものではないことに注意。

MCU休止状態の解除のように、割込発生の事実だけを利用して割込処理が不要であるなら、第2引数には NULLを指定する。

割込ベクタ(ポートグループ)は PCINT0からPCINT3の最大4つがあるが、
MCUの品種によってピン割付定義が異なる。
また Arduino の表向きのピン番号とも一致しない。

|MCU|PCINT0|PCINT1|PCINT2|PCINT3|品種|
|---|---|---|---|---|---|
|ATmega328P|8 9 10 11 12 13|A0 A1 A2 A3 A4 A5 (A6 A7)|0 1 2 3 4 5 6 7|---|UNO ProMini|
|ATmega32U4|8 9 10 11 (14 15 16 17)|---|---|---|Leonardo ProMicro|
|ATmega1284P|A0 A1 A2 A3 A4 A5 A6 A7|4 5 6 7 10 11 12 13|22 23 24 25 26 27 28 29|0 1 2 3 8 9 30 31|Boubino|

いくつかのピンは、attachInterrupt() での割込指定と独立して共存する。
あるいは HardwareSerial や SPI や I2C の割込とも独立して共存する。
つまりそれらの専用機能割込とは全く別に、干渉せずに使用できる。

例えば HardwareSerial は MCUが休止中は割込を発生しないが、
外部ピン変化割込は検出され、休止状態を解除させることができる。
両方を併用することで MCUを適切な省電力状態に置くことができる。
個々の割込でのピン状態(HIGH・LOW、あるいは立ち上がり・立ち下がり変化)はソフトウェアで判断しなければできないが、
休止状態解除目的に限ればそういった処理は省略可能である。

ポートグループ内のどのピンが割込発生要因になったかを判断するのは難しい。
だが異なるポートグループの単一のピンに限って使用するのであれば、
そのピンのHIGH・LOW変化だけを調べれば良いので単純であるし、
普通はそのようにして使うだろう。
SoftwareSerial はまさにそのようにして外部ピン変化割込を利用している。

### void detachPCInterrupt (uint8\_t interruptPin)

指定のピンに対応するPCINT割込を解除する。
対応するポートグループの割込ベクタも解除される。

同一ポートグループに複数の attachPCInterrupt() 割り付けをしていた場合、
重複管理は行っていないので、まだほかで使われているにもかかわらず、
ポートグループベクタそのものが消されてしまう。
つまり detachPCInterrupt() の多用を前提にするなら、重複管理を行うか、
元からポートグループが共有されないように割込用の物理ピン配線を熟考すべきだろう。
Arduino.h で外部ピン変化割込が標準実装されていないのは、この分かり難さによるだろう。

----

## 既知の不具合/制約/課題

- 主要な AVR 以外はテストされていない。
- 古い Arduino IDE には対応しない。1.8.5で動作確認。少なくとも C++11 は使えなければならない。
- 文中で繰り返し断っているが、pcintvect.h は SoftwareSerial.h と共存できない。
同様に PCInt Vecotr を排他的に使用するライブラリは使用できない。
- 英文マニュアルが未整備である。

## 改版履歴

- 0.1.4
- pcintvect を SoftwareSerial が先にインクルードされている場合は、無効化するように修正。
- pcintvect で PCINT4_vect も扱うように修正。
- 0.1.5
- pcintvect を別ライブラリに除外。

- ~~0.1.4~~
- ~~pcintvect を SoftwareSerial が先にインクルードされている場合は、無効化するように修正。~~
- ~~pcintvect で PCINT4_vect も扱うように修正。~~

- 0.1.3
- adcomp.h に getThermistor() を追加。
Expand Down
3 changes: 0 additions & 3 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@ getThermistor KEYWORD2
acpSetup KEYWORD2
acpAttachInterrupt KEYWORD2

attachPCInterrupt KEYWORD2
detachPCInterrupt KEYWORD2

digitalToggle KEYWORD2

dtoh KEYWORD2
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=Futilities
version=0.1.4
version=0.1.5
author=askn <askn37@users.noreply.github.com>
maintainer=Kazuhiko Sato/askn <askn37@users.noreply.github.com>
sentence=A semi futility utilities library toolbox for Arduino
Expand Down
1 change: 0 additions & 1 deletion src/Futilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#include "hexdig.h"
#include "IntervalEvent.h"
#include "memstat.h"
#include "pcintvect.h"

#endif

Expand Down
57 changes: 0 additions & 57 deletions src/pcintvect.cpp

This file was deleted.

32 changes: 0 additions & 32 deletions src/pcintvect.h

This file was deleted.

0 comments on commit 3611e58

Please sign in to comment.