アトメル

Atmel 8 ビット AVR マイクロコントローラ、2/4/8K バイト インシステム プログラマブル フラッシュ付きチップ

 

特徴

  • 高性能、低消費電力の AVR® 8 ビット マイクロコントローラ
  • 高度なRISCアーキテクチャ
  • 120の強力な命令–ほとんどのシングルクロックサイクル実行
  • 32 x8汎用ワーキングレジスタ
  • 完全に静的な操作
  • 不揮発性プログラムとデータメモリ
  • 2/4 / 8Kバイトのインシステムプログラマブルプログラムメモリフラッシュ
  • 持久力: 10,000回の書き込み/消去サイクル
  • 128/256/512バイトのインシステムプログラマブルEEPROM
  • 持久力: 100,000回の書き込み/消去サイクル
  • 128/256/512バイトの内部SRAM
  • セルフプログラミングフラッシュプログラムとEEPROMデータセキュリティのためのプログラミングロック

周辺機能

  • プリスケーラと8つのPWMチャネルを備えたXNUMXビットタイマー/カウンター
  • 個別のプリスケーラを備えた8ビット高速タイマー/カウンター
  • 個別の出力比較レジスタを備えた2つの高周波PWM出力
  • プログラム可能なデッドタイムジェネレータ
  • USI –開始条件検出器を備えたユニバーサルシリアルインターフェース
  • 10ビットADC

4つのシングルエンドチャネル

プログラム可能なゲイン(2x、1x)を備えた20つの差動ADCチャネルペア

温度測定

個別のオンチップオシレータを備えたプログラム可能なウォッチドッグタイマー

オンチップアナログコンパレータ

特別なマイクロコントローラー機能

debugWIREオンチップデバッグシステム

SPIポートを介してシステム内でプログラム可能

外部および内部割り込みソース

低電力アイドル、ADCノイズリダクション、およびパワーダウンモード

強化されたパワーオンリセット回路

プログラム可能な電圧低下検出回路

内部校正済み発振器

I / Oとパッケージ

XNUMXつのプログラム可能なI / Oライン

8ピンPDIP、8ピンSOIC、20パッドQFN / MLF、および8ピンTSSOP(ATtiny45 / Vのみ)

営業巻tage
– ATtiny1.8V / 5.5V / 25Vの場合は45– 85V
– 2.7 –5.5V(ATtiny25 / 45/85の場合)

スピードグレード
– ATtiny25V / 45V / 85V:0 – 4 MHz @ 1.8 – 5.5V、0 – 10 MHz @ 2.7 – 5.5V
– ATtiny25 / 45/85:0 – 10 MHz @ 2.7 – 5.5V、0 – 20 MHz @ 4.5 – 5.5V

工業用温度範囲

低消費電力

アクティブモード:

1 MHz、1.8V:300 µA

パワーダウンモード:

ピン構成

ピン配置ATtiny25 / 45/85 構成

ピンの説明

VCC: 供給量tage.
GND: グランド。
ポート B (PB5:PB0): ポート B は、内部プルアップ抵抗 (ビットごとに選択) を備えた 6 ビットの双方向 I/O ポートです。 ポート B の出力バッファは、シンク能力とソース能力の両方が高い対称駆動特性を備えています。 入力として、プルアップ抵抗が有効になっている場合、外部で Low にプルされたポート B ピンは電流を供給します。 ポート B ピンは、クロックが動作していなくても、リセット条件がアクティブになるとトライステートになります。

ポートBは、リストされているATtiny25 / 45/85のさまざまな特別機能の機能も提供します。
ATtiny25では、ATtiny3との下位互換性をサポートするために、プログラム可能なI / OポートPB4およびPB2(ピン3および15)がATtiny15互換モードで交換されます。

RESET: リセット入力。 クロックが動作していなくても、リセット ピンが無効になっていない場合でも、最小パルス長よりも長くこのピンが Low レベルになると、リセットが生成されます。 最小パルス長は 表21-4 165ページ目。 より短いパルスは、リセットを生成することが保証されていません。

リセットピンは(弱い)I / Oピンとしても使用できます。

以上view

ATtiny25 / 45/85は、AVR拡張RISCアーキテクチャに基づく低電力CMOS8ビットマイクロコントローラです。 ATtiny25 / 45/85は、単一のクロックサイクルで強力な命令を実行することにより、MHzあたり1 MIPSに近いスループットを実現し、システム設計者が消費電力と処理速度を最適化できるようにします。

ブロック図 ブロック図

AVRコアは、豊富な命令セットと32の汎用作業レジスタを組み合わせたものです。 32個のレジスタはすべて算術論理演算装置(ALU)に直接接続されているため、XNUMXクロックサイクルで実行されるXNUMXつの命令でXNUMXつの独立したレジスタにアクセスできます。 結果として得られるアーキテクチャは、コード効率が高く、従来のCISCマイクロコントローラよりも最大XNUMX倍高速なスループットを実現します。

ATtiny25 / 45/85は、次の機能を提供します。2/ 4 / 8Kバイトのインシステムプログラマブルフラッシュ、128/256/512バイトのEEPROM、128/256/256バイトのSRAM、6つの汎用I / Oライン、32の汎用目的の作業レジスタ、比較モードを備えた8つの8ビットタイマー/カウンター、4つの10ビット高速タイマー/カウンター、ユニバーサルシリアルインターフェイス、内部および外部割り込み、XNUMXチャネル、XNUMXビットADC、内部を備えたプログラム可能なウォッチドッグタイマー発振器、およびXNUMXつのソフトウェアで選択可能な省電力モード。 アイドルモードでは、SRAM、タイマー/カウンター、ADC、アナログコンパレータ、および割り込みシステムが機能し続けている間、CPUが停止します。 パワーダウンモードはレジスタの内容を保存し、次の割り込みまたはハードウェアリセットまですべてのチップ機能を無効にします。 ADCノイズリダクションモードは、ADC変換中のスイッチングノイズを最小限に抑えるために、CPUとADCを除くすべてのI / Oモジュールを停止します。

このデバイスは、Atmelの高密度不揮発性メモリ技術を使用して製造されています。 オンチップISPフラッシュを使用すると、SPIシリアルインターフェイスを介して、従来の不揮発性メモリプログラマーによって、またはAVRコアで実行されているオンチップブートコードによって、プログラムメモリをインシステムで再プログラムできます。

ATtiny25 / 45/85 AVRは、Cコンパイラ、マクロアセンブラ、プログラムデバッガ/シミュレータ、評価キットを含むプログラムおよびシステム開発ツールの完全なスイートでサポートされています。

リソースについて

開発ツール、アプリケーションノート、およびデータシートの包括的なセットは、次のURLからダウンロードできます。 http://www.atmel.com/avr.

コード例ampレ

このドキュメントには、簡単なコードが含まれています。ampデバイスのさまざまな部分の使用方法を簡単に示すファイル。 これらのコード例amplesは、パーツ固有のヘッダーを想定しています file コンパイル前に含まれています。 すべてのCコンパイラベンダーがヘッダーにビット定義を含めているわけではないことに注意してください filesおよびCでの割り込み処理は、コンパイラに依存します。 詳細については、Cコンパイラのドキュメントを確認してください。

拡張I / OマップにあるI / Oレジスタの場合、「IN」、「OUT」、「SBIS」、「SBIC」、「CBI」、および「SBI」命令は、拡張Iへのアクセスを許可する命令に置き換える必要があります。 / O。 通常、これは「LDS」と「STS」を「SBRS」、「SBRC」、「SBR」、「CBR」と組み合わせたものを意味します。 すべてのAVRデバイスに拡張I / Oマップが含まれているわけではないことに注意してください。

静電容量式タッチセンサー

Atmel QTouch ライブラリは、Atmel AVR マイクロコントローラーのタッチ センシティブ インターフェイス用の使いやすいソリューションを提供します。 QTouch ライブラリには、QTouch® および QMatrix® 取得方法のサポートが含まれています。

タッチセンシングは、QTouchライブラリをリンクし、ライブラリのアプリケーションプログラミングインターフェイス(API)を使用してタッチチャネルとセンサーを定義することにより、任意のアプリケーションに簡単に追加できます。 次に、アプリケーションはAPIを呼び出してチャネル情報を取得し、タッチセンサーの状態を判別します。

QTouchライブラリは無料で、Atmelからダウンロードできます webサイト。 実装の詳細と詳細については、QTouchライブラリユーザーガイドを参照してください。これもAtmelから入手できます。 webサイト。

データ保持

信頼性認定の結果は、予測されるデータ保持の失敗率が、1°Cで20年間、または85°Cで100年間で25PPMをはるかに下回ることを示しています。

AVRCPUコア

導入

このセクションでは、AVRコアアーキテクチャ全般について説明します。 CPUコアの主な機能は、プログラムが正しく実行されるようにすることです。 したがって、CPUはメモリにアクセスし、計算を実行し、周辺機器を制御し、割り込みを処理できる必要があります。

建築オーバーview 建築

パフォーマンスと並列処理を最大化するために、AVRはハーバードアーキテクチャを使用します–プログラムとデータ用に別々のメモリとバスを備えています。 プログラムメモリ内の命令は、シングルレベルのパイプラインで実行されます。 XNUMXつの命令が実行されている間、次の命令はプログラムメモリからプリフェッチされます。 この概念により、すべてのクロックサイクルで命令を実行できます。 プログラムメモリは、インシステムで再プログラム可能なフラッシュメモリです。

高速アクセスレジスタ File 32 クロック サイクルのアクセス時間で 8 個の XNUMX ビット汎用ワーキング レジスタが含まれています。 これにより、XNUMX サイクルの算術論理演算ユニット (ALU) 操作が可能になります。 典型的な ALU 演算では、レジスタから XNUMX つのオペランドが出力されます。 File、操作が実行され、結果がレジスタに格納されます。 File–XNUMXクロックサイクルで。

32個のレジスタのうち16個は、データスペースアドレス指定用の16個のXNUMXビット間接アドレスレジスタポインタとして使用でき、効率的なアドレス計算を可能にします。 これらのアドレスポインタのXNUMXつは、フラッシュプログラムメモリ内のルックアップテーブルのアドレスポインタとしても使用できます。 これらの追加された機能レジスタは、このセクションで後述するXNUMXビットのX、Y、およびZレジスタです。

ALUは、レジスタ間または定数とレジスタ間の算術演算および論理演算をサポートします。 単一レジスタ操作は、ALUでも実行できます。 算術演算の後、ステータスレジスタは、演算の結果に関する情報を反映するように更新されます。

プログラムフローは、条件付きおよび無条件のジャンプおよび呼び出し命令によって提供され、アドレス空間全体に直接アドレス指定できます。 ほとんどのAVR命令は単一の16ビットワードフォーマットを持っていますが、32ビット命令もあります。

割り込みおよびサブルーチン呼び出し中、リターンアドレスのプログラムカウンター(PC)はスタックに格納されます。 スタックは一般的なデータSRAMに効果的に割り当てられるため、スタックサイズはSRAMの合計サイズとSRAMの使用量によってのみ制限されます。 すべてのユーザープログラムは、リセットルーチンでSPを初期化する必要があります(サブルーチンまたは割り込みが実行される前)。 スタックポインタ(SP)は、I / Oスペースで読み取り/書き込みアクセス可能です。 データSRAMは、AVRアーキテクチャでサポートされているXNUMXつの異なるアドレッシングモードを介して簡単にアクセスできます。

AVRアーキテクチャのメモリ空間はすべて線形で通常のメモリマップです。

フレキシブル割り込みモジュールの制御レジスタはI / Oスペースにあり、ステータスレジスタには追加のグローバル割り込みイネーブルビットがあります。 すべての割り込みには、割り込みベクタテーブルに個別の割り込みベクタがあります。 割り込みは、割り込みベクタの位置に応じて優先されます。 割り込みベクタアドレスが低いほど、優先度は高くなります。

I / Oメモリ空間には、制御レジスタ、SPI、およびその他のI / O機能としてのCPU周辺機能用の64個のアドレスが含まれています。 I / Oメモリには、直接アクセスすることも、レジスタの次のデータスペースの場所としてアクセスすることもできます。 File、0x20 –0x5F。

ALU –算術論理演算装置

高性能AVRALUは、32個の汎用作業レジスタすべてと直接接続して動作します。 単一のクロックサイクル内で、汎用レジスタ間またはレジスタとイミディエート間の算術演算が実行されます。 ALU演算は、算術関数、論理関数、およびビット関数のXNUMXつの主要なカテゴリに分類されます。 アーキテクチャの一部の実装では、符号付き/符号なし乗算と小数形式の両方をサポートする強力な乗算器も提供されます。 詳細な説明については、「命令セット」セクションを参照してください。

ステータスレジスタ

ステータスレジスタには、最後に実行された算術命令の結果に関する情報が含まれています。 この情報は、条件付き操作を実行するためにプログラムフローを変更するために使用できます。 ステータスレジスタは、命令セットリファレンスで指定されているように、すべてのALU操作の後に更新されることに注意してください。 これにより、多くの場合、専用の比較命令を使用する必要がなくなり、コードがより高速でコンパクトになります。

ステータスレジスタは、割り込みルーチンに入るときに自動的に保存されず、割り込みから戻るときに復元されません。 これはソフトウェアで処理する必要があります。

SREG –AVRステータスレジスタ

AVRステータスレジスタ– SREG –は次のように定義されています。

少し 7 6 5 4 3 2 1 0
0x3F I T H S V N Z C SREG
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット7– I:グローバル割り込みイネーブル

割り込みを有効にするには、グローバル割り込みイネーブルビットを設定する必要があります。 次に、個別の割り込みイネーブル制御が個別の制御レジスタで実行されます。 グローバル割り込みイネーブルレジスタがクリアされている場合、個々の割り込みイネーブル設定に関係なく、どの割り込みもイネーブルされません。 Iビットは、割り込みが発生した後にハードウェアによってクリアされ、後続の割り込みを有効にするためにRETI命令によって設定されます。 Iビットは、命令セットリファレンスで説明されているように、SEIおよびCLI命令を使用してアプリケーションで設定およびクリアすることもできます。

ビット6– T:ビットコピーストレージ

ビットコピー命令BLD(ビットLoaD)およびBST(ビットSTore)は、操作ビットのソースまたはデスティネーションとしてTビットを使用します。 レジスタ内のレジスタからのビット File BST命令によってTにコピーでき、Tのビットをレジスタのレジスタのビットにコピーできます。 File BLD命令による。

ビット5– H:ハーフキャリーフラグ

ハーフキャリーフラグHは、一部の算術演算でのハーフキャリーを示します。 ハーフキャリーはBCD演算で役立ちます。 詳細については、「命令セットの説明」を参照してください。

ビット 4 – S: 符号ビット、S = N ⊕ V

Sビットは常に排他的であるか、ネガティブフラグNとXNUMXの補数オーバーフローフラグVの間にあります。詳細については、「命令セットの説明」を参照してください。

ビット3– V:XNUMXの補数オーバーフローフラグ

XNUMXの補数オーバーフローフラグVは、XNUMXの補数演算をサポートします。 詳細については、「命令セットの説明」を参照してください。

ビット2– N:負のフラグ

負のフラグNは、算術演算または論理演算の負の結果を示します。 詳細については、「命令セットの説明」を参照してください。

ビット1-Z:ゼロフラグ

ゼロフラグZは、算術演算または論理演算の結果がゼロであることを示します。 詳細については、「命令セットの説明」を参照してください。

ビット0– C:キャリーフラグ

キャリーフラグCは、算術演算または論理演算のキャリーを示します。 詳細については、「命令セットの説明」を参照してください。

汎用レジスタ File

レジスター File AVR EnhancedRISC命令セット用に最適化されています。 必要なパフォーマンスと柔軟性を実現するために、次の入出力スキームがレジスタによってサポートされています。 File:

8つの8ビット出力オペランドとXNUMXつのXNUMXビット結果入力

8つの8ビット出力オペランドとXNUMXつのXNUMXビット結果入力

8つの16ビット出力オペランドとXNUMXつのXNUMXビット結果入力

16つの16ビット出力オペランドとXNUMXつのXNUMXビット結果入力

図4-2 は、CPU内の32個の汎用ワーキングレジスタの構造を示しています。 汎用

図に示すように 図4-2、各レジスタにはデータメモリアドレスも割り当てられ、ユーザーデータスペースの最初の32個の場所に直接マッピングされます。 SRAMロケーションとして物理的に実装されていませんが、X、Y、およびZポインタレジスタを設定してレジスタ内の任意のレジスタにインデックスを付けることができるため、このメモリ構成はレジスタへのアクセスに大きな柔軟性を提供します。 file.レジスタ上で動作するほとんどの命令 File すべてのレジスタに直接アクセスでき、それらのほとんどはシングルサイクル命令です。

Xレジスタ、Yレジスタ、およびZレジスタ

レジスタR26..R31には、汎用的な使用法にいくつかの追加機能があります。 これらのレジスタは、データスペースの間接アドレス指定用の16ビットアドレスポインタです。 XNUMXつの間接アドレスレジスタX、Y、およびZは、次のように定義されています。 図4-3.

登録する

さまざまなアドレッシングモードで、これらのアドレスレジスタは、固定変位、自動インクリメント、および自動デクリメントとして機能します(詳細については、命令セットリファレンスを参照してください)。

スタックポインタ

スタックは主に、一時データの格納、ローカル変数の格納、および割り込みとサブルーチン呼び出し後のリターンアドレスの格納に使用されます。 スタックポインタレジスタは、常にスタックの最上位を指します。 スタックは、より高いメモリ位置からより低いメモリ位置へと成長するように実装されていることに注意してください。 これは、StackPUSHコマンドがスタックポインタを減少させることを意味します。

スタックポインタは、サブルーチンスタックと割り込みスタックが配置されているデータSRAMスタック領域を指します。 データSRAMのこのスタックスペースは、サブルーチン呼び出しが実行される前、または割り込みが有効になる前に、プログラムによって定義される必要があります。 スタックポインタは、0x60より上を指すように設定する必要があります。 スタックポインタは、PUSH命令でデータがスタックにプッシュされるとXNUMXつデクリメントされ、サブルーチン呼び出しまたは割り込みでリターンアドレスがスタックにプッシュされるとXNUMXつデクリメントされます。 スタックポインタは、POP命令を使用してスタックからデータをポップするとXNUMXずつ増加し、サブルーチンRETから戻るか割り込みRETIから戻るとスタックからデータをポップするとXNUMXずつ増加します。

AVRスタックポインタは、I / O空間に8つのXNUMXビットレジスタとして実装されています。 実際に使用されるビット数は、実装によって異なります。 AVRアーキテクチャの一部の実装のデータスペースは非常に小さいため、SPLのみが必要であることに注意してください。 この場合、SPHレジスタは存在しません。

SPHおよびSPL—スタックポインタレジスタ

少し 15 14 13 12 11 10 9 8
0x3E SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 スポルト
0x3D SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
7 6 5 4 3 2 1 0
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド
初期値 ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド ラムンド

命令実行タイミング

このセクションでは、命令実行の一般的なアクセス タイミングの概念について説明します。 AVR CPU は、チップ用に選択されたクロック ソースから直接生成された CPU クロック clkCPU によって駆動されます。 内部クロック分周は使用されません。

図4.4

図4-4 は、ハーバードアーキテクチャと高速アクセスレジスタによって有効化された並列命令フェッチと命令実行を示しています。 File コンセプト。 これは、MHzあたり最大1 MIPSを取得するための基本的なパイプラインの概念であり、コストあたりの関数、クロックあたりの関数、およびパワーユニットあたりの関数に対応する独自の結果が得られます。

図 4-5。 シングル サイクル ALU 操作

図4.5

リセットと割り込み処理

AVRはいくつかの異なる割り込みソースを提供します。 これらの割り込みと個別のリセットベクトルはそれぞれ、プログラムメモリ空間に個別のプログラムベクトルを持っています。 すべての割り込みには個別のイネーブルビットが割り当てられ、割り込みを有効にするには、ステータスレジスタのグローバル割り込みイネーブルビットと一緒にロジックXNUMXに書き込む必要があります。

プログラムメモリ空間の最下位アドレスは、デフォルトでリセットおよび割り込みベクタとして定義されています。 ベクトルの完全なリストをに示します。 48ページの「割り込み」。 このリストは、さまざまな割り込みの優先度レベルも決定します。 アドレスが低いほど、優先度が高くなります。 RESETの優先度が最も高く、次はINT0 –外部割り込み要求0です。

割り込みが発生すると、グローバル割り込みイネーブルIビットがクリアされ、すべての割り込みが無効になります。 ユーザーソフトウェアは、ロジックXNUMXをIビットに書き込んで、ネストされた割り込みを有効にすることができます。 有効なすべての割り込みは、現在の割り込みルーチンに割り込むことができます。 Iビットは、割り込みからの復帰命令– RETI –が実行されると自動的に設定されます。

割り込みには基本的にXNUMX種類あります。 最初のタイプは、割り込みフラグを設定するイベントによってトリガーされます。 これらの割り込みの場合、割り込み処理ルーチンを実行するために、プログラムカウンタが実際の割り込みベクタにベクタリングされ、ハードウェアが対応する割り込みフラグをクリアします。 割り込みフラグは、クリアするフラグビット位置にロジックXNUMXを書き込むことによってもクリアできます。 対応する割り込みイネーブルビットがクリアされている間に割り込み条件が発生した場合、割り込みフラグが設定され、割り込みが有効になるか、ソフトウェアによってフラグがクリアされるまで記憶されます。 同様に、グローバル割り込みイネーブルビットがクリアされている間にXNUMXつ以上の割り込み条件が発生すると、対応する割り込みフラグが設定され、グローバル割り込みイネーブルビットがセットされるまで記憶され、優先順位に従って実行されます。

XNUMX番目のタイプの割り込みは、割り込み条件が存在する限りトリガーされます。 これらの割り込みには、必ずしも割り込みフラグがありません。 割り込みが有効になる前に割り込み条件が消えると、割り込みはトリガーされません。

AVRが割り込みを終了すると、保留中の割り込みが処理される前に、常にメインプログラムに戻り、もうXNUMXつの命令を実行します。

ステータスレジスタは、割り込みルーチンに入ったときに自動的に保存されたり、割り込みルーチンから戻ったときに復元されたりしないことに注意してください。 これはソフトウェアで処理する必要があります。

CLI命令を使用して割り込みを無効にすると、割り込みはすぐに無効になります。 CLI命令と同時に発生した場合でも、CLI命令後に割り込みは実行されません。 次の例ampleは、これを使用して、時限EEPROM書き込みシーケンス中の割り込みを回避する方法を示しています。

アセンブリコード例ample
r16 では、SREG ; SREG値を格納

クリ; 時限シーケンス中の割り込みを無効にする

sbi EECR、EEMPE ; EEPROM書き込み開始

sbi EECR、EEPE

SREG、r16を出てください。 SREG 値の復元 (I ビット)

Cコード例ample
char cSREG;

cSREG = SREG; /* SREG 値を格納 */

/* 時限シーケンス中の割り込みを無効にする */

_CLI();

EECR |= (1<

EECR | =(1 <

SREG = cSREG; /* SREG 値 (I ビット) を復元します */

SEI命令を使用して割り込みを有効にすると、この例に示すように、SEIに続く命令は、保留中の割り込みの前に実行されます。ampル。

アセンブリコード例ample
せい; グローバル割り込みイネーブルを設定

寝る; スリープに入り、割り込みを待ちます

; 注:保留中の前にスリープ状態になります

; 割り込み

Cコード例ample
_SEI(); /* グローバル割り込みイネーブルを設定 */

_寝る(); /* スリープに入り、割り込みを待ちます */

/ *注:保留中の割り込みの前にスリープ状態になります* /

割り込み応答時間

有効なすべてのAVR割り込みの割り込み実行応答は、最小XNUMXクロックサイクルです。 XNUMXクロックサイクル後、実際の割り込み処理ルーチンのプログラムベクトルアドレスが実行されます。 このXNUMXクロックサイクルの期間中に、プログラムカウンターがスタックにプッシュされます。 ベクトルは通常、割り込みルーチンへのジャンプであり、このジャンプにはXNUMXクロックサイクルかかります。 マルチサイクル命令の実行中に割り込みが発生した場合、この命令は割り込みが処理される前に完了します。 MCUがスリープモードのときに割り込みが発生した場合、割り込み実行応答時間はXNUMXクロックサイクル増加します。 この増加は、選択したスリープモードからの起動時間に追加されます。

割り込み処理ルーチンからの復帰には、XNUMXクロックサイクルかかります。 これらのXNUMXクロックサイクル中に、プログラムカウンター(XNUMXバイト)がスタックからポップバックされ、スタックポインターがXNUMXインクリメントされ、SREGのIビットが設定されます。

AVRメモリーズ

このセクションでは、ATtiny25 / 45/85のさまざまなメモリについて説明します。 AVRアーキテクチャには、データメモリとプログラムメモリスペースの25つのメインメモリスペースがあります。 さらに、ATtiny45 / 85/XNUMXは、データストレージ用のEEPROMメモリを備えています。 XNUMXつのメモリ空間はすべて線形で規則的です。

システム内の再プログラム可能なフラッシュプログラムメモリ

ATtiny25 / 45/85には、プログラムストレージ用の2​​/4 / 8Kバイトのオンチップインシステム再プログラム可能フラッシュメモリが含まれています。 すべてのAVR命令は16ビットまたは32ビット幅であるため、フラッシュは1024/2048/4096 x16として編成されます。

フラッシュメモリには、少なくとも10,000回の書き込み/消去サイクルの耐久性があります。 ATtiny25 / 45/85プログラムカウンター(PC)は10/11/12ビット幅であるため、1024/2048/4096プログラムメモリの場所に対応します。 「メモリプログラム- 147ページの「ming」 SPIピンを使用したフラッシュデータのシリアルダウンロードに関する詳細な説明が含まれています。

定数テーブルは、プログラムメモリアドレス空間全体に割り当てることができます(LPM –プログラムメモリのロード命令の説明を参照)。

図 5-1。 プログラムメモリマップ メモリマップ

SRAMデータメモリ

図5-2 は、ATtiny25 / 45 / 85SRAMメモリがどのように構成されているかを示しています。

下位の224/352/607データメモリ位置は、両方のレジスタをアドレス指定します File、I / Oメモリと内部データSRAM。 最初の32の場所はレジスターに対応しています File、次の64の場所は標準I / Oメモリであり、最後の128/256/512の場所は内部データSRAMをアドレス指定します。

データメモリのXNUMXつの異なるアドレッシングモードは、直接、変位を伴う間接、間接、プリデクリメントを伴う間接、およびポストインクリメントを伴う間接です。 レジスターで File、レジスタR26〜R31は、間接アドレス指定ポインタレジスタを備えています。

直接アドレス指定は、データ空間全体に到達します。

Indirect with Displacementモードは、YレジスタまたはZレジスタで指定されたベースアドレスから63のアドレス位置に到達します。

自動プリデクリメントおよびポストインクリメントを備えたレジスタ間接アドレッシングモードを使用する場合、アドレスレジスタX、Y、およびZはデクリメントまたはインクリメントされます。

ATtiny32 / 64/128の256個の汎用作業レジスタ、512個のI / Oレジスタ、および25/45/85バイトの内部データSRAMはすべて、これらすべてのアドレッシングモードを介してアクセスできます。 登録簿 File に記載されています 「Gen- eral目的レジスタ File」(10ページ).

図 5-2。 データメモリマップ メモリマップ2

データメモリアクセス タイムズ

このセクションでは、内部メモリ アクセスの一般的なアクセス タイミングの概念について説明します。 内部データ SRAM アクセスは、XNUMX つの clkCPU サイクルで実行されます。 図5-3.

図 5-3。 オンチップ データ SRAM アクセス サイクル オンチップデータ EEPROMデータメモリ

ATtiny25 / 45/85には、128/256/512バイトのデータEEPROMメモリが含まれています。 これは、100,000バイトの読み取りと書き込みが可能な別個のデータスペースとして編成されています。 EEPROMには、少なくともXNUMX回の書き込み/消去サイクルの耐久性があります。 以下では、EEPROMアドレスレジスタ、EEPROMデータレジスタ、およびEEPROM制御レジスタを指定して、EEPROMとCPU間のアクセスについて説明します。 詳細については、を参照してください 151ページの「シリアルダウンロード」.

EEPROM読み取り/書き込みアクセス

EEPROMアクセスレジスタは、I / Oスペースでアクセスできます。

EEPROMの書き込みアクセス時間は次のようになります。 5ページの表1-21. ただし、セルフ タイミング機能により、ユーザー ソフトウェアは次のバイトがいつ書き込まれるかを検出できます。 ユーザー コードに EEPROM に書き込む命令が含まれている場合は、いくつかの予防措置を講じる必要があります。 高度にフィルタリングされた電源では、VCC はゆっくりと上昇または下降する可能性があります。

パワーアップ/ダウン。 これにより、デバイスが一定期間、ボリュームで実行されます。tage 使用されるクロック周波数の最小値として指定された値よりも低い。 見る 19ページの「EEPROMの破損の防止」 これらの状況で問題を回避する方法の詳細については。

意図しないEEPROM書き込みを防ぐために、特定の書き込み手順に従う必要があります。 参照する 「アトミック 17ページの「バイトプログラミング」 そして 17ページの「スプリットバイトプログラミング」 詳細については。

EEPROMが読み取られると、CPUは次の命令が実行される前にXNUMXクロックサイクル停止します。 EEPROMが書き込まれると、CPUは次の命令が実行される前にXNUMXクロックサイクル停止します。

アトミックバイトプログラミング

アトミックバイトプログラミングの使用は、最も単純なモードです。 EEPROMにバイトを書き込む場合、ユーザーはアドレスをEEARレジスタに書き込み、データをEEDRレジスタに書き込む必要があります。 EEPMnビットがゼロの場合、(EEMPEが書き込まれてからXNUMXサイクル以内に)EEPEを書き込むと、消去/書き込み操作がトリガーされます。 消去と書き込みの両方のサイクルがXNUMX回の操作で実行され、合計プログラミング時間は次のようになります。 5ページの表1-21。 EEPEビットは、消去および書き込み操作が完了するまでセットされたままになります。 デバイスがプログラミングでビジー状態の間、他のEEPROM操作を実行することはできません。

スプリットバイトプログラミング

消去と書き込みのサイクルをXNUMXつの異なる操作に分割することができます。 これは、システムが限られた期間に短いアクセス時間を必要とする場合に役立つ場合があります(通常、電源装置の容量がtageが落ちる)。 アドバンテージを得るために- tagこの方法では、書き込み操作の前に、書き込む場所を消去しておく必要があります。 ただし、消去操作と書き込み操作は分割されているため、システムがタイムクリティカルな操作を実行できる場合(通常は電源投入後)に消去操作を実行できます。

消去

バイトを消去するには、アドレスをEEARに書き込む必要があります。 EEPMnビットが0b01の場合、EEPEを書き込むと(EEMPEが書き込まれてからXNUMXサイクル以内)、消去操作のみがトリガーされます(プログラミング時間はで示されます)。 表5-1 21ページ目)。 EEPEビットは、消去操作が完了するまでセットされたままになります。 デバイスがプログラミングでビジー状態の間、他のEEPROM操作を実行することはできません。

書く

場所を書き込むには、ユーザーは住所をEEARに書き込み、データをEEDRに書き込む必要があります。 EEPMnビットが0b10の場合、EEPEを書き込むと(EEMPEが書き込まれてからXNUMXサイクル以内)、書き込み操作のみがトリガーされます(プログラミング時間はで示されます)。 5ページの表1-21)。 EEPEビットは、書き込み操作が完了するまでセットされたままになります。 書き込む場所が書き込み前に消去されていない場合、保存されているデータは失われたと見なす必要があります。 デバイスがプログラミングでビジー状態の間、他のEEPROM操作を実行することはできません。

校正された発振器は、EEPROMアクセスの時間を計るために使用されます。 発振器の周波数がで説明されている要件の範囲内であることを確認してください 31ページの「OSCCAL–発振器校正レジスタ」.

次のコード例ampファイルは、EEPROMの消去、書き込み、またはアトミック書き込みのためのXNUMXつのアセンブリとXNUMXつのC関数を示しています。 元ampファイルは、これらの関数の実行中に割り込みが発生しないように、割り込みが制御されていることを前提としています(たとえば、割り込みをグローバルに無効にすることによって)。

アセンブリコード例ample
EEPROM_write:

; 前の書き込みが完了するのを待ちます

sbic EECR、EEPE

rjmp EEPROM_write

; プログラミングモードを設定する

ldi        r16, (0<<EEPM1)|(0<<EEPM0)

外EECR、r16

; アドレスレジスタにアドレス(r18:r17)を設定する

アウト EEARH、r18

EEARL、r17から

; データレジスタにデータ(r19)を書き込む

EEDR、r19 から

; 論理的なものをEEMPEに書き込む

sbi EECR、EEMPE

; EEPEを設定してeeprom書き込みを開始します

sbi EECR、EEPE

戻る

Cコード例ample
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)

{

/* 前の書き込みの完了を待つ */ while(EECR & (1<

;

/* プログラミングモードを設定 */

EECR =(0 <

/ *アドレスとデータレジスタを設定します* / EEAR = ucAddress;

EEDR = ucデータ;

/* 論理 XNUMX を EEMPE に書き込みます */

EECR | =(1 <

/ * EEPEを設定してeeprom書き込みを開始します* /

EECR | =(1 <

}

次のコード例ampファイルは、EEPROMを読み取るためのアセンブリおよびC関数を示しています。 元ampこれらの関数の実行中に割り込みが発生しないように、割り込みが制御されていることを前提としています。

アセンブリコード例ample
EEPROM_read:

; 前の書き込みが完了するのを待ちます

sbic EECR、EEPE

rjmp EEPROM_read

; アドレスレジスタにアドレス(r18:r17)を設定する

アウト EEARH、r18

EEARL、r17から

; EEREを書き込んでeepromの読み取りを開始します

sbi EECR,EERE

; データレジスタからデータを読み取る

r16、EEDRで

戻る

Cコード例ample
unsigned char EEPROM_read(unsigned char ucAddress)

{

/ *前の書き込みが完了するのを待ちます* /

while(EECR&(1 <

;

/ *アドレスレジスタを設定します* / EEAR = ucAddress;

/* EERE を書き込んで eeprom の読み取りを開始します */

EECR | =(1 <

/ *データレジスタからデータを返します* /

EEDRを返します。

}

EEPROMの破損の防止

VCC が低い期間中は、供給電圧が低下するため、EEPROM データが破損する可能性があります。tageが低すぎるため、CPUとEEPROMが正しく動作しません。 これらの問題は、EEPROMを使用するボードレベルシステムの場合と同じであり、同じ設計ソリューションを適用する必要があります。

EEPROMデータの破損は、次のXNUMXつの状況によって引き起こされる可能性があります。tageが低すぎます。 まず、EEPROMへの通常の書き込みシーケンスには最小容量が必要ですtage正しく動作する。 第二に、CPU自体が命令を誤って実行する可能性があります。tageが低すぎます。

EEPROMデータの破損は、次の設計上の推奨事項に従うことで簡単に回避できます。

電源が不足している間は、AVR RESETをアクティブ(低)に保ちます。tage。 これは、内部の電圧低下検出器(BOD)を有効にすることで実行できます。 内部BODの検出レベルが一致しない場合

検出レベルが必要な場合は、外部の低 VCC リセット保護回路を使用できます。 書き込み動作中にリセットが発生した場合、電源 vol が一定であれば書き込み動作は完了します。tageで十分です。

I / Oメモリ

ATtiny25 / 45/85のI / Oスペースの定義を以下に示します。 200ページの「登録の概要」.

すべてのATtiny25 / 45/85 I / Oおよび周辺機器はI / Oスペースに配置されます。 すべてのI / Oロケーションは、LD / LDS / LDDおよびST / STS / STD命令によってアクセスでき、32個の汎用作業レジスタとI / Oスペースの間でデータを転送します。 0x00〜0x1Fのアドレス範囲内のI / Oレジスタは、SBIおよびCBI命令を使用して直接ビットアクセスできます。 これらのレジスタでは、SBISおよびSBIC命令を使用してシングルビットの値をチェックできます。 詳細については、命令セットのセクションを参照してください。 I / O固有のコマンドINおよびOUTを使用する場合は、I / Oアドレス0x00〜0x3Fを使用する必要があります。 LDおよびST命令を使用してI / Oレジスタをデータスペースとしてアドレス指定する場合、これらのアドレスに0x20を追加する必要があります。

将来のデバイスとの互換性のために、アクセスされた場合、予約済みビットはゼロに書き込まれる必要があります。 予約済みのI / Oメモリアドレスは絶対に書き込まないでください。

一部のステータスフラグは、論理フラグを書き込むことでクリアされます。 CBIおよびSBI命令は指定されたビットでのみ動作するため、そのようなステータスフラグを含むレジスタで使用できることに注意してください。 CBIおよびSBI命令は、レジスタ0x00〜0x1Fでのみ機能します。

I / Oおよびペリフェラル制御レジスタについては後のセクションで説明します。

レジスタの説明

EEARH –EEPROMアドレスレジスタ

少し 7 6 5 4 3 2 1 0
0x1F EEAR8
読み取り/書き込み R R R R R R R 読み取り/書き込み
初期値 0 0 0 0 0 0 0 X/0

ビット7:1 –解像度:予約済みビット

これらのビットは将来の使用のために予約されており、常にゼロとして読み取られます。

ビット0– EEAR8:EEPROMアドレス

これはATtiny85の最上位のEEPROMアドレスビットです。 EEPROMの少ないデバイス、つまりATtiny25 / ATtiny45では、このビットは予約されており、常にゼロを読み取ります。 EEPROMアドレスレジスタ(EEAR)の初期値は未定義であるため、EEPROMにアクセスする前に適切な値を書き込む必要があります。

EEARL –EEPROMアドレスレジスタ

少し

0x1E EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0
リア/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 X X X X X X X X

ビット7– EEAR7:EEPROMアドレス

これはATtiny45の最上位のEEPROMアドレスビットです。 EEPROMの少ないデバイス、つまりATtiny25では、このビットは予約されており、常にゼロを読み取ります。 EEPROMアドレスレジスタ(EEAR)の初期値は未定義であるため、EEPROMにアクセスする前に適切な値を書き込む必要があります。

ビット6:0 – EEAR [6:0]:EEPROMアドレス

これらは、EEPROMアドレスレジスタの(下位)ビットです。 EEPROMデータバイトは、0…(128/256 / 512-1)の範囲で線形にアドレス指定されます。 EEARの初期値は未定義であるため、EEPROMにアクセスする前に適切な値を書き込む必要があります。

EEDR –EEPROMデータレジスタ

少し 7 6 5 4 3 2 1 0
0x1D EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

EEPROM書き込み操作の場合、EEDRレジスタには、EEARレジスタで指定されたアドレスのEEPROMに書き込まれるデータが含まれています。 EEPROM読み取り操作の場合、EEDRには、

EEARで指定されたアドレスのEEPROM。

 

5.5.4 EECR –EEPROM制御レジスタ

ビット7 4 3 2 1 0
0x1C        – EEPM1 EEPM0 不気味 エンペ イープ エネルギー EECR
読み取り/書き込みRR R / W 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値0 X X 0 0 X 0

ビット7–解像度:予約済みビット

このビットは将来の使用のために予約されており、ATtiny0 / 25/45では常に85として読み取られます。 将来のAVRデバイスとの互換性のために、常にこのビットをゼロに書き込んでください。 読んだ後、このビットをマスクします。

ビット6–解像度:予約済みビット

このビットはATtiny25 / 45/85で予約されており、常にゼロとして読み取られます。

ビット5:4 – EEPM [1:0]:EEPROMプログラミングモードビット

EEPROMプログラミングモードのビット設定は、EEPEの書き込み時にトリガーされるプログラミングアクションを定義します。 XNUMXつのアトミック操作でデータをプログラムする(古い値を消去して新しい値をプログラムする)か、消去操作と書き込み操作をXNUMXつの異なる操作に分割することができます。 さまざまなモードのプログラミング時間は、に示されています。 表5-1。 EEPEが設定されている間、EEPMnへの書き込みはすべて無視されます。 リセット中、EEPROMがプログラミングでビジーでない限り、EEPMnビットは0b00にリセットされます。

表 5-1. EEPROM モード ビット

EEPM1 EEPM0 プログラミング時間 手術
0 0 3.4ミリ秒 XNUMX回の操作で消去と書き込み(アトミック操作)
0 1 1.8ミリ秒 消去のみ
1 0 1.8ミリ秒 書き込みのみ
1 1 将来の使用のために予約済み

ビット3– EERIE:EEPROMレディ割り込みイネーブル

EERIEをXNUMXに書き込むと、SREGのIビットが設定されている場合にEEPROMレディ割り込みが有効になります。 EERIEをゼロに書き込むと、割り込みが無効になります。 EEPROMレディ割り込みは、不揮発性メモリがプログラミングの準備ができると、一定の割り込みを生成します。

ビット2– EEMPE:EEPROMマスタープログラムの有効化

EEMPEビットは、EEPEをXNUMXに書き込むことが効果があるかどうかを決定します。

EEMPEが設定されている場合、XNUMXクロックサイクル以内にEEPEを設定すると、選択したアドレスにEEPROMがプログラムされます。 EEMPEがゼロの場合、EEPEを設定しても効果はありません。 EEMPEがソフトウェアによってXNUMXに書き込まれると、ハードウェアはXNUMXクロックサイクル後にビットをゼロにクリアします。

ビット1– EEPE:EEPROMプログラムの有効化

EEPROMプログラムイネーブル信号EEPEは、EEPROMへのプログラミングイネーブル信号です。 EEPEが書き込まれると、EEPROMはEEPMnビット設定に従ってプログラムされます。 論理ビットがEEPEに書き込まれる前に、EEMPEビットがXNUMXに書き込まれる必要があります。そうでない場合、EEPROM書き込みは行われません。 書き込みアクセス時間が経過すると、EEPEビットはハードウェアによってクリアされます。 EEPEが設定されると、CPUは次の命令が実行される前にXNUMXサイクル停止します。

ビット0– EERE:EEPROM読み取りイネーブル

EEPROM読み取りイネーブル信号– EERE –は、EEPROMへの読み取りストローブです。 EEARレジスタに正しいアドレスが設定されている場合、EEPROMの読み取りをトリガーするには、EEREビットをXNUMXに書き込む必要があります。 EEPROM読み取りアクセスはXNUMXつの命令を取り、要求されたデータはすぐに利用可能になります。 EEPROMが読み取られると、CPUは次の命令が実行される前にXNUMXサイクル停止します。 ユーザーは、読み取り操作を開始する前にEEPEビットをポーリングする必要があります。 書き込み操作が進行中の場合、EEPROMを読み取ることも、EEARレジスタを変更することもできません。

システム時計と時計オプション

時計システムとその分布

クロック分配

CPUクロック

CPUクロックは、AVRコアの動作に関係するシステムの部分にルーティングされます。 元ampそのようなモジュールのファイルは汎用レジスタです File、ステータスレジスタとスタックポインタを保持するデータメモリ。 CPUクロックを停止すると、コアは一般的な操作と計算を実行できなくなります。

I / Oクロック– clkI / O

I / Oクロックは、タイマー/カウンターなど、ほとんどのI / Oモジュールで使用されます。 I / Oクロックは外部割り込みモジュールでも使用されますが、一部の外部割り込みは非同期ロジックによって検出されるため、I / Oクロックが停止している場合でもそのような割り込みを検出できることに注意してください。

フラッシュクロック– clkFLASH

フラッシュクロックは、フラッシュインターフェイスの動作を制御します。 フラッシュクロックは通常、CPUクロックと同時にアクティブになります。

ADCクロック– clkADC

ADCには専用のクロックドメインが備わっています。 これにより、デジタル回路によって生成されるノイズを低減するために、CPUおよびI / Oクロックを停止できます。 これにより、より正確なADC変換結果が得られます。

高速ペリフェラルクロック生成用の内部PLL– clkPCK

ATtiny25 / 45/85の内部PLLは、ソース入力から8倍のクロック周波数を生成します。 デフォルトでは、PLLは内部の8.0 MHzRCオシレータの出力をソースとして使用します。 あるいは、PLLCSRのビットLSMが設定されている場合、PLLはRC発振器の出力を64で割った値を使用します。 したがって、PLLの出力である高速ペリフェラルクロックは1MHzです。 高速ペリフェラルクロック、またはそれから事前にスケーリングされたクロックは、Timer / CounterXNUMXのクロックソースまたはシステムクロックとして選択できます。 見る 図6-2. PLLCSR の LSM が設定されている場合、高速ペリフェラル クロックの周波数は 32 分周され、クロック周波数は XNUMX MHz になります。 PLLCLK をシステム クロックとして使用する場合、LSM を設定できないことに注意してください。

図 6-2。 PCK クロッキング システム。 PCKクロッキング

PLLはRCオシレータにロックされており、OSCCALレジスタを介してRCオシレータを調整すると、同時に高速ペリフェラルクロックが調整されます。 ただし、RC発振器を8 MHzより高い周波数にした場合でも、高速周辺クロック周波数は85 MHzで飽和し(最悪の場合)、最大周波数で発振し続けます。 この場合のPLLは、RCオシレータクロックでロックされなくなったことに注意してください。 したがって、PLLを正しい動作範囲に保つために、OSCCAL調整を8MHzより高い周波数に行わないことをお勧めします。

内部PLLは、次の場合に有効になります。

レジスタPLLCSRのPLLEビットがセットされます。

CKSELヒューズは「0001」にプログラムされています。

CKSELヒューズは「0011」にプログラムされています。

PLL がロックされると、PLLCSR ビット PLOCK がセットされます。 内部 RC オシレータと PLL は両方とも、パワーダウン モードとスタンバイ スリープ モードではオフになります。

ATtiny15互換モードの内部PLL

ATtiny25 / 45/85はATtiny15ユーザー向けの移行デバイスであるため、下位互換性のためのATtiny15互換モードがあります。 ATtiny15互換モードは、CKSELヒューズを「0011」にプログラミングすることによって選択されます。

ATtiny15互換モードでは、内部RC発振器の周波数は6.4 MHzまで校正され、PLLの増倍率は4倍に設定されます。 見る 図6-3。 これらの調整により、クロッキングシステムはATtiny15と互換性があり、結果として得られる高速ペリフェラルクロックの周波数は25.6 MHzです(ATtiny15と同じ)。

図 6-3。 ATtiny15 互換モードでの PCK クロッキング システム。 クロッキングシステム

クロックソース

デバイスには次のクロックソースオプションがあり、以下に示すようにフラッシュヒューズビットで選択できます。 選択されたソースからのクロックはAVRクロックジェネレーターに入力され、適切なモジュールにルーティングされます。

表 6-1. デバイス クロッキング オプションの選択

デバイスクロッキングオプション CKSEL[3:0](1)
外部クロック (見る 26ページ目) 0000
高周波PLLクロック (見る 26ページ目) 0001
校正済み内部発振器 (見る 27ページ目) 0010(1)
校正済み内部発振器 (見る 27ページ目) 0011(1)
内部128kHz発振器 (見る 28ページ目) 0100
低周波水晶発振器 (見る 29ページ目) 0110
水晶発振器/セラミック共振子 (見る 29ページ目) 1000 – 1111
予約済み 0101、0111

すべてのヒューズについて、「1」はプログラムされていないことを意味し、「0」はプログラムされていることを意味します。

デバイスは、このオプションが選択された状態で出荷されます。

これにより、ATtiny15互換モードが選択されます。このモードでは、システムクロックが1.6で除算され、XNUMXMHzのクロック周波数になります。 詳細については、を参照してください。 27ページの「校正済み内部発振器」.

次のセクションでは、各クロッキングオプションのさまざまな選択肢について説明します。 CPUがパワーダウンからウェイクアップすると、選択したクロックソースを使用して起動のタイミングが調整され、命令の実行が開始される前に安定したオシレータ動作が保証されます。 CPUがリセットから開始すると、通常の動作を開始する前に電力が安定したレベルに到達できるようにする追加の遅延があります。 ウォッチドッグオシレータは、起動時間のこのリアルタイム部分のタイミングをとるために使用されます。 各タイムアウトに使用されるWDTオシレータサイクルの数は、次のように示されます。 表6-2.

表 6-2. ウォッチドッグ オシレータ サイクル数

Typタイムアウト サイクル数
4ミリ秒 512
64ミリ秒 8K (8,192)

外部クロック

外部クロックソースからデバイスを駆動するには、CLKIを次のように駆動する必要があります。 図6-4。 外部クロックでデバイスを実行するには、CKSELヒューズを「00」にプログラムする必要があります。

図 6-4。 外部クロック ドライブの設定

図6.4

このクロックソースを選択すると、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-3.

表 6-3. 外部クロック選択の起動時間

スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 推奨される使用方法
00 6 CK 14CK BODが有効
01 6 CK 14CK +4ミリ秒 急上昇パワー
10 6 CK 14CK +64ミリ秒 ゆっくりと上昇する力
11 予約済み

外部クロックを適用する場合、MCUの安定した動作を確保するために、適用されるクロック周波数の急激な変化を回避する必要があります。 あるクロックサイクルから次のクロックサイクルへの2%を超える周波数の変動は、予測できない動作につながる可能性があります。 このようなクロック周波数の変化の間、MCUがリセット状態に保たれるようにする必要があります。

System Clock Presaleを使用すると、安定した動作を確保しながら、内部クロック周波数の実行時の変更を実装できることに注意してください。 参照する 31ページの「システムクロックプリスケーラ」 詳細については。

高周波PLLクロック

ペリフェラルタイマー/カウンター64の使用とシステムクロックソースのために、RCオシレーターにロックされた公称1MHzのクロックレートを提供する内部PLLがあります。 システムクロックソースとして選択した場合、CKSELヒューズを「0001」にプログラムすることにより、次に示すようにXNUMXつに分割されます。 表6-4.

表 6-4。 高周波 PLL クロック動作モード

CKSEL[3:0] 公称周波数
0001 16 MHz

このクロックソースが選択されている場合、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-5.

表 6-5. 高周波 PLL クロックの起動時間

スット[1:0] パワーダウンからの起動時間 パワーオン リセットからの追加の遅延 (VCC = 5.0V) 推奨される使用方法
00 14CK + 1K(1024)CK +4ミリ秒 4ミリ秒 BODが有効

表 6-5. 高周波 PLL クロックの起動時間

スット[1:0] パワーダウンからの起動時間 パワーオン リセットからの追加の遅延 (VCC = 5.0V) 推奨される使用方法
01 14CK + 16K(16384)CK +4ミリ秒 4ミリ秒 急上昇パワー
10 14CK + 1K(1024)CK +64ミリ秒 4ミリ秒 ゆっくりと上昇する力
11 14CK + 16K(16384)CK +64ミリ秒 4ミリ秒 ゆっくりと上昇する力

校正済み内部発振器

デフォルトでは、内部RCオシレータは約8.0MHzのクロックを提供します。 でもvoltageと温度に依存し、この時計はユーザーが非常に正確に校正できます。 見る 「校正された内部RC発振器の精度- 164ページの「レーシー」 そして 192ページの「内部発振器速度」 詳細については。 このデバイスは、CKDIV8ヒューズがプログラムされた状態で出荷されます。 見る 31ページの「システムクロックプリスケーラ」 詳細についてはこちらをご覧ください。

このクロックは、に示すようにCKSELヒューズをプログラミングすることにより、システムクロックとして選択できます。 ページの表6-6

27。 選択した場合、外部コンポーネントなしで動作します。 リセット時に、ハードウェアは事前にプログラムされたキャリブレーション値をOSCCALレジスタにロードし、それによってRCオシレータを自動的にキャリブレーションします。 この校正の精度は、工場出荷時の校正として示されています。 21ページの表2-164.

SWからOSCCALレジスタを変更することにより、を参照してください。 31ページの「OSCCAL–発振器校正レジスタ」、工場校正よりも高い校正精度が得られます。 このキャリブレーションの精度は、ユーザーキャリブレーションとして示されています。 21ページの表2-164.

このオシレータをチップクロックとして使用する場合でも、ウォッチドッグオシレータはウォッチドッグタイマーとリセットタイムアウトに使用されます。 事前にプログラムされた校正値の詳細については、セクションを参照してください。 「カリ- 150ページの「brationバイト」.

内部発振器は、CKSELヒューズを「6.4」に書き込むことにより、0011MHzのクロックを提供するように設定することもできます。 表6-6 未満。 この設定はATtiny15互換モードと呼ばれ、ATtiny6.4と同様に、15MHzでキャリブレーションされたクロックソースを提供することを目的としています。 ATtiny15互換モードでは、PLLは6.4 MHzで動作する内部発振器を使用して、Timer / Counter25.6の1MHzペリフェラルクロック信号を生成します(を参照)。 「8ビットタイマー/カウンター1 15ページの「ATtiny95モード」)。 この動作モードでは、6.4 MHzのクロック信号は常に1.6で除算され、XNUMXMHzのシステムクロックを提供することに注意してください。

表 6-6. 内部校正済み RC 発振器の動作モード

CKSEL[3:0] 公称周波数
0010(1) 8.0 MHz
0011(1) 6.4 MHz

デバイスは、このオプションが選択された状態で出荷されます。

この設定により、ATtiny15互換モードが選択されます。このモードでは、システムクロックが1.6で除算され、結果としてXNUMXMHzのクロック周波数になります。

校正済みの8MHz内部発振器がクロックソースとして選択されている場合、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-7 下に。

表 6-7。 内部校正済み RC 発振器クロックの起動時間

スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 (VCC = 5.0V) 推奨される使用方法
00 6 CK 14CK(1) BODが有効
01 6 CK 14CK +4ミリ秒 急上昇パワー
10(1) 6 CK 14CK +64ミリ秒 ゆっくりと上昇する力
11 予約済み

1. RSTDISBLヒューズがプログラムされている場合、この起動時間は14CK + 4ミリ秒に増加し、プログラミングモードに入ることができるようにします。
2.デバイスは、このオプションが選択された状態で出荷されます。

ATtiny15互換モードでは、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-8 下に。

表 6-8. 内部校正済み RC 発振器クロックの起動時間 (ATtiny15 モードで)

スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 (VCC = 5.0V) 推奨される使用方法
00 6 CK 14CK +64ミリ秒
01 6 CK 14CK +64ミリ秒
10 6 CK 14CK +4ミリ秒
11 1 CK 14CK(1)

注: RSTDISBL ヒューズがプログラムされている場合、プログラミング モードに確実に入ることができるように、このスタートアップ時間は 14CK + 4 ms に増加します。

要約すると、ATtiny15互換モードの詳細については、セクションを参照してください。 「ポートB(PB5:PB0)」 2ページ目15ページの「ATtiny24互換モードの内部PLL」「ATtiny8モードの1ビットタイマー/カウンター15」 95ページ目140ページの「debugWIREの制限」150ページの「キャリブレーションバイト」 とテーブルで 「クロックプリスケーラー 33ページの「選択」.

内部128kHz発振器

128 kHz 内部オシレータは、128 kHz のクロックを提供する低電力オシレータです。 周波数は 3V および 25°C での公称値です。 このクロックは、CKSEL ヒューズを「0100」にプログラムすることにより、システム クロックとして選択できます。

このクロックソースを選択すると、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-9.

表 6-9。 128 kHz 内部発振器の起動時間

スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 推奨される使用方法
00 6 CK 14CK(1) BODが有効
01 6 CK 14CK +4ミリ秒 急上昇パワー
10 6 CK 14CK +64ミリ秒 ゆっくりと上昇する力
11 予約済み

注: RSTDISBL ヒューズがプログラムされている場合、プログラミング モードに確実に入ることができるように、このスタートアップ時間は 14CK + 4 ms に増加します。

低周波水晶発振器

32.768 kHzの時計用水晶をデバイスのクロックソースとして使用するには、CKSELヒューズを「0110」に設定して低周波水晶発振器を選択する必要があります。 水晶はに示すように接続する必要があります 図6-5。 32.768 kHzの水晶振動子に適した負荷容量を見つけるには、製造元のデータシートを参照してください。

この発振器を選択すると、起動時間は、に示すようにSUTヒューズによって決定されます。 表6-10.

表 6-10. 低周波水晶発振器クロック選択の起動時間

スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 (VCC = 5.0V) 推奨される使用方法
00 1K(1024)CK(1) 4ミリ秒 急上昇電力またはBOD対応
01 1K(1024)CK(1) 64ミリ秒 ゆっくりと上昇する力
10 32K(32768)CK 64ミリ秒 起動時の安定した周波数
11 予約済み

注: これらのオプションは、起動時の周波数安定性が重要でない場合にのみ使用してください。

低周波水晶発振器は内部負荷容量を提供します。を参照してください。 表6-11 各TOSCピンで。

表 6-11. 低周波水晶振動子の静電容量

デバイス 32 kHzOsc。 タイプ キャップ(Xtal1 / Tosc1) キャップ(Xtal2 / Tosc2)
ATtiny25 / 45/85 システム運用 16pF 6pF

水晶発振器/セラミック共振子

XTAL1とXTAL2は、それぞれ反転の入力と出力です。 ampに示すように、オンチップオシレータとして使用するように構成できるリファイア 図6-5。 水晶振動子またはセラミック共振子のいずれかを使用できます。

C1 と C2 は、水晶と共振器の両方で常に等しくなければなりません。 コンデンサの最適値は、使用する水晶または共振器、浮遊容量の量、および環境の電磁ノイズによって異なります。 水晶振動子で使用するコンデンサを選択するための最初のガイドラインを以下に示します。 表6-12 未満。 セラミック共振子の場合は、メーカーが指定したコンデンサ値を使用する必要があります。

表 6-12. 水晶発振器の動作モード

CKSEL[3:1] 周波数範囲(MHz) 水晶で使用するコンデンサC1およびC2の推奨範囲(pF)
100(1) 0.4 – 0.9
101 0.9 – 3.0 12 – 22
110 3.0 – 8.0 12 – 22
111 8.0 – 12 – 22

注: このオプションは水晶振動子では使用しないでください。セラミック共振器でのみ使用してください。

オシレーターは3つの異なるモードで動作でき、それぞれが特定の周波数範囲に最適化されています。 動作モードは、に示すようにヒューズCKSEL [1:XNUMX]によって選択されます。 表6-12.

CKSEL0ヒューズとSUT [1:0]ヒューズは、に示すように起動時間を選択します。 表6-13.

表 6-13. 水晶発振器クロック選択の起動時間

CKSE0 XNUMX XNUMX スット[1:0] パワーダウンからの起動時間 リセットからの追加の遅延 推奨される使用方法
0 00 258 CK(1) 14CK +4ミリ秒 セラミック共振子、急上昇電力
0 01 258 CK(1) 14CK +64ミリ秒 セラミック共振子、ゆっくりと上昇するパワー
0 10 1K(1024)CK(1) 14CK セラミック共振子、BOD対応
0 11 1K(1024)CK(1) 14CK +4ミリ秒 セラミック共振子、急上昇電力
1 00 1K(1024)CK(1) 14CK +64ミリ秒 セラミック共振子、ゆっくりと上昇するパワー
1 01 16K(16384)CK 14CK 水晶発振器、BOD対応
1 10 16K(16384)CK 14CK +4ミリ秒 水晶発振器、急上昇パワー
1 11 16K(16384)CK 14CK +64ミリ秒 水晶発振器、ゆっくりと上昇するパワー

注記

これらのオプションは、デバイスの最大周波数の近くで動作していない場合、および起動時の周波数の安定性がアプリケーションにとって重要でない場合にのみ使用する必要があります。 これらのオプションはクリスタルには適していません。

これらのオプションはセラミック共振子での使用を目的としており、起動時の周波数安定性を保証します。 また、デバイスの最大周波数近くで動作していない場合や、起動時の周波数安定性がアプリケーションにとって重要でない場合は、水晶で使用することもできます。

デフォルトのクロックソース

デバイスは、CKSEL =“ 0010”、SUT =“ 10”、およびCKDIV8がプログラムされた状態で出荷されます。 したがって、デフォルトのクロックソース設定は、8 MHzで動作する内部RCオシレータであり、起動時間が最も長く、初期システムクロックのプリスケーリングが8であるため、システムクロックは1.0MHzになります。 このデフォルト設定により、すべてのユーザーがインシステムまたはハイボリュームを使用して希望のクロックソース設定を行うことができます。tageプログラマー。

システムクロックプリスケーラー

ATtiny25 / 45/85システムクロックは、 32ページの「CLKPR–クロックプリスケールレジスタ」. この機能は、処理能力の要件が低い場合に消費電力を削減するために使用できます。 これはすべてのクロック ソース オプションで使用でき、CPU とすべての同期ペリフェラルのクロック周波数に影響します。 clkI/O、clkADC、clkCPU、および clkFLASH は、図に示すように係数で除算されます。 6ページの表15-33.

切り替え時間

プリスケーラ設定を切り替えるとき、システムクロックプリスケーラは、クロックシステムでグリッチが発生しないこと、および中間周波数が前の設定に対応するクロック周波数にも新しい設定に対応するクロック周波数よりも高くないことを保証します。

プリスケーラを実装するリップルカウンタは、分割されていないクロックの周波数で動作します。これは、CPUのクロック周波数よりも速い場合があります。 したがって、プリスケーラの状態を判断することはできません。たとえ読み取り可能であったとしても、あるクロック分周から別のクロック分周に切り替えるのにかかる正確な時間を正確に予測することはできません。

CLKPS値が書き込まれた時点から、新しいクロック周波数がアクティブになるまでにT1 + T2とT1 + 2 * T2の間にかかります。 この間隔で、2つのアクティブなクロックエッジが生成されます。 ここで、T1は前のクロック周期であり、T2は新しいプリスケーラ設定に対応する周期です。

クロック出力バッファ

CLKOピン(XTAL2ピンとして使用しない場合)にシステムクロックを出力できます。 出力を有効にするには、CKOUTヒューズをプログラムする必要があります。 このモードは、チップクロックを使用してシステム上の他の回路を駆動する場合に適しています。 リセット中はクロックが出力されないことに注意してください。また、ヒューズがプログラムされると、I / Oピンの通常の動作が上書きされることに注意してください。 CLKOにクロックを出力する場合は、内部RCオシレータ、WDTオシレータ、PLL、外部クロック(CLKI)を選択できます。 水晶発振器(XTAL1、XTAL2)は、CLKOのクロック出力には使用できません。 システムクロックプリスケーラを使用する場合、出力されるのは分割されたシステムクロックです。

レジスタの説明

OSCCAL –発振器校正レジスタ

少し 7 6 5 4 3 2 1 0
0x31 カル7 カル6 カル5 カル4 カル3 カル2 カル1 カル0 オスカル
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み

ビット7:0 – CAL [7:0]:発振器の校正値

発振器校正レジスタは、校正済み内部RC発振器をトリミングして、発振器周波数からプロセス変動を取り除くために使用されます。 事前にプログラムされたキャリブレーション値は、チップのリセット中にこのレジスタに自動的に書き込まれ、で指定されているように工場でキャリブレーションされた周波数を提供します。 21ページの表2-164。 アプリケーションソフトウェアは、このレジスタを書き込んで発振器周波数を変更できます。 発振器は、で指定されている周波数に校正できます。 21ページの表2-164。 その範囲外の校正は保証されません。

この発振器はEEPROMおよびフラッシュ書き込みアクセスの時間を計るために使用され、これらの書き込み時間はそれに応じて影響を受けることに注意してください。 EEPROMまたはフラッシュが書き込まれている場合は、8.8MHzを超えて校正しないでください。 そうしないと、EEPROMまたはフラッシュの書き込みが失敗する可能性があります。

CAL7ビットは、発振器の動作範囲を決定します。 このビットを0に設定すると最低周波数範囲になり、このビットを1に設定すると最高周波数範囲になります。 0つの周波数範囲が重なっています。つまり、OSCCAL = 7x0Fに設定すると、OSCCAL = 80xXNUMXよりも高い周波数が得られます。

CAL [6:0]ビットは、選択した範囲内で周波数を調整するために使用されます。 0x00に設定すると、その範囲で最低の周波数が得られ、0x7Fに設定すると、その範囲で最高の周波数が得られます。

MCUの安定した動作を保証するために、キャリブレーション値を少し変更する必要があります。 あるサイクルから次のサイクルへの2%を超える頻度の変動は、予測できない動作につながる可能性があります。 OSCCALの変更は、キャリブレーションごとに0x20を超えてはなりません。 このようなクロック周波数の変化の間、MCUがリセット状態に保たれるようにする必要があります。

表 6-14。 内部 RC 発振器の周波数範囲

OSCCAL値 公称周波数に関する典型的な最低周波数 公称周波数に関する典型的な最高周波数
0x00 50% 100%
0x3F 75% 150%
0x7F 100% 200%

CLKPR –クロックプリスケールレジスタ

少し 7 6 5 4 3 2 1 0
0x26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
読み取り/書き込み 読み取り/書き込み R R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み

初期値0 0ビットの説明を参照

ビット7– CLKPCE:クロックプリスケーラ変更の有効化

CLKPSビットの変更を有効にするには、CLKPCEビットをロジックXNUMXに書き込む必要があります。 CLKPCEビットは、CLKPRの他のビットが同時にゼロに書き込まれた場合にのみ更新されます。 CLKPCEは、書き込まれてからXNUMXサイクル後、またはCLKPSビットが書き込まれると、ハードウェアによってクリアされます。 このタイムアウト期間内にCLKPCEビットを書き換えても、タイムアウト期間が延長されることも、CLKPCEビットがクリアされることもありません。

ビット6:4 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット3:0 – CLKPS [3:0]:クロックプリスケーラ選択ビット3 – 0

これらのビットは、選択したクロックソースと内部システムクロックの間の分周係数を定義します。 これらのビットは、アプリケーションの要件に合わせてクロック周波数を変更するためにランタイムに書き込むことができます。 分周器がMCUへのマスタークロック入力を分周するため、分周係数を使用すると、すべての同期ペリフェラルの速度が低下します。 除数はで与えられます 表6-15.

クロック周波数の意図しない変更を回避するには、特別な書き込み手順に従ってCLKPSビットを変更する必要があります。

Clock Prescaler Change Enable(CLKPCE)ビットをXNUMXに書き込み、CLKPRの他のすべてのビットをゼロに書き込みます。

XNUMXサイクル以内に、CLKPCEにゼロを書き込みながら、目的の値をCLKPSに書き込みます。

プリスケーラ設定を変更するときは、書き込み手順が中断されないように、割り込みを無効にする必要があります。

CKDIV8 ヒューズは、CLKPS ビットの初期値を決定します。 CKDIV8 がプログラムされていない場合、CLKPS ビットは「0000」にリセットされます。 CKDIV8 がプログラムされている場合、CLKPS ビットは「0011」にリセットされ、起動時に分周係数が 8 になります。 この機能は、選択したクロック ソースの周波数が、現在の動作条件でのデバイスの最大周波数よりも高い場合に使用する必要があります。 CKDIVXNUMX ヒューズの設定に関係なく、任意の値を CLKPS ビットに書き込むことができることに注意してください。 アプリケーション ソフトウェアは、十分な分周係数を確保する必要があります。

選択されたクロックソースが現在の動作条件でデバイスの最大周波数よりも高い周波数を持っている場合に選択されます。 このデバイスは、CKDIV8ヒューズがプログラムされた状態で出荷されます。

表 6-15. クロック プリスケーラ選択

CLKPS3 CLKPS2 CLKPS1 CLKPS0 クロック分周係数
0 0 0 0 1
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 予約済み
1 0 1 0 予約済み
1 0 1 1 予約済み
1 1 0 0 予約済み
1 1 0 1 予約済み
1 1 1 0 予約済み
1 1 1 1 予約済み

注: プリスケーラは ATtiny15 互換モードでは無効になり、CLKPR への書き込みも CKDIV8 ヒューズのプログラミングもシステム クロック (常に 1.6 MHz) に影響しません。

電力管理とスリープモード

高性能で業界をリードするコード効率により、AVRマイクロコントローラーは低電力アプリケーションに理想的な選択肢となっています。 さらに、スリープモードにより、アプリケーションはMCU内の未使用のモジュールをシャットダウンできるため、電力を節約できます。 AVRはさまざまなスリープモードを提供し、ユーザーがアプリケーションの要件に合わせて消費電力を調整できるようにします。

スリープモード

6ページの図1-23 ATtiny25 / 45/85でのさまざまなクロックシステムとその分布を示します。 この図は、適切なスリープモードを選択するのに役立ちます。 表7-1 は、さまざまなスリープモードとそれらのウェイクアップソースを示しています。

表 7-1. 異なるスリープ モードでのアクティブ クロック ドメインとウェイクアップ ソース

アクティブクロックドメイン 発振器 ウェイクアップソース
スリープモード clkCPU clkフラッシュ clkIO clkADC clkPCK メインクロックソースが有効 INT0とピン変更 SPM / EEPROM

準備ができて

 

USI開始条件

アドバンスト その他のI/O ウォッチドッグ 割り込み
アイドル X X X X X X X X X X
ADCノイズリダクション X X X(1) X X X X
パワーダウン X(1) X X

注: INT0 の場合、レベル割り込みのみ。

1つのスリープモードのいずれかに入るには、MCUCRのSEビットをロジック0に書き込み、SLEEP命令を実行する必要があります。 MCUCRレジスタのSM [XNUMX:XNUMX]ビットは、SLEEP命令によってアクティブ化されるスリープモード(アイドル、ADCノイズリダクション、またはパワーダウン)を選択します。 見る 表7-2 要約のために。

MCUがスリープモードのときに有効な割り込みが発生すると、MCUはウェイクアップします。 その後、MCUは起動時間に加えてXNUMXサイクル停止し、割り込みルーチンを実行し、SLEEPに続く命令から実行を再開します。 レジスターの内容 File デバイスがスリープから復帰しても、SRAMは変更されません。 スリープモード中にリセットが発生すると、MCUはウェイクアップし、リセットベクトルから実行されます。

注: ウェイクアップにレベル トリガー割り込みが使用される場合、変更されたレベルは、MCU をウェイクアップするため (および MCU が割り込みサービス ルーチンに入るために) しばらく保持する必要があります。 見る 49ページの「外部割り込み」 詳細については。

起動維持モード

SM[1:0] ビットが 00 に書き込まれると、SLEEP 命令によって MCU がアイドル モードに入り、CPU は停止しますが、アナログ コンパレータ、ADC、USI、タイマー/カウンター、ウォッチドッグ、および割り込みシステムは動作を継続できます。食べる。 このスリープ モードは、基本的に clkCPU と clkFLASH を停止し、他のクロックは実行できるようにします。

アイドルモードを使用すると、MCUは、タイマーオーバーフローなどの内部割り込みだけでなく、外部トリガー割り込みからもウェイクアップできます。 アナログコンパレータ割り込みからのウェイクアップが必要ない場合は、ACDビットをセットすることでアナログコンパレータの電源を切ることができます。 120ページの「ACSR–アナログコンパレータ制御およびステータスレジスタ」。 これにより、アイドルモードでの消費電力が削減されます。 ADCが有効になっている場合、このモードに入ると変換が自動的に開始されます。

ADCノイズリダクションモード

SM[1:0] ビットが 01 に書き込まれると、SLEEP 命令によって MCU は ADC ノイズ低減モードに入り、CPU は停止しますが、ADC、外部割り込み、およびウォッチドッグは動作を継続できます (有効な場合)。 このスリープ モードは、clkI/O、clkCPU、および clkFLASH を停止し、他のクロックの実行を許可します。

これにより、ADCのノイズ環境が改善され、より高い分解能の測定が可能になります。 ADCが有効になっている場合、このモードに入ると変換が自動的に開始されます。 ADC変換完了割り込みとは別に、外部リセット、ウォッチドッグリセット、ブラウンアウトリセット、SPM / EEPROMレディ割り込み、INT0の外部レベル割り込み、またはピン変更割り込みのみが、MCUをADCノイズリダクションからウェイクアップできます。モード。

パワーダウンモード

SM [1:0]ビットが10に書き込まれると、SLEEP命令によりMCUはパワーダウンモードになります。 このモードでは、オシレータは停止しますが、外部割り込み、USI開始状態検出、およびウォッチドッグは動作を継続します(有効な場合)。 外部リセット、ウォッチドッグリセット、ブラウンアウトリセット、USI開始条件割り込み、INT0の外部レベル割り込み、またはピン変更割り込みのみがMCUをウェイクアップできます。 このスリープモードは、生成されたすべてのクロックを停止し、非同期モジュールの操作のみを許可します。

ソフトウェアBOD無効

電圧低下検出器(BOD)がBODLEVELヒューズによって有効になっている場合(を参照) 20ページの表4-148)、BODは積極的に供給量を監視していますtage睡眠期間中。 一部のデバイスでは、パワーダウンスリープモードのソフトウェアでBODを無効にすることで電力を節約できます。 スリープモードの消費電力は、BODがヒューズによってグローバルに無効にされている場合と同じレベルになります。

BOD がソフトウェアによって無効にされている場合、BOD 機能はスリープ モードに入った直後にオフになります。 スリープから復帰すると、BOD は自動的に再び有効になります。 これにより、スリープ期間中に VCC レベルが低下した場合でも安全な動作が保証されます。

BODが無効になっている場合、スリープモードからのウェイクアップ時間はRESETからのウェイクアップ時間と同じになります。 ユーザーは、MCUがコードの実行を続行する前に、バンドギャップリファレンスが開始する時間があり、BODが正しく機能するように、ウェイクアップ時間を手動で構成する必要があります。 表のSUT [1:0]およびCKSEL [3:0]ヒューズビットを参照してください。 149ページの「ヒューズの下位バイト」

BODの無効化は、MCU制御レジスタのBODS(BODスリープ)ビットによって制御されます。を参照してください。 「MCUCR–MCU制御 37ページの「登録」。 このビットをXNUMXに書き込むと、パワーダウンでBODがオフになり、XNUMXを書き込むと、BODがアクティブになります。 デフォルト設定はゼロ、つまりBODがアクティブです。

BODSビットへの書き込みは、時限シーケンスとイネーブルビットによって制御されます。を参照してください。 「MCUCR–MCU制御登録- 37ページの「ter」.

制限事項

BOD無効化機能は、次のデバイスにのみ実装されています。

ATtiny25、リビジョンE以降

ATtiny45、リビジョンD以降

ATtiny85、リビジョンC以降

リビジョンはデバイスパッケージにマークされており、次のように見つけることができます。

パッケージ8P3および8S2の底面

パッケージ20M1の上面

電力削減レジスタ

電力削減レジスタ(PRR)、を参照してください 38ページの「PRR–電力削減レジスタ」は、個々の周辺機器へのクロックを停止することにより、消費電力を削減する方法を提供します。 周辺機器の現在の状態がフリーズし、I / Oレジスタの読み取りまたは書き込みができなくなります。 クロックを停止するときにペリフェラルが使用するリソースは占有されたままになるため、ほとんどの場合、クロックを停止する前にペリフェラルを無効にする必要があります。 PRRのビットをクリアすることによって行われるモジュールのウェイクアップは、モジュールをシャットダウン前と同じ状態にします。

モジュールのシャットダウンは、アイドルモードとアクティブモードで使用して、全体的な消費電力を大幅に削減できます。 他のすべてのスリープモードでは、クロックはすでに停止しています。 見る 177ページの「I / Oモジュールの供給電流」 例えばampレ。

消費電力の最小化

AVR制御システムの消費電力を最小限に抑えるために考慮すべきいくつかの問題があります。 一般に、スリープモードは可能な限り使用する必要があり、スリープモードは、デバイスの機能をできるだけ少なくするように選択する必要があります。 不要な機能はすべて無効にする必要があります。 特に、以下のモジュールは、可能な限り低い消費電力を達成しようとするときに特別な考慮が必要な場合があります。

アナログ-デジタルコンバータ

有効にすると、ADCはすべてのスリープモードで有効になります。 電力を節約するには、スリープモードに入る前にADCを無効にする必要があります。 ADCをオフにしてから再びオンにすると、次の変換は拡張変換になります。 参照する 122ページの「アナログ-デジタル変換器」 ADC動作の詳細については。

アナログコンパレータ

アイドルモードに入るとき、使用しない場合はアナログコンパレータを無効にする必要があります。 ADCノイズリダクションモードに入るときは、アナログコンパレータを無効にする必要があります。 他のスリープモードでは、アナログコンパレータは自動的に無効になります。 ただし、アナログコンパレータが内部ボリュームを使用するように設定されている場合tage入力として参照する場合、アナログコンパレータはすべてのスリープモードで無効にする必要があります。 それ以外の場合、内部巻tageスリープモードに関係なく、リファレンスが有効になります。 参照する 119ページの「アナログコンパレータ」 アナログコンパレータの設定方法の詳細については。

電圧低下検出器

アプリケーションで電圧低下検出器が必要ない場合は、このモジュールをオフにする必要があります。 電圧低下検出器がBODLEVELヒューズによって有効になっている場合、すべてのスリープモードで有効になるため、常に電力を消費します。 より深いスリープモードでは、これは総消費電流に大きく影響します。 見る 「ブラウンアウト検出- 41ページの「 そして 35ページの「ソフトウェアBODの無効化」 ブラウンアウト検出器の設定方法の詳細については。

内部巻tageリファレンス

内部巻tageリファレンスは、ブラウンアウト検出、アナログコンパレータ、またはADCで必要なときに有効になります。 上記のセクションで説明されているようにこれらのモジュールが無効になっている場合、内部ボリュームtag参照は無効になり、電力を消費しなくなります。 再度オンにした場合、ユーザーは、出力を使用する前に参照の起動を許可する必要があります。 リファレンスがスリープモードのままである場合、出力はすぐに使用できます。 参照する 「InternalVol。tageリファレンス」(42ページ) 起動時間の詳細については。

ウォッチドッグタイマー

アプリケーションでウォッチドッグタイマーが必要ない場合は、このモジュールをオフにする必要があります。 ウォッチドッグタイマーが有効になっている場合、すべてのスリープモードで有効になるため、常に電力を消費します。 より深いスリープモードでは、これは総消費電流に大きく影響します。 参照する 42ページの「ウォッチドッグタイマー」 ウォッチドッグタイマーの設定方法の詳細については。

ポートピン

スリープ モードに入る場合、すべてのポート ピンは最小電力を使用するように設定する必要があります。 最も重要なことは、どのピンも抵抗性負荷を駆動しないようにすることです。 I/O クロック (clkI/O) と ADC クロック (clkADC) の両方が停止するスリープ モードでは、デバイスの入力バッファは無効になります。 これにより、電力が消費されないことが保証されます

不要な場合は入力ロジックによって。 場合によっては、ウェイクアップ状態を検出するために入力ロジックが必要になります。

その後、有効になります。 セクションを参照してください 57ページの「デジタル入力の有効化モードとスリープモード」 有効になっているピンの詳細については、 入力バッファが有効で、入力信号がフローティングのままであるか、アナログ信号レベルが VCC/2 に近い場合、入力バッファは過度の電力を使用します。

アナログ入力ピンの場合、デジタル入力バッファは常に無効にする必要があります。 入力ピンのアナログ信号レベルが VCC/2 に近いと、アクティブ モードであっても大きな電流が発生する可能性があります。 デジタル入力ディスエーブル レジスタ (DIDR0) に書き込むことによって、デジタル入力バッファを無効にすることができます。 参照する 0ページの「DIDR0–デジタル入力無効化レジスタ121」 詳細については。

レジスタの説明

MCUCR –MCU制御レジスタ

MCU制御レジスタには、電力管理用の制御ビットが含まれています。

少し 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 ボス ISC01 ISC00 MCUCR
読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット7– BODS:BODスリープ

BOD無効化機能は、一部のデバイスでのみ使用できます。 見る 36ページの「制限事項」.

睡眠中にBODを無効にするため(を参照) 7ページの表1-34)BODSビットはロジックXNUMXに書き込む必要があります。 これは、時限シーケンスと、MCUCRのイネーブルビットBODSEによって制御されます。 まず、BODSとBODSEの両方をXNUMXに設定する必要があります。 次に、XNUMXクロックサイクル以内に、BODSをXNUMXに設定し、BODSEをXNUMXに設定する必要があります。 BODSビットは、セットされてからXNUMXクロックサイクル後にアクティブになります。 実際のスリープモードでBODをオフにするには、BODSがアクティブなときにスリープ命令を実行する必要があります。 BODSビットはXNUMXクロックサイクル後に自動的にクリアされます。

Sleeping BODが実装されていないデバイスでは、このビットは使用されず、常にゼロを読み取ります。

ビット5– SE:スリープイネーブル

SLEEP 命令の実行時に MCU をスリープ モードに移行させるには、SE ビットにロジック XNUMX を書き込む必要があります。 プログラマが意図しない限り、MCU がスリープ モードに入らないようにするために、SLEEP 命令の実行直前にスリープ イネーブル (SE) ビットに XNUMX を書き込み、ウェイクアップ直後にクリアすることをお勧めします。

ビット4:3 – SM [1:0]:スリープモードビット1と0を選択

これらのビットは、に示すようにXNUMXつの使用可能なスリープモードから選択します。 表7-2.

表 7-2. スリープモード選択

SM1 SM0 スリープモード
0 0 アイドル
0 1 ADCノイズリダクション
1 0 パワーダウン
1 1 予約済み

ビット2– BODSE:BODスリープイネーブル

BOD無効化機能は、一部のデバイスでのみ使用できます。 見る 36ページの「制限事項」.

BODSEビットは、BODSビットの説明で説明されているように、BODS制御ビットの設定を有効にします。 BODの無効化は、時限シーケンスによって制御されます。

このビットは、ソフトウェアBOD無効化が実装されていないデバイスでは使用されず、それらのデバイスではゼロとして読み取られます。

PRR –電力削減レジスタ

電力削減レジスタは、周辺クロック信号を無効にすることで消費電力を削減する方法を提供します。

少し 7 6 5 4 3 2 1 0
0x20 PRTIM1 PRTIM0 プルーセン プラド 広報
読み取り/書き込み R R R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット7:4 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット3– PRTIM1:電力削減タイマー/カウンター1

このビットにロジック1を書き込むと、Timer / Counter1モジュールがシャットダウンします。 Timer / CounterXNUMXを有効にすると、シャットダウン前と同じように動作を継続します。

ビット2– PRTIM0:電力削減タイマー/カウンター0

このビットにロジック0を書き込むと、Timer / Counter0モジュールがシャットダウンします。 Timer / CounterXNUMXを有効にすると、シャットダウン前と同じように動作を継続します。

ビット1-PRUSI:電力削減USI

このビットにロジックXNUMXを書き込むと、モジュールへのクロックが停止してUSIがシャットダウンします。 USIを再度ウェイクアップするときは、適切な動作を保証するためにUSIを再初期化する必要があります。

ビット0– PRADC:電力削減ADC

このビットにロジックXNUMXを書き込むと、ADCがシャットダウンします。 シャットダウンする前にADCを無効にする必要があります。 ADCクロックはアナログコンパレータの一部でも使用されていることに注意してください。つまり、このビットがハイの場合、アナログコンパレータは使用できません。

システム制御とリセット

AVRのリセット

リセット時には、すべてのI / Oレジスタが初期値に設定され、プログラムはリセットベクタから実行を開始します。 リセットベクトルに配置される命令は、リセット処理ルーチンへのRJMP –相対ジャンプ–命令である必要があります。 プログラムが割り込みソースを有効にしない場合、割り込みベクタは使用されず、通常のプログラムコードをこれらの場所に配置できます。 の回路図 図8-1 はリセットロジックを示しています。 リセット回路の電気的パラメータは次のとおりです。 165ページの 『システムおよびリセットの特性』.

図 8-1 リセットロジック リセットロジック

AVRのI / Oポートは、リセットソースがアクティブになるとすぐに初期状態にリセットされます。 これには、クロックソースが実行されている必要はありません。

すべてのリセットソースが非アクティブになると、遅延カウンターが呼び出され、内部リセットが延長されます。 これにより、通常の動作が開始される前に電力が安定したレベルに達することができます。 遅延カウンターのタイムアウト期間は、SUTおよびCKSELヒューズを介してユーザーが定義します。 遅延期間のさまざまな選択は、に示されています。 "時計 25ページの「ソース」.

ソースをリセット

ATtiny25 / 45/85には、次のXNUMXつのリセットソースがあります。

パワーオンリセット。 供給量が増えるとMCUはリセットされますtage がパワーオン リセットしきい値 (VPOT) を下回っています。

外部リセット。 RESETピンに最小パルス長より長い間ローレベルが存在すると、MCUはリセットされます。

ウォッチドッグリセット。 ウォッチドッグタイマー期間が終了し、ウォッチドッグが有効になると、MCUはリセットされます。

ブラウンアウトリセット。 供給量が増えるとMCUはリセットされますtage VCC がブラウンアウト リセットしきい値 (VBOT) を下回り、ブラウンアウト検出器が有効になっている。

パワーオンリセット

パワーオンリセット(POR)パルスは、オンチップ検出回路によって生成されます。 検出レベルはで定義されています 「システム- 165ページの「温度およびリセット特性」. VCC が検出レベルを下回ると、POR がアクティブになります。 POR 回路を使用して、スタートアップ リセットをトリガーしたり、供給電圧の障害を検出したりできます。tage.

パワーオンリセット(POR)回路は、デバイスがパワーオンからリセットされることを保証します。 パワーオンリセットしきい値に達するvoltage は遅延カウンターを呼び出します。これは、VCC が上昇した後、デバイスが RESET 状態に維持される時間を決定します。 VCC が検出レベルを下回ると、遅延なく RESET 信号が再びアクティブになります。

図 8-2。 MCU の起動、RESET を VCC に接続

内部リセット

図 8-3。 MCU 起動、RESET 外部拡張

外部リセット

外部リセットは、有効になっている場合、RESETピンのローレベルによって生成されます。 最小パルス幅より長いパルスをリセットします(を参照) 165ページの 『システムおよびリセットの特性』)は、クロックが実行されていない場合でも、リセットを生成します。 より短いパルスは、リセットを生成することが保証されていません。 適用された信号がリセットしきい値Volに達したときtage – VRST – 正のエッジで、タイムアウト期間が経過した後、遅延カウンターが MCU を開始します。

図 8-4。 動作中の外部リセット 図8.4

電圧低下の検出

ATtiny25/45/85 は動作中に VCC レベルを固定トリガ レベルと比較することによって監視するオンチップ ブラウンアウト検出 (BOD) 回路を備えています。 BOD のトリガー レベルは、BODLEVEL ヒューズによって選択できます。 トリガー レベルにはヒステリシスがあり、スパイクのないブラウンアウト検出を保証します。 検出レベルのヒステリシスは、VBOT+ = VBOT + VHYST/2 および VBOT- = VBOT – VHYST/2 として解釈する必要があります。

BOD が有効で、VCC がトリガー レベル (VBOT-in 図8-5)、ブラウンアウト リセットがすぐにアクティブになります。 VCC がトリガー レベル (VBOT+ in 図8-5)、遅延カウンタは、タイムアウト期間 tTOUT が経過した後に MCU を開始します。

BOD 回路は、vol がtage は、で指定された tBOD よりも長くトリガー レベルを下回ります。 165ページの 『システムおよびリセットの特性』. 図8.5

ウォッチドッグリセット

ウォッチドッグがタイムアウトすると、XNUMX CK サイクルの短いリセット パルスが生成されます。 このパルスの立ち下がりエッジで、遅延タイマーはタイムアウト時間 tTOUT のカウントを開始します。 参照する 42ページの「ウォッチドッグタイマー」 ウォッチドッグタイマーの操作の詳細については。

巻tageリファレンスイネーブル信号と起動時間

巻tagリファレンスには、使用方法に影響を与える可能性のある起動時間があります。 起動時間はで与えられます 165ページの 『システムおよびリセットの特性』。 電力を節約するために、リファレンスは常にオンになっているわけではありません。 参照は、次の状況でオンになります。

BODが有効になっている場合(BODLEVEL [2:0]ヒューズビットをプログラミングすることにより)。

バンドギャップリファレンスがアナログコンパレータに接続されている場合(ACSRのACBGビットを設定することにより)。

ADCが有効な場合。

したがって、BODが有効になっていない場合、ACBGビットを設定またはADCを有効にした後、ユーザーは、アナログコンパレータまたはADCからの出力を使用する前に、常にリファレンスの起動を許可する必要があります。 パワーダウンモードでの電力消費を削減するために、ユーザーは上記のXNUMXつの条件を回避して、パワーダウンモードに入る前にリファレンスがオフになっていることを確認できます。

ウォッチドッグタイマー

ウォッチドッグタイマーは、128kHzで動作するオンチップオシレーターからクロックされます。 ウォッチドッグタイマープリスケーラーを制御することにより、ウォッチドッグリセット間隔を次のように調整できます。 8ページの表3-46。 WDR –ウォッチドッグリセット–命令は、ウォッチドッグタイマーをリセットします。 ウォッチドッグタイマーは、無効になっているときやチップリセットが発生したときにもリセットされます。 リセット期間を決定するために、25の異なるクロックサイクル期間を選択できます。 別のウォッチドッグリセットなしでリセット期間が終了すると、ATtiny45 / 85/XNUMXがリセットされ、リセットベクトルから実行されます。 ウォッチドッグリセットのタイミングの詳細については、を参照してください。 8ページの表3-46.

ウォッチドッグタイマーは、リセットの代わりに割り込みを生成するように構成することもできます。 これは、ウォッチドッグを使用してパワーダウンからウェイクアップするときに非常に役立ちます。

ウォッチドッグの意図しない無効化またはタイムアウト期間の意図しない変更を防ぐために、以下に示すように、ヒューズWDTONによってXNUMXつの異なる安全レベルが選択されます。 表8-1 参照 「Con-を変更するための時限シーケンス 43ページの「ウォッチドッグタイマーの構成」 詳細については。

表 8-1. WDTON のヒューズ設定の機能としての WDT 設定

WDTON 安全レベル WDTの初期状態 WDTを無効にする方法 タイムアウトを変更する方法
プログラムされていない 1 無効 時限シーケンス 制限なし
プログラムされた 2 有効 常に有効 時限シーケンス

図 8-7。 ウォッチドッグタイマー ウォッチドッグ

ウォッチドッグタイマーの設定を変更するための時限シーケンス

構成を変更する順序は、XNUMXつの安全レベル間でわずかに異なります。 レベルごとに個別の手順が説明されています。

安全レベル 1: このモードでは、ウォッチドッグ タイマーは最初は無効になっていますが、WDE ビットに XNUMX を書き込むことで制限なく有効にすることができます。 有効なウォッチドッグ タイマーを無効にする場合は、タイミング シーケンスが必要です。 有効なウォッチドッグ タイマーを無効にするには、次の手順に従う必要があります。

同じ操作で、WDCEとWDEにロジックXNUMXを書き込みます。 WDEビットの前の値に関係なく、論理XNUMXをWDEに書き込む必要があります。

次のXNUMXクロックサイクル内で、同じ操作で、必要に応じてWDEビットとWDPビットを書き込みますが、WDCEビットはクリアされます。

安全レベル 2: このモードでは、ウォッチドッグ タイマーは常に有効で、WDE ビットは常に XNUMX として読み取られます。 ウォッチドッグ タイムアウト期間を変更する場合は、タイミング シーケンスが必要です。 ウォッチドッグ タイムアウトを変更するには、次の手順に従う必要があります。

同じ操作で、論理的なものをWDCEとWDEに書き込みます。 WDEは常に設定されていますが、時限シーケンスを開始するには、WDEをXNUMXつに書き込む必要があります。

次のXNUMXクロックサイクル内で、同じ操作で、必要に応じてWDPビットを書き込みますが、WDCEビットはクリアされます。 WDEビットに書き込まれる値は関係ありません。

コード例ample

次のコード例ampleは、WDTをオフにするためのXNUMXつのアセンブリとXNUMXつのC関数を示しています。 元ampleは、これらの関数の実行中に割り込みが発生しないように、割り込みが制御されていることを前提としています(たとえば、割り込みをグローバルに無効にすることによって)。

アセンブリコード例ample(1)
WDT_off:

wdr

; MCUSRのWDRFをクリアする

ldi r16, (0<

MCUSR、r16

; 論理的なものをWDCEとWDEに書き込む

; 意図しないウォッチドッグリセットを防ぐために、古いプリスケーラ設定を保持します

r16 では、WDTCR

ori r16, (1<

出力 WDTCR、r16

; WDTをオフにします

ldi r16, (0<

出力 WDTCR、r16

戻る

Cコード例ample(1)
ボイド WDT_off(ボイド)

{

_WDR();

/* MCUSR の WDRF をクリア */ MCUSR = 0x00

/* WDCE と WDE に論理 1 を書き込みます */ WDTCR |= (1<

/ * WDTをオフにします* / WDTCR = 0x00;

}

注:1。を参照してください 「CodeExamples」(6ページ).

レジスタの説明

MCUSR –MCUステータスレジスタ

MCUステータスレジスタは、どのリセットソースがMCUリセットを引き起こしたかに関する情報を提供します。

少し 7 6 5 4 3 2 1 0
0x34 WDRF ボーフ EXTRF ポルフ MCUSR
読み取り/書き込み R R R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み

初期値0 0ビットの説明を参照

ビット7:4 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット3– WDRF:ウォッチドッグリセットフラグ

このビットは、ウォッチドッグリセットが発生した場合にセットされます。 このビットは、パワーオンリセットによって、またはフラグに論理ゼロを書き込むことによってリセットされます。

ビット2– BORF:ブラウンアウトリセットフラグ

このビットは、ブラウンアウトリセットが発生した場合にセットされます。 このビットは、パワーオンリセットによって、またはフラグに論理ゼロを書き込むことによってリセットされます。

ビット1-EXTRF:外部リセットフラグ

このビットは、外部リセットが発生した場合にセットされます。 このビットは、パワーオンリセットによって、またはフラグに論理ゼロを書き込むことによってリセットされます。

ビット0– PORF:パワーオンリセットフラグ

このビットは、パワーオンリセットが発生した場合にセットされます。 このビットは、フラグに論理ゼロを書き込むことによってのみリセットされます。

リセットフラグを使用してリセット状態を識別するには、ユーザーはプログラムのできるだけ早い段階でMCUSRを読み取ってからリセットする必要があります。 別のリセットが発生する前にレジスタがクリアされている場合は、リセットフラグを調べることでリセットのソースを見つけることができます。

WDTCR –ウォッチドッグタイマー制御レジスタ

少し 7 6 5 4 3 2 1 0
0x21 WDIF ウィディー WDP001 WDCE WDE WDP001 WDP001 WDP001 WDTCR
読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 X 0 0 0

ビット7– WDIF:ウォッチドッグタイムアウト割り込みフラグ

このビットは、ウォッチドッグタイマーでタイムアウトが発生し、ウォッチドッグタイマーが割り込み用に設定されている場合にセットされます。 WDIFは、対応する割り込み処理ベクトルを実行するときにハードウェアによってクリアされます。 または、フラグにロジックXNUMXを書き込むことでWDIFをクリアします。 SREGとWDIEのIビットが設定されると、ウォッチドッグタイムアウト割り込みが実行されます。

ビット6– WDIE:ウォッチドッグタイムアウト割り込みの有効化

このビットがXNUMXに書き込まれ、WDEがクリアされ、ステータスレジスタのIビットがセットされると、ウォッチドッグタイムアウト割り込みが有効になります。 このモードでは、ウォッチドッグタイマーでタイムアウトが発生した場合、リセットの代わりに対応する割り込みが実行されます。

WDEが設定されている場合、タイムアウトが発生すると、WDIEはハードウェアによって自動的にクリアされます。 これは、割り込みの使用中にウォッチドッグリセットのセキュリティを維持するのに役立ちます。 WDIEビットがクリアされた後、次のタイムアウトでリセットが生成されます。 ウォッチドッグリセットを回避するには、各割り込みの後にWDIEを設定する必要があります。

表 8-2. ウォッチドッグ タイマーの設定

WDE ウィディー ウォッチドッグタイマーの状態 タイムアウト時のアクション
0 0 停止 なし
0 1 ランニング 割り込み
1 0 ランニング リセット
1 1 ランニング 割り込み

ビット4– WDCE:ウォッチドッグ変更の有効化

このビットは、WDEビットが論理ゼロに書き込まれるときにセットする必要があります。 それ以外の場合、ウォッチドッグは無効になりません。 XNUMXつに書き込まれると、ハードウェアはXNUMXクロックサイクル後にこのビットをクリアします。 ウォッチドッグの無効化手順については、WDEビットの説明を参照してください。 このビットは、プリスケーラビットを変更するときにも設定する必要があります。 見る 「時限シーケンス ウォッチドッグタイマーの設定を変更する方法」(43ページ).

ビット3– WDE:ウォッチドッグの有効化

WDEがロジックXNUMXに書き込まれると、ウォッチドッグタイマーが有効になり、WDEがロジックXNUMXに書き込まれると、ウォッチドッグタイマー機能が無効になります。 WDEは、WDCEビットの論理レベルがXNUMXの場合にのみクリアできます。 有効なウォッチドッグタイマーを無効にするには、次の手順に従う必要があります。

同じ操作で、WDCEとWDEにロジックXNUMXを書き込みます。 無効化操作を開始する前に論理XNUMXに設定されていても、論理XNUMXをWDEに書き込む必要があります。

次の0クロックサイクル以内に、WDEにロジックXNUMXを書き込みます。 これにより、ウォッチドッグが無効になります。

安全レベル2では、上記のアルゴリズムを使用しても、ウォッチドッグタイマーを無効にすることはできません。 見る 43ページの「ウォッチドッグタイマーの構成を変更するための時限シーケンス」.

安全レベル1では、WDEはMCUSRのWDRFによってオーバーライドされます。 見る 44ページの「MCUSR–MCUステータスレジスタ」 WDRFの説明について。 これは、WDRFが設定されている場合は常にWDEが設定されることを意味します。 WDEをクリアするには、上記の手順でウォッチドッグを無効にする前にWDRFをクリアする必要があります。 この機能により、障害の原因となる状態での複数のリセットと、障害後の安全な起動が保証されます。

注: アプリケーションでウォッチドッグ タイマーを使用しない場合は、デバイスの初期化でウォッチドッグを無効にする手順を実行することが重要です。 ウォッチドッグが誤って有効になった場合、たとえばampポインタが暴走したり、電圧低下状態になったりすると、デバイスがリセットされ、新しいウォッチドッグがリセットされます。 この状況を回避するために、アプリケーションソフトウェアは、初期化ルーチンのWDRFフラグとWDE制御ビットを常にクリアする必要があります。

ビット5、2:0 – WDP [3:0]:ウォッチドッグタイマープリスケーラー3、2、1、および0

WDP [3:0]ビットは、ウォッチドッグタイマーが有効な場合のウォッチドッグタイマーのプリスケーリングを決定します。 さまざまなプリスケーリング値とそれに対応するタイムアウト期間を以下に示します。 表8-3.

表 8-3. ウォッチドッグ タイマー プリスケール選択

WDP001 WDP001 WDP001 WDP001 WDTオシレータサイクルの数 VCC = 5.0Vでの標準タイムアウト
0 0 0 0 2K(2048)サイクル 16ミリ秒
0 0 0 1 4K(4096)サイクル 32ミリ秒
0 0 1 0 8K(8192)サイクル 64ミリ秒
0 0 1 1 16K(16384)サイクル 0.125秒
0 1 0 0 32K(32764)サイクル 0.25秒
0 1 0 1 64K(65536)サイクル 0.5秒
0 1 1 0 128K(131072)サイクル 1.0秒
0 1 1 1 256K(262144)サイクル 2.0秒
1 0 0 0 512K(524288)サイクル 4.0秒
1 0 0 1 1024K(1048576)サイクル 8.0秒

表 8-3. ウォッチドッグ タイマーのプリスケール選択 (続き)

WDP001 WDP001 WDP001 WDP001 WDTオシレータサイクルの数 VCC = 5.0Vでの標準タイムアウト
1 0 1 0 予約済み(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

注: 1. 選択すると、0b1010 未満の有効な設定の XNUMX つが使用されます。

割り込み

このセクションでは、ATtiny25 / 45/85で実行される割り込み処理の詳細について説明します。 AVR割り込み処理の一般的な説明については、を参照してください。 12ページの「リセットおよび割り込み処理」.

ATtiny25 / 45/85の割り込みベクタ

ATtiny25 / 45/85の割り込みベクタについては 表9-1下に。

表 9-1. リセットおよび割り込みベクトル

ベクター番号 プログラムアドレス ソース 割り込み定義
1 0x0000 リセット 外部ピン、パワーオンリセット、ブラウンアウトリセット、ウォッチドッグリセット
2 0x0001 INT0 外部割り込み要求0
3 0x0002 PCINT0 ピン変更割り込み要求0
4 0x0003 TIMER1_COMPA タイマー/カウンター1比較マッチA
5 0x0004 TIMER1_OVF タイマー/カウンター1オーバーフロー
6 0x0005 TIMER0_OVF タイマー/カウンター0オーバーフロー
7 0x0006 EE_RDY EEPROM対応
8 0x0007 ANA_COMP アナログコンパレータ
9 0x0008 アドバンスト ADC変換完了
10 0x0009 TIMER1_COMPB タイマー/カウンター1比較マッチB
11 0x000A TIMER0_COMPA タイマー/カウンター0比較マッチA
12 0x000B TIMER0_COMPB タイマー/カウンター0比較マッチB
13 0x000C ワールドタイム ウォッチドッグタイムアウト
14 0x000D USI_START USIスタート
15 0x000E USI_OVF USIオーバーフロー

プログラムが割り込みソースを有効にしない場合、割り込みベクタは使用されず、通常のプログラムコードをこれらの場所に配置できます。

ATtiny25 / 45/85の割り込みベクタアドレスの一般的で一般的な設定は、プログラムexに示されています。amp下記をご覧ください。

アセンブリコード例ample
.org 0x0000 ;次のアドレスを設定 声明
rjmp リセット ; アドレス0x0000
rjmp INT0_ISR ; アドレス0x0001
rjmp PCINT0_ISR ; アドレス0x0002
rjmp TIM1_COMPA_ISR ; アドレス0x0003
rjmp TIM1_OVF_ISR ; アドレス0x0004
rjmp TIM0_OVF_ISR ; アドレス0x0005
rjmp EE_RDY_ISR ; アドレス0x0006
rjmp ANA_COMP_ISR ; アドレス0x0007
rjmp ADC_ISR ; アドレス0x0008
rjmp TIM1_COMPB_ISR ; アドレス0x0009
rjmp TIM0_COMPA_ISR ; アドレス0x000A
rjmp TIM0_COMPB_ISR ; アドレス0x000B
rjmp WDT_ISR ; アドレス0x000C
rjmp USI_START_ISR ; アドレス0x000D
rjmp USI_OVF_ISR ; アドレス0x000E
リセット: ; メインプログラム開始
; アドレス0x000F

注: 参照 「CodeExamples」(6ページ).

外部割り込み

外部割り込みは、INT0ピンまたはPCINT [5:0]ピンのいずれかによってトリガーされます。 有効にすると、INT0またはPCINT [5:0]ピンが出力として構成されている場合でも割り込みがトリガーされることに注意してください。 この機能は、ソフトウェア割り込みを生成する方法を提供します。 ピン変更割り込み有効なPCINT [5:0]ピンが切り替わると、PCIがトリガーします。 PCMSKレジスタは、どのピンがピン変更割り込みに寄与するかを制御します。 PCINT [5:0]のピン変更割り込みは非同期で検出されます。 これは、これらの割り込みを使用して、アイドルモード以外のスリープモードからもパーツをウェイクアップできることを意味します。

INT0割り込みは、立ち下がりエッジまたは立ち上がりエッジ、あるいは低レベルによってトリガーできます。 これは、MCU制御レジスタ–MCUCRの仕様に示されているように設定されます。 INT0割り込みが有効で、レベルトリガーとして構成されている場合、ピンがローに保持されている限り、割り込みがトリガーされます。 INT0での立ち下がりエッジまたは立ち上がりエッジの割り込みの認識には、で説明されているI / Oクロックの存在が必要であることに注意してください。 「時計システムとその分布」 23ページ目.

低レベル割り込み

INT0の低レベル割り込みは非同期で検出されます。 これは、この割り込みを使用して、アイドルモード以外のスリープモードからもパーツをウェイクアップできることを意味します。 I / Oクロックは、アイドルモードを除くすべてのスリープモードで停止します。

パワーダウンからのウェイクアップにレベル トリガー割り込みを使用する場合、MCU がウェイクアップを完了してレベル割り込みをトリガーするのに十分な時間、必要なレベルを保持する必要があることに注意してください。 スタートアップ時間の終了前にレベルが消えた場合、MCU は引き続きウェイクアップしますが、割り込みは生成されません。 起動時間は、SUT および CKSEL ヒューズによって定義されます。 23ページの「システムクロックとクロックオプション」.

デバイスがウェイクアップする前に割り込みピンのローレベルが削除された場合、プログラムの実行は割り込みサービスルーチンに転送されず、SLEEPコマンドに続く命令から続行されます。

ピンチェンジ割り込みタイミング

元ampピンチェンジ割り込みのタイミングのファイルをに示します。 図9-1.

レジスタの説明

MCUCR –MCU制御レジスタ

外部割り込み制御レジスタAには、割り込みセンス制御用の制御ビットが含まれています。

少し 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 ボス ISC01 ISC00 MCUCR
読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット1:0 – ISC0 [1:0]:割り込みセンス制御0ビット1およびビット0

SREG Iフラグと対応する割り込みマスクが設定されている場合、外部割り込み0は外部ピンINT0によってアクティブになります。 割り込みをアクティブにする外部INT0ピンのレベルとエッジは次のように定義されます。 表9-2。 INT0ピンの値はsです。ampエッジを検出する前に導かれました。 エッジまたはトグル割り込みが選択されている場合、XNUMXクロック周期より長く続くパルスは割り込みを生成します。 より短いパルスが割り込みを生成することは保証されていません。 低レベルの割り込みが選択されている場合、割り込みを生成するには、現在実行中の命令が完了するまで低レベルを保持する必要があります。

表 9-2. 割り込み 0 センス制御

ISC01 ISC00 説明
0 0 INT0の低レベルは、割り込み要求を生成します。
0 1 INT0で論理的な変更を行うと、割り込み要求が生成されます。
1 0 INT0の立ち下がりエッジは、割り込み要求を生成します。
1 1 INT0の立ち上がりエッジは、割り込み要求を生成します。

GIMSK –一般的な割り込みマスクレジスタ

少し 7 6 5 4 3 2 1 0
0x3B INT0 PCIE ギムスク
読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み R R R R R
初期値 0 0 0 0 0 0 0 0

ビット7、4:0 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット6– INT0:外部割り込み要求0有効

INT0ビットがセット(0)され、ステータスレジスタ(SREG)のIビットがセット(1)されると、外部ピン割り込みが有効になります。 MCU制御レジスタ(MCUCR)の割り込みセンス制御0ビット01/00(ISC0およびISC0)は、INT0ピンまたはレベル検出の立ち上がりエッジおよび/または立ち下がりエッジで外部割り込みをアクティブにするかどうかを定義します。 INT0が出力として設定されている場合でも、ピンのアクティビティにより割り込み要求が発生します。 外部割り込み要求XNUMXの対応する割り込みは、INTXNUMX割り込みベクタから実行されます。

ビット5– PCIE:ピン変更割り込みイネーブル

PCIEビットがセット(5)され、ステータスレジスタ(SREG)のIビットがセット(0)されると、ピン変更割り込みが有効になります。 有効なPCINT [5:0]ピンを変更すると、割り込みが発生します。 ピン変更割り込み要求の対応する割り込みは、PCI割り込みベクタから実行されます。 PCINT [0:XNUMX]ピンは、PCMSKXNUMXレジスタによって個別に有効になります。

GIFR –一般的な割り込みフラグレジスタ

少し 7 6 5 4 3 2 1 0
0x3A INTF0 PCIF ギフト
読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み R R R R R
初期値 0 0 0 0 0 0 0 0

ビット7、4:0 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット6– INTF0:外部割り込みフラグ0

INT0ピンのエッジまたはロジックの変更が割り込み要求をトリガーすると、INTF0がセット(0)になります。 SREGのIビットとGIMSKのINT0ビットが設定されている場合(XNUMX)、MCUは対応する割り込みベクタにジャンプします。 割り込みルーチンが実行されると、フラグはクリアされます。 または、論理フラグを書き込むことでフラグをクリアすることもできます。 INTXNUMXがレベル割り込みとして設定されている場合、このフラグは常にクリアされます。

ビット5– PCIF:ピン変更割り込みフラグ

PCINT [5:0]ピンの論理変更が割り込み要求をトリガーすると、PCIFがセット(XNUMX)になります。 SREGのIビットとGIMSKのPCIEビットが設定されている場合(XNUMX)、MCUは対応する割り込みベクタにジャンプします。 割り込みルーチンが実行されると、フラグはクリアされます。 または、論理フラグを書き込むことでフラグをクリアすることもできます。

PCMSK –ピン変更マスクレジスタ

少し 7 6 5 4 3 2 1 0
0x15 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
読み取り/書き込み R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット7:6 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット5:0 – PCINT [5:0]:ピン変更イネーブルマスク5:0

各PCINT [5:0]ビットは、対応するI / Oピンでピン変更割り込みを有効にするかどうかを選択します。 PCINT [5:0]が設定され、GIMSKのPCIEビットが設定されている場合、対応するI / Oピンでピン変更割り込みが有効になります。 PCINT [5:0]がクリアされると、対応するI / Oピンのピン変更割り込みが無効になります。

I/O ポート

導入

すべてのAVRポートは、一般的なデジタルI / Oポートとして使用される場合、真のリードモディファイライト機能を備えています。 これは、SBIおよびCBI命令を使用して、他のピンの方向を意図せずに変更することなく、XNUMXつのポートピンの方向を変更できることを意味します。 ドライブ値を変更する場合(出力として構成されている場合)またはプルアップ抵抗を有効/無効にする場合(入力として構成されている場合)も同様です。 各出力バッファは、高いシンク機能とソース機能の両方を備えた対称的なドライブ特性を備えています。 ピンドライバーは、LEDディスプレイを直接駆動するのに十分な強度があります。 すべてのポートピンには、個別に選択可能なプルアップ抵抗があります。tage 不変の抵抗。 図に示すように、すべての I/O ピンには VCC とグラウンドの両方への保護ダイオードがあります。 図10-1参照 161ページの「電気的特性」 パラメータの完全なリストについては、

図 10-1。 I/O ピンの等価回路図

図10

このセクションのすべてのレジスタとビットリファレンスは、一般的な形式で記述されています。 小文字の「x」はポートの番号文字を表し、小文字の「n」はビット番号を表します。 ただし、プログラムでレジスタまたはビット定義を使用する場合は、正確な形式を使用する必要があります。 例ample、ビット番号はPORTB3。 3ポートBで、ここでは一般にPORTxnとして文書化されています。 物理I / Oレジスタとビット位置は次のようにリストされています。 「登録の説明」 64ページ目.

XNUMXつのI / Oメモリアドレス位置が各ポートに割り当てられます。XNUMXつはデータレジスタ– PORTx、データ方向レジスタ– DDRx、およびポート入力ピン–PINxに割り当てられます。 ポート入力ピンのI / O位置は読み取り専用で、データレジスタとデータ方向レジスタは読み取り/書き込みです。 ただし、PINxレジスタのビットにロジックXNUMXを書き込むと、データレジスタの対応するビットがトグルします。 さらに、MCUCRのプルアップ無効– PUDビットは、設定されている場合、すべてのポートのすべてのピンのプルアップ機能を無効にします。

一般的なデジタルI / OとしてのI / Oポートの使用については、 53ページの「一般的なデジタルI / Oとしてのポート」。 ほとんどのポートピンは、デバイスの周辺機能の代替機能と多重化されています。 各代替機能がポートピンにどのように干渉するかについては、 57ページの 『代替ポート機能』。 代替機能の詳細については、個々のモジュールのセクションを参照してください。

一部のポートピンの代替機能を有効にしても、一般的なデジタルI / Oとしてのポート内の他のピンの使用には影響しないことに注意してください。

一般的なデジタルI / Oとしてのポート

ポートは、オプションの内部プルアップを備えた双方向I / Oポートです。 図10-2 は、ここでは一般的にPxnと呼ばれるXNUMXつのI / Oポートピンの機能説明を示しています。

図 10-2。 汎用デジタル I/O(1)

図10

ピンの設定

各ポートピンは、DDxn、PORTxn、およびPINxnのXNUMXつのレジスタビットで構成されています。 に示すように 「登録の説明」 64ページ目、DDxnビットはDDRx I / Oアドレスでアクセスされ、PORTxnビットはPORTx I / Oアドレスでアクセスされ、PINxnビットはPINx I / Oアドレスでアクセスされます。

DDRxレジスタのDDxnビットは、このピンの方向を選択します。 DDxnがロジックXNUMXと書かれている場合、Pxnは出力ピンとして構成されます。 DDxnがロジックゼロで書き込まれる場合、Pxnは入力ピンとして構成されます。

ピンが入力ピンとして構成されているときにPORTxnがロジックXNUMXに書き込まれると、プルアップ抵抗がアクティブになります。 プルアップ抵抗をオフに切り替えるには、PORTxnにロジックゼロを書き込むか、ピンを出力ピンとして構成する必要があります。 クロックが実行されていなくても、リセット条件がアクティブになると、ポートピンはトライステートになります。

ピンが出力ピンとして構成されているときにPORTxnがロジックXNUMXに書き込まれると、ポートピンはハイ(XNUMX)に駆動されます。 ピンが出力ピンとして構成されているときにPORTxnが論理ゼロと書き込まれると、ポートピンはロー(ゼロ)に駆動されます。

ピンの切り替え

PINxnにロジックXNUMXを書き込むと、DDRxnの値に関係なく、PORTxnの値が切り替わります。 SBI命令を使用して、ポートのXNUMXビットを切り替えることができることに注意してください。

入力と出力の切り替え

トライステート ({DDxn, PORTxn} = 0b00) と出力ハイ ({DDxn, PORTxn} = 0b11) を切り替える場合、プルアップが有効な {DDxn, PORTxn} = 0b01) または出力ローのいずれかの中間状態({DDxn, PORTxn} = 0b10) が発生する必要があります。 通常、ハイ インピーダンス環境では強力なハイ ドライバーとプルアップの違いに気付かないため、プルアップが有効な状態は完全に許容されます。 そうでない場合は、MCCR レジスタの PUD ビットを設定して、すべてのポートのすべてのプルアップを無効にすることができます。

プルアップ付きの入力とローの出力を切り替えると、同じ問題が発生します。 ユーザーは、中間ステップとして、トライステート({DDxn、PORTxn} = 0b00)または出力ハイステート({DDxn、PORTxn} = 0b10)のいずれかを使用する必要があります。

表10-1 ピン値の制御信号を要約します。

表 10-1. ポートのピン配置

DDxn ポートxn PUD

(MCUCR内)

入出力 プルアップ コメント
0 0 X 入力 いいえ トライステート(Hi-Z)
0 1 0 入力 はい 内線の場合、Pxnは電流を供給します。 低く引いた。
0 1 1 入力 いいえ トライステート(Hi-Z)
1 0 X 出力 いいえ 低出力(シンク)
1 1 X 出力 いいえ 高出力(ソース)

ピン値の読み取り

データ方向ビットDDxnの設定とは関係なく、ポートピンはPINxnレジスタビットを介して読み取ることができます。 に示すように 図10-2、PINxnレジスタビットと先行するラッチがシンクロナイザを構成します。 これは、物理ピンが内部クロックのエッジ近くで値を変更した場合の準安定性を回避するために必要ですが、遅延も発生します。 図10-3 外部から適用されたピン値を読み取るときの同期のタイミング図を示します。 最大および最小の伝搬遅延は、それぞれ tpd,max および tpd,min で表されます。

システムクロックの最初の立ち下がりエッジの直後から始まるクロック周期について考えてみます。 「SYNCLATCH」信号の影付きの領域で示されているように、ラッチはクロックがローのときに閉じられ、クロックがハイのときに透明になります。 システムクロックがローになると、信号値がラッチされます。 これは、後続の正のクロックエッジでPINxnレジスタにクロックインされます。 1つの矢印tpd、maxおよびtpd、minで示されているように、ピンの単一信号遷移は、アサーションの時間に応じて、システムクロック周期のXNUMX/XNUMXからXNUMX½の間で遅延します。

ソフトウェアで割り当てられたピン値を読み戻すときは、に示すようにnop命令を挿入する必要があります。 図10-4。 out命令は、クロックの立ち上がりエッジに「SYNCLATCH」信号を設定します。 この場合、シンクロナイザーを介した遅延tpdはXNUMXシステムクロック周期です。

次のコード例ampこのファイルは、ポート B のピン 0 と 1 を高く、2 と 3 を低く設定し、ポート ピン 4 から 5 を入力として定義し、ポート ピン 4 にプルアップを割り当てる方法を示しています。結果のピン値は再度読み取られますが、前述のように、一部のピンに最近割り当てられた値を読み戻すことができるように、nop 命令が含まれています。

アセンブリコード例ample(1)

; プルアップを定義し、出力をハイに設定

; ポート ピンの方向を定義する

ldi        r16,(1<<PB4)|(1<<PB1)|(1<<PB0)

ldi        r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)

OUT PORTB,r16

アウトDDRB、r17

; 同期のために nop を挿入

いいえ

; ポート ピンの読み取り

r16、PINBで

注: アセンブリ プログラムでは、ピン 0、1、および 4 にプルアップが設定されてから方向ビットが正しく設定され、ビット 2 と 3 が Low として定義され、ビット 0 と 1 が再定義されるまでの時間を最小限に抑えるために、XNUMX つの一時レジスタが使用されます。強力なハイドライバーとして XNUMX。

Cコード例ample
unsigned char i;

/* プルアップを定義し、出力をハイに設定 */

/* ポート ピンの方向を定義 */ PORTB = (1<

DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);

/* 同期のために nop を挿入します*/

_NOP();

/* ポート ピンの読み取り */ i = PINB;

デジタル入力イネーブルモードとスリープモード

図に示すように 図10-2、デジタル入力信号はclにすることができますampシュミットトリガーの入力で接地します。 図で SLEEP と示されている信号は、MCU スリープ コントローラによってパワーダウン モードで設定され、一部の入力信号がフローティングのままになっている場合、またはアナログ信号レベルが VCC/2 に近い場合に、高電力消費を回避します。

SLEEPは、外部割り込みピンとして有効になっているポートピンに対してオーバーライドされます。 外部割り込み要求が有効になっていない場合、SLEEPはこれらのピンに対してもアクティブになります。 SLEEPは、で説明されているように、他のさまざまな代替機能によってもオーバーライドされます。 57ページの 『代替ポート機能』.

外部割り込みが有効になっていないときに、「ピンの立ち上がりエッジ、立ち下がりエッジ、または任意の論理変化で割り込み」として構成された非同期外部割り込みピンにロジック ハイ レベル (「XNUMX」) が存在する場合、対応する外部割り込みフラグが上記のスリープ モードからの復帰時に cl として設定されます。ampこれらのスリープモードで実行すると、要求されたロジック変更が生成されます。

接続されていないピン

一部のピンが未使用の場合は、これらのピンのレベルが定義されていることを確認することをお勧めします。 上記のようにディープスリープモードではほとんどのデジタル入力が無効になっていますが、デジタル入力が有効になっている他のすべてのモード(リセット、アクティブモード、アイドルモード)での消費電流を減らすために、フローティング入力は避ける必要があります。

未使用ピンの定義されたレベルを保証する最も簡単な方法は、内部プルアップを有効にすることです。 この場合、リセット時にプルアップが無効になります。 リセット時の低消費電力が重要な場合は、外部プルアップまたはプルダウンを使用することをお勧めします。 未使用のピンを VCC または GND に直接接続することは推奨されません。これは、ピンが誤って出力として設定された場合に過剰な電流が発生する可能性があるためです。

代替ポート機能

ほとんどのポートピンには、一般的なデジタルI / Oに加えて、代替機能があります。 図10-5 簡略化されたからのポートピン制御信号がどのように 図10-2 代替機能によってオーバーライドできます。 オーバーライド信号はすべてのポートピンに存在するわけではありませんが、この図はAVRマイクロコントローラファミリのすべてのポートピンに適用できる一般的な説明として機能します。

表 10-2. 代替機能のオーバーライド信号の一般的な説明

信号名 フルネーム 説明
プオエ プルアップオーバーライドの有効化 この信号が設定されている場合、プルアップイネーブルはPUOV信号によって制御されます。 この信号がクリアされると、プルアップは次の場合に有効になります。

{DDxn、PORTxn、PUD} = 0b010。

プオーフ プルアップオーバーライド値 PUOEが設定されている場合、DDxn、PORTxn、およびPUDレジスタビットの設定に関係なく、PUOVが設定/クリアされるとプルアップが有効/無効になります。
DDOE データ方向オーバーライドの有効化 この信号が設定されている場合、出力ドライバの有効化はDDOV信号によって制御されます。 この信号がクリアされると、出力ドライバはDDxnレジスタビットによって有効になります。
DDOV データ方向オーバーライド値 DDOEが設定されている場合、DDxnレジスタビットの設定に関係なく、DDOVが設定/クリアされると出力ドライバが有効/無効になります。
PVOE ポート値オーバーライドの有効化 この信号が設定され、出力ドライバが有効になっている場合、ポート値はPVOV信号によって制御されます。 PVOEがクリアされ、出力ドライバーが有効になっている場合、ポート値はPORTxnレジスタビットによって制御されます。
PVOV ポート値オーバーライド値 PVOEが設定されている場合、PORTxnレジスタビットの設定に関係なく、ポート値はPVOVに設定されます。
PTOE ポートトグルオーバーライドの有効化 PTOEが設定されている場合、PORTxnレジスタビットが反転されます。
死ぬ デジタル入力イネーブルオーバーライドイネーブル このビットがセットされている場合、デジタル入力イネーブルはDIEOV信号によって制御されます。 この信号がクリアされると、デジタル入力イネーブルはMCUの状態(通常モード、スリープモード)によって決定されます。
ディオフ デジタル入力イネーブルオーバーライド値 DIEOEが設定されている場合、MCUの状態(通常モード、スリープモード)に関係なく、DIEOVが設定/クリアされると、デジタル入力が有効/無効になります。
DI デジタル入力 これは、代替機能へのデジタル入力です。 この図では、信号はシュミットトリガーの出力に接続されていますが、シンクロナイザーの前にあります。 デジタル入力がクロックソースとして使用されていない限り、代替機能を備えたモジュールは独自のシンクロナイザーを使用します。
エイオー アナログ入力/出力 これは、代替機能との間のアナログ入力/出力です。 信号はパッドに直接接続されており、双方向で使用できます。

次のサブセクションでは、各ポートの代替機能について簡単に説明し、オーバーライド信号を代替機能に関連付けます。 詳細については、代替機能の説明を参照してください。

ポートBの代替機能

代替機能を備えたポートBピンを以下に示します。 表10-3.

表 10-3. ポート B ピンの代替機能

ポートピン 代替機能
PB5

リセット:リセットピン

dW:debugWIRE I / O ADC0:ADC入力チャンネル0

PCINT5:ピン変更割り込み、ソース5

PB4 XTAL2:水晶発振器出力CLKO:システムクロック出力ADC2:ADC入力チャンネル2

OC1B:タイマー/カウンター1比較一致B出力PCINT4:ピン変更割り込み0、ソース4

PB3 XTAL1: 水晶発振器入力 CLKI: 外部クロック入力 ADC3: ADC 入力チャンネル 3

OC1B:相補タイマー/カウンター1比較一致B出力PCINT3:ピン変更割り込み0、ソース3

PB2 SCK:シリアルクロック入力ADC1:ADC入力チャンネル1

T0:タイマー/カウンター0クロックソースUSCK:USIクロック(0線式モード)SCL:USIクロック(0線式モード)INT2:外部割り込み0入力PCINT2:ピン変更割り込みXNUMX、ソースXNUMX

PB1 MISO:SPIマスターデータ入力/スレーブデータ出力AIN1:アナログコンパレータ、負入力OC0B:タイマー/カウンター0比較マッチB出力OC1A:タイマー/カウンター1比較マッチA出力DO:USIデータ出力(1線式モード)PCINT0:ピン変更割り込み1、ソースXNUMX
PB0 MOSI :: SPIマスターデータ出力/スレーブデータ入力AIN0:アナログコンパレータ、正入力

OC0A: Timer/Counter0 コンペアマッチ A 出力

OC1A:相補タイマー/カウンター1比較一致A出力DI:USIデータ入力(XNUMX線式モード)

SDA:USIデータ入力(0線式モード)AREF:外部アナログリファレンスPCINT0:ピン変更割り込み0、ソースXNUMX

ポートB、ビット5 – RESET / dW / ADC0 / PCINT5

RESET:外部リセット入力はアクティブローであり、RSTDISBLヒューズをプログラム解除(「1」)することで有効になります。 このピンをRESETピンとして使用すると、プルアップがアクティブになり、出力ドライバとデジタル入力が非アクティブになります。

dW:debugWIRE Enable(DWEN)ヒューズがプログラムされ、ロックビットがプログラムされていない場合、ターゲットデバイス内のdebugWIREシステムがアクティブになります。 RESETポートピンは、プルアップが有効になっているワイヤAND(オープンドレイン)双方向I / Oピンとして構成され、ターゲットとエミュレータ間の通信ゲートウェイになります。

ADC0: アナログからデジタルへのコンバータ、チャネル 0。

PCINT5:ピン変更割り込みソース5。

ポートB、ビット4 – XTAL2 / CLKO / ADC2 / OC1B / PCINT4

XTAL2:チップクロックオシレータピン2。内部キャリブレーション可能なRCオシレータと外部クロックを除くすべてのチップクロックソースのクロックピンとして使用されます。 クロックピンとして使用する場合、I / Oピンとして使用することはできません。 内部校正可能なRCオシレータまたは外部クロックをチップクロックソースとして使用する場合、PB4は通常のI / Oピンとして機能します。

CLKO:分割されたシステムクロックはピンPB4に出力できます。 分割されたシステムクロックは、PORTB4およびDDB4の設定に関係なく、CKOUTヒューズがプログラムされている場合に出力されます。 リセット時にも出力されます。

ADC2: アナログからデジタルへのコンバータ、チャネル 2。

OC1B:出力比較一致出力:PB4ピンは、出力(DDB1セット)として構成されている場合、タイマー/カウンター4比較一致Bの外部出力として機能できます。 OC1BピンはPWMモードタイマ機能の出力ピンでもあります。

PCINT4:ピン変更割り込みソース4。

ポートB、ビット3 – XTAL1 / CLKI / ADC3 / OC1B / PCINT3

XTAL1:チップクロック発振器ピン1。内部校正可能なRC発振器を除くすべてのチップクロックソースに使用されます。 クロックピンとして使用する場合、I / Oピンとして使用することはできません。

CLKI:外部クロックソースからのクロック入力。を参照してください。 26ページの「外部クロック」.

ADC3: アナログからデジタルへのコンバータ、チャネル 3。

OC1B:反転出力比較一致出力:PB3ピンは、出力(DDB1セット)として構成されている場合、タイマー/カウンター3比較一致Bの外部出力として機能できます。 OC1Bピンは、PWMモードタイマー機能の反転出力ピンでもあります。

PCINT3:ピン変更割り込みソース3。

ポートB、ビット2 – SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2

SCK:マスタークロック出力、SPIチャネル用のスレーブクロック入力ピン。 SPIがスレーブとして有効になっている場合、このピンはDDB2の設定に関係なく入力として構成されます。 SPIがマスターとして有効になっている場合、このピンのデータ方向はDDPB2によって制御されます。 ピンがSPIによって強制的に入力になる場合でも、プルアップはPORTB2ビットによって制御できます。

ADC1: アナログからデジタルへのコンバータ、チャネル 1。

T0:タイマー/カウンター0カウンターソース。

USCK:XNUMX線式モードのユニバーサルシリアルインターフェースクロック。

SCL:USIXNUMX線式モード用のXNUMX線式モードシリアルクロック。

INT0:外部割り込みソース0。

PCINT2:ピン変更割り込みソース2。

ポートB、ビット1 – MISO / AIN1 / OC0B / OC1A / DO / PCINT1

MISO:マスターデータ入力、SPIチャネルのスレーブデータ出力ピン。 SPIがマスターとして有効になっている場合、このピンはDDB1の設定に関係なく入力として構成されます。 SPIがスレーブとして有効になっている場合、このピンのデータ方向はDDB1によって制御されます。 ピンがSPIによって強制的に入力になる場合でも、プルアップはPORTB1ビットによって制御できます。

AIN1:アナログコンパレータの負の入力。 デジタルポート機能がアナログコンパレータの機能に干渉しないように、内部プルアップをオフにしてポートピンを入力として設定します。

OC0B:出力比較一致出力。 PB1ピンはTimer / Counter0 Compare Match Bの外部出力として機能できます。この機能を提供するには、PB1ピンを出力(DDB1セット(0))として構成する必要があります。 OCXNUMXBピンはPWMモードタイマ機能の出力ピンでもあります。

OC1A:出力比較一致出力:PB1ピンは、出力(DDB1セット)として構成されている場合、タイマー/カウンター1比較一致Bの外部出力として機能できます。 OC1AピンはPWMモードタイマ機能の出力ピンでもあります。

DO:1線式モードのユニバーサルシリアルインターフェースデータ出力。 1線式モードデータ出力はPORTB1値を上書きし、データ方向ビットDDB1がセットされている場合(XNUMX)にポートに駆動されます。 方向が入力され、PORTBXNUMXが設定されている場合(XNUMX)、PORTBXNUMXは引き続きプルアップを有効にします。

PCINT1:ピン変更割り込みソース1。

ポートB、ビット0 – MOSI / AIN0 / OC0A / OC1A / DI / SDA / AREF / PCINT0

MOSI:SPIマスターデータ出力、SPIチャネルのスレーブデータ入力。 SPIがスレーブとして有効になっている場合、このピンはDDB0の設定に関係なく入力として構成されます。 SPIがマスターとして有効になっている場合、このピンのデータ方向はDDB0によって制御されます。 ピンがSPIによって強制的に入力になる場合でも、プルアップはPORTB0ビットによって制御できます。

AIN0:アナログコンパレータの正の入力。 デジタルポート機能がアナログコンパレータの機能に干渉しないように、内部プルアップをオフにしてポートピンを入力として設定します。

OC0A:出力比較一致出力。 PB0ピンは、出力として構成されている場合、Timer / Counter0 Compare Match Aの外部出力として機能できます(DDB0セット(0))。 OCXNUMXAピンはPWMモードタイマ機能の出力ピンでもあります。

OC1A:反転出力比較一致出力:PB0ピンは、出力(DDB1セット)として構成されている場合、タイマー/カウンター0比較一致Bの外部出力として機能できます。 OC1Aピンは、PWMモードタイマー機能の反転出力ピンでもあります。

SDA:XNUMX線式モードのシリアルインターフェースデータ。

AREF:ADCの外部アナログリファレンス。 ピンが外部リファレンスまたは内部ボリュームとして使用されている場合、PB0ではプルアップおよび出力ドライバが無効になります。tageAREFピンに外部コンデンサを使用したリファレンス。

DI:USIXNUMX線式モードでのデータ入力。 USI XNUMX線式モードは通常のポート機能を上書きしないため、ピンをDI機能の入力として構成する必要があります。

PCINT0:ピン変更割り込みソース0。

表10-4 そして 表10-5 ポートBの代替機能を、に示されているオーバーライド信号に関連付けます。 図10-5 58ページ目.

表 10-4. PB[5:3] での代替機能の信号のオーバーライド

信号名 PB5 / RESET / ADC0 / PCINT5 PB4/ADC2/XTAL2/ OC1B/PCINT4 PB3/ADC3/XTAL1/ OC1B/PCINT3
プオエ

RSTDISBL(1) •DWEN(1)

0 0
プオーフ 1 0 0
DDOE RSTDISBL(1) •DWEN(1) 0 0
DDOV debugWire送信 0 0
PVOE 0 OC1B有効

OC1B有効

PVOV 0 OC1B OC1B
PTOE 0 0 0
死ぬ

RSTDISBL(1) +(PCINT5•PCIE + ADC0D)

PCINT4•PCIE + ADC2D PCINT3•PCIE + ADC3D
ディオフ ADC0D ADC2D ADC3D
DI PCINT5入力 PCINT4入力 PCINT3入力
エイオー RESET入力、ADC0入力 ADC2入力 ADC3入力

注:ヒューズが「0」(プログラム済み)の場合。

表 10-5. PB[2:0] での代替機能の信号のオーバーライド

信号名 PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/

PCINT0

プオエ USI_TWO_WIRE 0 USI_TWO_WIRE
プオーフ 0 0 0
DDOE USI_TWO_WIRE 0 USI_TWO_WIRE
DDOV (USI_SCL_HOLD + PORTB2) • DDB2 0  

(SDA + PORTB0)•DDB0

PVOE USI_TWO_WIRE•DDB2 OC0B有効化+ OC1A有効化+ USI_THREE_WIRE

OC0A有効化+ OC1A有効化+(USI_TWO_WIRE

DDB0)

PVOV 0 OC0B + OC1A + DO

OC0A + OC1A

PTOE 米国ITC 0 0
死ぬ PCINT2•PCIE + ADC1D + USISIE PCINT1•PCIE + AIN1D PCINT0•PCIE + AIN0D + USISIE
ディオフ ADC1D AIN1D AIN0D
DI T0 / USCK / SCL / INT0 /

PCINT2入力

PCINT1入力 DI / SDA / PCINT0入力
エイオー ADC1入力 アナログコンパレータの負の入力 アナログコンパレータ正入力

レジスタの説明

MCUCR –MCU制御レジスタ

少し 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 ボス ISC01 ISC00 MCUCR
読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み R 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

ビット6– PUD:プルアップ無効

このビットが0に書き込まれると、DDxnおよびPORTxnレジスタがプルアップを有効にするように構成されている場合でも({DDxn、PORTxn} = 01bXNUMX)、I / Oポートのプルアップは無効になります。 見る 54ページの「ピンの構成」 この機能の詳細については。

PORTB –ポートBデータレジスタ

少し 7 6 5 4 3 2 1 0
0x18 ポートB5 ポートB4 ポートB3 ポートB2 ポートB1 ポートB0 ポートB
読み取り/書き込み R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

DDRB –ポートBデータ方向レジスタ

少し 7 6 5 4 3 2 1 0
0x17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB
読み取り/書き込み R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 0 0 0 0 0 0

PINB –ポートBの入力ピンアドレス

少し 7 6 5 4 3 2 1 0
0x16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
読み取り/書き込み R R 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み 読み取り/書き込み
初期値 0 0 該当なし 該当なし 該当なし 該当なし 該当なし 該当なし

PWM付き8ビットタイマー/カウンター0

特徴

XNUMXつの独立した出力比較ユニット

ダブルバッファ出力比較レジスタ

比較一致のタイマーをクリア(自動リロード)

グリッチのない、位相補正パルス幅変調器(PWM)

可変PWM周期

周波数発生器

0つの独立した割り込みソース(TOV0、OCF0A、およびOCFXNUMXB)

以上view

Timer / Counter0は、8つの独立した出力比較ユニットを備え、PWMをサポートする汎用XNUMXビットTimer / Counterモジュールです。 正確なプログラム実行タイミング(イベント管理)とウェーブ生成が可能です。

8ビットタイマー/カウンターの簡略化されたブロック図を以下に示します。 図11-1。 I / Oピンの実際の配置については、を参照してください。 25ページの「ピン配列ATtiny45 / 85/2」。 I / OビットとI / Oピンを含むCPUアクセス可能なI / Oレジスタは太字で示されています。 デバイス固有のI / Oレジスタとビット位置は 77ページの 『レジスターの説明』.

タイマー/カウンター (TCNT0) と出力コンペア レジスタ (OCR0A と OCR0B) は 8 ビット レジスタです。 割り込み要求 (図では Int.Req. と略記) 信号はすべて、Timer Interrupt Flag Register (TIFR) に表示されます。 すべての割り込みは、タイマー割り込みマスク レジスタ (TIMSK) で個別にマスクされます。 TIFR と TIMSK は図には示されていません。

タイマ/カウンタは、プリスケーラを介して、または T0 ピンの外部クロック ソースによって、内部でクロックできます。 クロック選択ロジック ブロックは、タイマー/カウンターがその値をインクリメント (またはデクリメント) するために使用するクロック ソースとエッジを制御します。 クロック ソースが選択されていない場合、タイマー/カウンターは非アクティブです。 クロック選択ロジックからの出力は、タイマー クロック (clkT0) と呼ばれます。

ダブルバッファ出力比較レジスタ(OCR0AおよびOCR0B)は、常にタイマ/カウンタ値と比較されます。 比較の結果を波形ジェネレータで使用して、出力比較ピン(OC0AおよびOC0B)にPWMまたは可変周波数出力を生成できます。 69ページの「出力比較ユニット」を参照してください。 詳細については。 Compare Matchイベントは、出力比較割り込み要求を生成するために使用できる比較フラグ(OCF0AまたはOCF0B)も設定します。

定義

このセクションの多くのレジスタおよびビットリファレンスは、一般的な形式で記述されています。 小文字の「n」はタイマー/カウンター番号(この場合は0)を置き換えます。小文字の「x」は出力比較ユニット(この場合は比較ユニットAまたは比較ユニットB)を置き換えます。ただし、レジスタまたはビットを使用する場合は、プログラムでは、正確な形式を使用する必要があります。つまり、Timer / Counter0カウンター値にアクセスするためのTCNT0などです。

の定義 表11-1 また、ドキュメント全体で広く使用されています。

表11-1. 定義

絶え間ない 説明
カウンターは0x00になるとBOTTOMに到達します
マックス カウンターは、0xFF(255進数のXNUMX)になると最大に達します。
トップ カウンタは、カウントシーケンスの最大値と等しくなるとTOPに到達します。 TOP値は、固定値0xFF(MAX)またはOCR0Aレジスタに格納されている値に割り当てることができます。 割り当ては操作モードによって異なります

タイマー/カウンタープリスケーラーとクロックソース

タイマー/カウンターは、内部または外部のクロックソースによってクロックを供給できます。 クロックソースは、Timer / Counter0制御レジスタ(TCCR0B)にあるClock Select(c)ビットによって制御されるClockSelectロジックによって選択されます。

プリスケーラ付き内部クロックソース

Timer/Counter0 は、システム クロックによって (CS0[2:0] = 1 を設定することにより) 直接クロックすることができます。 これにより、システム クロック周波数 (fCLK_I/O) に等しい最大タイマー/カウンター クロック周波数で、最速の動作が提供されます。 または、プリスケーラからの XNUMX つのタップの XNUMX つをクロック ソースとして使用できます。 プリスケール クロックの周波数は次のいずれかです。

プリスケーラリセット

プリスケーラはフリーランニングです。つまり、Timer / Counter0のクロック選択ロジックとは独立して動作します。 プリスケーラはタイマー/カウンターのクロック選択の影響を受けないため、プリスケーラーの状態は、プリスケーリングされたクロックが使用される状況に影響を及ぼします。 XNUMXつの元ampプリスケーリングアーティファクトのファイルは、タイマー/カウンターがプリスケーラーによって有効化され、クロックされる場合です(6> CS0 [2:0]> 1)。 タイマーが有効になってから最初のカウントが発生するまでのシステムクロックサイクル数は、1〜N + 1システムクロックサイクルにすることができます。ここで、Nはプリスケーラ除数(8、64、256、または1024)に等しくなります。

プリスケーラリセットを使用して、タイマー/カウンターをプログラム実行に同期させることができます。

外部クロックソース

T0 ピンに適用される外部クロック ソースは、タイマー/カウンター クロック (clkT0) として使用できます。 T0ピンはampピン同期ロジックによってシステムクロックサイクルごとにXNUMX回導かれます。 同期(samp導かれた)信号はそれから渡されます

エッジ検出器を介して。 図11-2 に、T0 同期およびエッジ検出ロジックの機能的に等価なブロック図を示します。 レジスタは、内部システム クロック (clkI/O) のポジティブ エッジでクロックされます。 ラッチは、内部システム クロックがハイの期間はトランスペアレントです。

エッジ検出器は、検出した正 (CS0[0:2] = 0) または負 (CS7[0:2] = 0) エッジごとに 6 つの clkTXNUMX パルスを生成します。

OCR0xレジスタは、パルス幅変調(PWM)モードのいずれかを使用するとダブルバッファリングされます。 通常モードとClearTimer on Compare(CTC)動作モードでは、ダブルバッファリングは無効になっています。 ダブルバッファリングは、OCR0x比較レジスタの更新をカウントシーケンスの上部または下部に同期します。 同期により、奇数長の非対称PWMパルスの発生が防止され、出力にグリッチが発生しなくなります。

OCR0xレジスタへのアクセスは複雑に見えるかもしれませんが、そうではありません。 ダブルバッファリングが有効になっている場合、CPUはOCR0xバッファレジスタにアクセスできます。ダブルバッファリングが無効になっている場合、CPUはOCR0xに直接アクセスします。

力の出力比較

非PWM波形生成モードでは、強制出力比較(FOC0x)ビットに0を書き込むことにより、コンパレータの一致出力を強制できます。 比較一致を強制しても、OCF0xフラグが設定されたり、タイマーがリロード/クリアされたりすることはありませんが、実際の比較一致が発生したかのようにOC0xピンが更新されます(COM1x [0:0]ビット設定は、OCXNUMXxピンが設定またはクリアされるかどうかを定義します)または切り替え)。

TCNT0書き込みによる一致ブロッキングの比較

TCNT0レジスタへのすべてのCPU書き込み操作は、タイマーが停止している場合でも、次のタイマークロックサイクルで発生する比較一致をブロックします。 この機能により、タイマー/カウンタークロックが有効になっているときに割り込みをトリガーすることなく、OCR0xをTCNT0と同じ値に初期化できます。

出力比較ユニットの使用

任意の動作モードでTCNT0を書き込むと、0つのタイマークロックサイクルですべての比較一致がブロックされるため、タイマー/カウンターが実行されているかどうかに関係なく、出力比較ユニットを使用するときにTCNT0を変更するとリスクが伴います。 TCNT0に書き込まれた値がOCR0x値と等しい場合、比較一致が失われ、誤った波形生成が発生します。 同様に、カウンタがダウンカウントしているときは、BOTTOMに等しいTCNTXNUMX値を書き込まないでください。

OC0xのセットアップは、ポートピンのデータ方向レジスタを出力に設定する前に実行する必要があります。 OC0x値を設定する最も簡単な方法は、通常モードで強制出力比較(FOC0x)ストローブビットを使用することです。 OC0xレジスタは、波形生成モード間で変更しても値を保持します。

COM0x [1:0]ビットは、比較値と一緒にダブルバッファリングされないことに注意してください。 COM0x [1:0]ビットの変更はすぐに有効になります。

一致出力ユニットの比較

比較出力モード(COM0x [1:0])ビットには0つの機能があります。 波形ジェネレータは、COM1x [0:0]ビットを使用して、次の比較一致での出力比較(OC0x)状態を定義します。 また、COM1x [0:0]ビットはOCXNUMXxピンの出力ソースを制御します。 図11-6 は、COM0x [1:0]ビット設定の影響を受けるロジックの簡略図を示しています。 図中のI / Oレジスタ、I / Oビット、およびI / Oピンは太字で示されています。 COM0x [1:0]ビットの影響を受ける一般的なI / Oポート制御レジスタ(DDRおよびPORT)の部分のみが示されています。 OC0x状態を参照する場合、参照は内部OC0xレジスタであり、OC0xピンではありません。 システムリセットが発生すると、OC0xレジスタは「0」にリセットされます。

OC0A / OC0BがI / Oピンに接続されている場合、COM0A [1:0] / COM0B [1:0]ビットの機能はWGM0 [2:0]ビットの設定に依存します。 表11-2 は、WGM0 [1:0]ビットが通常モードまたはCTCモード(非PWM)に設定されている場合のCOM0x [2:0]ビットの機能を示しています。

表 11-2. コンペア出力モード、非 PWM モード

COM0A1 COM0B1 COM0A0 COM0B0 説明
0 0 通常のポート動作、OC0A / OC0Bは切断されています。
0 1 比較一致でOC0A / OC0Bを切り替えます
1 0 比較一致でOC0A / OC0Bをクリアする
1 1 比較一致でOC0A / OC0Bを設定します

表11-3 は、WGM0 [1:0]ビットが高速PWMモードに設定されている場合のCOM0x [2:0]ビットの機能を示しています。

表 11-3. コンペア出力モード、高速 PWM モード(1)

COM0A1 COM0B1 COM0A0 COM0B0 説明
0 0 通常のポート動作、OC0A / OC0Bは切断されています。
0 1 予約済み
1 0 比較一致でOC0A / OC0Bをクリアし、OC0A / OC0BをBOTTOMに設定します(非反転モード)
1 1 比較一致でOC0A / OC0Bを設定し、BOTTOMでOC0A / OC0Bをクリアします(反転モード)

注: OCR0A または OCR0B が TOP に等しく、COM0A1/COM0B1 が設定されている場合、特殊なケースが発生します。 この場合、コンペアマッチは無視されますが、セットまたはクリアは BOTTOM で行われます。 見る 73ページの「高速PWMモード」 詳細についてはこちらをご覧ください。

表11-4 は、WGM0 [1:0]ビットが位相補正PWMモードに設定されている場合のCOM0x [2:0]ビットの機能を示しています。

表 11-4. コンペア出力モード、位相補正 PWM モード(1)

COM0A1 COM0B1 COM0A0 COM0B0 説明
0 0 通常のポート動作、OC0A / OC0Bは切断されています。
0 1 予約済み
1 0 アップカウント時に比較一致でOC0A / OC0Bをクリアします。 ダウンカウントする場合は、比較一致でOC0A / OC0Bを設定します。
1 1 アップカウント時に比較一致でOC0A / OC0Bを設定します。 ダウンカウント時に比較一致でOC0A / OC0Bをクリアします。

注: 1. OCR0A または OCR0B が TOP に等しく、COM0A1/COM0B1 が設定されている場合、特殊なケースが発生します。 この場合、コンペア マッチは無視されますが、セットまたはクリアは TOP で行われます。 見る 74ページの「位相補正PWMモード」 詳細についてはこちらをご覧ください。

ビット3:2 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット1:0 – WGM0 [1:0]:波形生成モード

これらのビットは、TCCR02BレジスタにあるWGM0ビットと組み合わせて、カウンタのカウントシーケンス、最大(TOP)カウンタ値のソース、および使用する波形生成のタイプを制御します。を参照してください。 表11-5。 タイマー/カウンターユニットでサポートされている動作モードは、通常モード(カウンター)、比較一致時のタイマーのクリア(CTC)モード、およびXNUMX種類のパルス幅変調(PWM)モードです(を参照)。 「動作モード」 71ページ目).

表 11-5. 波形生成モード ビット 説明

モード WGM02 WGM01 WGM00 タイマー/カウンターの動作モード トップ でのOCRxの更新 TOVフラグがオンに設定
0 0 0 0 普通 0xFF すぐに マックス(1)
1 0 0 1 PWM、位相補正 0xFF トップ (1)
2 0 1 0 CTC OCRA すぐに マックス(1)
3 0 1 1 高速PWM 0xFF (1) マックス(1)
4 1 0 0 予約済み
5 1 0 1 PWM、位相補正 OCRA トップ (1)
6 1 1 0 予約済み
7 1 1 1 高速PWM OCRA (1) トップ

ビット7– FOC0A:強制出力比較A

FOC0Aビットは、WGMビットが非PWMモードを指定している場合にのみアクティブになります。

ただし、将来のデバイスとの互換性を確保するために、PWMモードで動作しているときにTCCR0Bが書き込まれるときは、このビットをゼロに設定する必要があります。 FOC0Aビットに論理0を書き込むと、波形生成ユニットで即時比較一致が強制されます。 OC0A出力は、COM1A [0:0]ビット設定に従って変更されます。 FOC0Aビットはストローブとして実装されていることに注意してください。 したがって、強制比較の効果を決定するのは、COM1A [0:XNUMX]ビットに存在する値です。

FOC0Aストロボは割り込みを生成せず、OCR0AをTOPとして使用するCTCモードでタイマーをクリアしません。 FOC0Aビットは常にゼロとして読み取られます。

ビット6– FOC0B:強制出力比較B

FOC0Bビットは、WGMビットが非PWMモードを指定している場合にのみアクティブになります。

ただし、将来のデバイスとの互換性を確保するために、PWMモードで動作しているときにTCCR0Bが書き込まれるときは、このビットをゼロに設定する必要があります。 FOC0Bビットに論理0を書き込むと、波形生成ユニットで即時比較一致が強制されます。 OC0B出力は、COM1B [0:0]ビットの設定に従って変更されます。 FOC0Bビットはストローブとして実装されていることに注意してください。 したがって、強制比較の効果を決定するのは、COM1B [0:XNUMX]ビットに存在する値です。

FOC0Bストロボは割り込みを生成せず、OCR0BをTOPとして使用するCTCモードでタイマーをクリアしません。

FOC0Bビットは常にゼロとして読み取られます。

ビット5:4 –解像度:予約済みビット

これらのビットはATtiny25 / 45/85の予約ビットであり、常にゼロとして読み取られます。

ビット3– WGM02:波形生成モード

の説明を参照してください 0ページの「TCCR77A–タイマー/カウンター制御レジスタA」.

ビット2:0 – CS0 [2:0]:クロック選択

XNUMXつのクロック選択ビットは、タイマー/カウンターが使用するクロックソースを選択します。

表 11-6. クロック選択ビットの説明

CS02 CS01 CS00 説明
0 0 0 クロックソースなし(タイマー/カウンターが停止)
0 0 1 clkI/O/(プリスケーリングなし)
0 1 0 clkI/O/8 (プリスケーラから)
0 1 1 clkI/O/64 (プリスケーラから)
1 0 0 clkI/O/256 (プリスケーラから)
1 0 1 clkI/O/1024 (プリスケーラから)
1 1 0 T0ピンの外部クロックソース。 立ち下がりエッジのクロック。
1 1 1 T0ピンの外部クロックソース。 立ち上がりエッジのクロック。

タイマー/カウンター0に外部ピンモードが使用されている場合、ピンが出力として構成されている場合でも、T0ピンの遷移によってカウンターがクロックされます。 この機能により、カウントのソフトウェア制御が可能になります。

カウンターユニットと比較ユニット

Timer / Counter1の一般的な動作は非同期モードで説明されており、同期モードでの動作は、これらXNUMXつのモードに違いがある場合にのみ記載されています。 図12-2 は、タイマ/カウンタ1同期レジスタのブロック図とレジスタ間の同期遅延を示しています。 すべてのクロックゲーティングの詳細が図に示されているわけではないことに注意してください。 Timer / Counter1レジスタの値は、内部同期レジスタを通過します。これにより、カウンタの動作に影響を与える前に、入力同期遅延が発生します。 レジスタTCCR1、GTCCR、OCR1A、OCR1B、およびOCR1Cは、レジスタを書き込んだ直後に読み戻すことができます。 入出力の同期のため、Timer / Counter1(TCNT1)レジスタとフラグ(OCF1A、OCF1B、およびTOV1)のリードバック値が遅延します。

Timer / Counter1は、高解像度と高精度の使用法を備えており、プリスケーリングの機会が少なくなっています。 また、最大8 MHz(または低速モードでは64 MHz)のクロック速度を使用して、32つの正確な高速1ビットパルス幅変調器をサポートできます。 このモードでは、Timer / CounterXNUMXと出力比較レジスタは、オーバーラップしない非反転および反転出力を備えたデュアルスタンドアロンPWMとして機能します。 参照する 86ページ目 この関数の詳細については。 同様に、高いプリスケーリングの機会により、このユニットは、低速の機能や、アクションの頻度が低い正確なタイミング機能に役立ちます。

図 12-2。 タイマー/カウンター 1 同期レジスタのブロック図。

タイマー/カウンター1とプリスケーラーを使用すると、プリスケーラーが非同期モードの高速64 MHz(または低速モードでは32 MHz)PCKクロックで動作しているときに、任意のクロックソースからCPUを実行できます。

システムクロック周波数は、PCK周波数の1分のXNUMXより低くなければならないことに注意してください。 非同期タイマー/カウンターXNUMXの同期メカニズムには、システムクロックがハイのときにPCKの少なくともXNUMXつのエッジが必要です。 システムクロックの周波数が高すぎると、データまたは制御値が失われるリスクがあります。

次の 図12-3 は、Timer / Counter1のブロック図を示しています。

表 12-1. PWM モードでのコンペア モード選択

COM1x1 COM1x0 出力比較ピンへの影響
0 0 OC1xが接続されていません。 OC1xが接続されていません。
0 1 比較一致でOC1xがクリアされました。 TCNT1 = $ 00の場合に設定します。 比較一致で設定されたOC1x。 TCNT1 = $ 00の場合にクリアされます。
1 0 比較一致でOC1xがクリアされました。 TCNT1 = $ 00のときに設定します。 OC1xが接続されていません。
1 1 OC1x比較一致に設定します。 TCNT1 = $ 00のときにクリアされます。 OC1xが接続されていません。

ADCの特性

表 21-8. ADC 特性、シングルエンド チャネル。 TA = -40°C ~ +85°C

シンボル パラメータ 状態 タイプ マックス ユニット
解決 10 ビット
絶対精度(INL、DNL、および量子化、ゲイン、オフセットエラーを含む) VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

2 LSb の
VREF = 4V、VCC = 4V、

ADCクロック= 1 MHz

3 LSb の
VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

ノイズリダクションモード

1.5 LSb の
VREF = 4V、VCC = 4V、

ADCクロック= 1 MHz

ノイズリダクションモード

2.5 LSb の
積分非直線性(INL)(オフセットおよびゲインキャリブレーション後の精度) VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

1 LSb の
微分非直線性(DNL) VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

0.5 LSb の
ゲインエラー VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

2.5 LSb の
オフセット誤差 VREF = 4V、VCC = 4V、

ADCクロック= 200 kHz

1.5 LSb の
変換時間 フリーランニングコンバージョン 14 280 μs
クロック周波数 50 1000 kHzの
車両識別番号 入力ボリュームtage グランド VREF V
入力帯域幅 38.4 kHzの
アフリカ 外部リファレンスVol。tage 2.0 VCCC の V
ヴィント 内部巻tageリファレンス 1.0 1.1 1.2 V
内部2.56Vリファレンス (1) Vcc > 3.0V 2.3 2.56 2.8 V
RREF 32
アナログ入力抵抗 100
ADC出力 0 1023 LSb の

注: 1. 値はガイドラインのみです。

表 21-9. ADC 特性、差動チャネル (ユニポーラ モード)。 TA = -40°C ~ +85°C

シンボル パラメータ 状態 タイプ マックス ユニット
解決 ゲイン= 1x 10 ビット
ゲイン= 20x 10 ビット
絶対精度(INL、DNL、および

量子化、ゲイン、オフセットエラー)

ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

10.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

20.0 LSb の
積分非直線性(INL)(オフセットおよびゲインキャリブレーション後の精度) ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

4.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

10.0 LSb の
ゲインエラー ゲイン= 1x 10.0 LSb の
ゲイン= 20x 15.0 LSb の
オフセット誤差 ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

3.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

4.0 LSb の
変換時間 フリーランニングコンバージョン 70 280 μs
クロック周波数 50 200 kHzの
車両識別番号 入力ボリュームtage グランド VCCC の V
VDIFF 入力差動Voltage VREF/ゲイン V
入力帯域幅 4 kHzの
アフリカ 外部リファレンスVol。tage 2.0 VCC – 1.0 V
ヴィント 内部巻tageリファレンス 1.0 1.1 1.2 V
内部2.56Vリファレンス (1) Vcc > 3.0V 2.3 2.56 2.8 V
RREF 基準入力抵抗 32
アナログ入力抵抗 100
ADC変換出力 0 1023 LSb の

注: 値はガイドラインのみです。

表 21-10. ADC 特性、差動チャネル (バイポーラ モード)。 TA = -40°C ~ +85°C

シンボル パラメータ 状態 タイプ マックス ユニット
解決 ゲイン= 1x 10 ビット
ゲイン= 20x 10 ビット
絶対精度(INL、DNL、および

量子化、ゲイン、オフセットエラー)

ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

8.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

8.0 LSb の
積分非直線性(INL)(オフセットおよびゲインキャリブレーション後の精度) ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

4.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

5.0 LSb の
ゲインエラー ゲイン= 1x 4.0 LSb の
ゲイン= 20x 5.0 LSb の
オフセット誤差 ゲイン= 1x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

3.0 LSb の
ゲイン= 20x

VREF = 4V、VCC = 5V

ADCクロック= 50 – 200 kHz

4.0 LSb の
変換時間 フリーランニングコンバージョン 70 280 μs
クロック周波数 50 200 kHzの
車両識別番号 入力ボリュームtage グランド VCCC の V
VDIFF 入力差動Voltage VREF/ゲイン V
入力帯域幅 4 kHzの
アフリカ 外部リファレンスVol。tage 2.0 VCC – 1.0 V
ヴィント 内部巻tageリファレンス 1.0 1.1 1.2 V
内部2.56Vリファレンス (1) Vcc > 3.0V 2.3 2.56 2.8 V
RREF 基準入力抵抗 32
アナログ入力抵抗 100
ADC変換出力 -512 511 LSb の

命令セットの概要

記憶術 オペランド 説明 手術 #時計
算術および論理命令
追加 Rd、Rr XNUMXつのレジスタを追加します Rd←Rd+Rr Z、C、N、V、H 1
アドバンスト Rd、Rr キャリーXNUMXレジスタで追加 Rd ← Rd + Rr + C Z、C、N、V、H 1
ADIW Rdl、K Wordに即時追加 Rdh:Rdl ← Rdh:Rdl + K Z、C、N、V、S 2
サブ Rd、Rr XNUMXつのレジスタを減算します Rd ← Rd – Rr Z、C、N、V、H 1
スビ Rd、K レジスタから定数を減算します Rd ← Rd – K Z、C、N、V、H 1
SBC Rd、Rr キャリーXNUMXレジスタで減算 Rd ← Rd – Rr – C Z、C、N、V、H 1
SBCI Rd、K Reg。からCarryConstantで減算します。 Rd ← Rd – K – C Z、C、N、V、H 1
SBIW Rdl、K Wordから即時減算 Rdh:Rdl ← Rdh:Rdl – K Z、C、N、V、S 2
そして Rd、Rr 論理ANDレジスタ Rd←Rd・Rr Z、N、V 1
アンディ Rd、K 論理ANDレジスタと定数 Rd←Rd・K Z、N、V 1
OR Rd、Rr 論理ORレジスタ Rd ← Rd v Rr Z、N、V 1
オリ Rd、K 論理ORレジスタと定数 Rd ← Rd v K Z、N、V 1
エネルギー回収 Rd、Rr 排他的論理和レジスタ Rd←Rd⊕Rr Z、N、V 1
コム Rd XNUMXの補数 Rd ← 0xFF − Rd Z、C、N、V 1
NEG Rd 2の補数 Rd ← 0x00 − Rd Z、C、N、V、H 1
SBR Rd、K レジスタにビットを設定します Rd ← Rd v K Z、N、V 1
CBR Rd、K レジスタのビットをクリアする Rd←Rd・(0xFF-K) Z、N、V 1
インク Rd インクリメント Rd ← Rd + 1 Z、N、V 1
12月 Rd デクリメント Rd←Rd−1 Z、N、V 1
TST Rd ゼロまたはマイナスのテスト Rd←Rd・Rd Z、N、V 1
CLRL Rd レジスターのクリア Rd ← Rd ⊕ Rd Z、N、V 1
セル Rd レジスタの設定 Rd ← 0xFF なし 1
分岐命令
RJMP k 相対ジャンプ PC ← PC + k + 1 なし 2
IJMP (Z)への間接ジャンプ PC ← Z なし 2
RCAL k 相対サブルーチン呼び出し PC ← PC + k + 1 なし 3
電話する (Z)への間接呼び出し PC ← Z なし 3
リターン サブルーチンリターン PC ← スタック なし 4
ネットワーク 割り込みリターン PC ← スタック I 4
CPSE Rd、Rr 比較、等しい場合はスキップ if (Rd = Rr) PC ← PC + 2 or 3 なし 1年2月3日
CP Rd、Rr 比較する Rd−Rr Z、N、V、C、H 1
クリック単価 Rd、Rr キャリーと比較する Rd − Rr − C Z、N、V、C、H 1
消費者物価指数 Rd、K 登録と即時を比較する Rd−K Z、N、V、C、H 1
SBRC Rr、b レジスタのビットがクリアされた場合はスキップ if (Rr(b)=0) PC ← PC + 2 or 3 なし 1年2月3日
SBRS Rr、b レジスタのビットが設定されている場合はスキップ if (Rr(b)=1) PC ← PC + 2 or 3 なし 1年2月3日
エスビック P、b I / Oレジスタのビットがクリアされた場合はスキップ if (P(b)=0) PC ← PC + 2 or 3 なし 1年2月3日
SBIS P、b I / Oレジスタのビットが設定されている場合はスキップします if (P(b)=1) PC ← PC + 2 or 3 なし 1年2月3日
BRBS s、k ステータスフラグが設定されている場合は分岐 if (SREG(s) = 1) then PC←PC+k + 1 なし 1/2
BRBC s、k ステータスフラグがクリアされた場合に分岐 if (SREG(s) = 0) then PC←PC+k + 1 なし 1/2
ブレク k 等しい場合は分岐 if (Z = 1) then PC ← PC + k + 1 なし 1/2
ブルネ k 等しくない場合は分岐 if (Z = 0) then PC ← PC + k + 1 なし 1/2
BRCS k キャリーセットの場合は分岐 if (C = 1) then PC ← PC + k + 1 なし 1/2
BRCC k キャリーがクリアされた場合のブランチ if (C = 0) then PC ← PC + k + 1 なし 1/2
BRSH k 同じかそれ以上の場合は分岐 if (C = 0) then PC ← PC + k + 1 なし 1/2
ブルロ k 低い場合は分岐 if (C = 1) then PC ← PC + k + 1 なし 1/2
BRMI k マイナスの場合は分岐 if (N = 1) then PC ← PC + k + 1 なし 1/2
BRPL k Plusの場合は分岐 if (N = 0) then PC ← PC + k + 1 なし 1/2
BRGE k 大きいか等しい場合は分岐、署名済み (N ⊕ V= 0) の場合 PC ← PC + k + 1 なし 1/2
BRLT k ゼロ未満の場合は分岐、署名済み (N ⊕ V= 1) の場合 PC ← PC + k + 1 なし 1/2
BRHS k ハーフキャリーフラグが設定されている場合は分岐 if (H = 1) then PC ← PC + k + 1 なし 1/2
BRHC k ハーフキャリーフラグがクリアされた場合の分岐 if (H = 0) then PC ← PC + k + 1 なし 1/2
BRTS k Tフラグが設定されている場合は分岐 if (T = 1) then PC ← PC + k + 1 なし 1/2
BRTC k Tフラグがクリアされた場合に分岐 if (T = 0) then PC ← PC + k + 1 なし 1/2
BRVS k オーバーフローフラグが設定されている場合は分岐 if (V = 1) then PC ← PC + k + 1 なし 1/2
BRVC k オーバーフローフラグがクリアされた場合の分岐 if (V = 0) then PC ← PC + k + 1 なし 1/2
ブリー k 割り込みが有効な場合は分岐 もし ( I = 1) なら PC ← PC + k + 1 なし 1/2
ブリッジ k 割り込みが無効な場合に分岐 もし ( I = 0) なら PC ← PC + k + 1 なし 1/2
ビットおよびビットテストの手順
SBI P、b I / Oレジスタのビットを設定します I/O(P,b) ← 1 なし 2
CBI P、b I / Oレジスタのビットをクリア I/O(P,b) ← 0 なし 2
LS-L の Rd 論理シフト左 Rd(n+1) ← Rd(n)、Rd(0) ← 0 Z、C、N、V 1
LS-R の Rd 論理シフト右 Rd(n) ← Rd(n+1)、Rd(7) ← 0 Z、C、N、V 1
ROLE Rd キャリーを通して左に回転 Rd(0)←C、Rd(n+1)← Rd(n)、C←Rd(7) Z、C、N、V 1
ROR Rd キャリーを右に回転 Rd(7)←C、Rd(n)← Rd(n+1)、C←Rd(0) Z、C、N、V 1
自動翻訳 Rd 算術右シフト Rd(n) ← Rd(n+1)、n=0..6 Z、C、N、V 1
記憶術 オペランド 説明 手術 #時計
スワップ Rd ニブルを交換する Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) なし 1
BSET s フラグセット SREG ← 1 SREG 1
BCLR s フラグクリア SREG ← 0 SREG 1
イギリス標準時 Rr、b レジスタからTへのビットストア T ← Rr(b) T 1
ビル Rd、b Tからレジスタへのビット負荷 Rd(b) ← T なし 1
SEC セットキャリー 中 ← 1 C 1
CLC クリアキャリー 中 ← 0 C 1
セン 負のフラグを設定する N ← 1 N 1
CLN ネガティブフラグをクリアする N ← 0 N 1
経済特区 ゼロフラグを設定する Z ← 1 Z 1
CLZ ゼロフラグをクリア Z ← 0 Z 1
セイ グローバル割り込み有効化 私 ← 1 I 1
コマンドライン グローバル割り込み無効 私 ← 0 I 1
社会 符号付きテストフラグを設定する 小 ← 1 S 1
CLSA 符号付きテストフラグをクリアする 小 ← 0 S 1
SEV XNUMXの補数オーバーフローを設定します。 V ← 1 V 1
CLV XNUMXの補数のオーバーフローをクリア V ← 0 V 1
セット SREGにTを設定します T ← 1 T 1
CLTS SREGのTをクリアする T ← 0 T 1
SEH SREGでハーフキャリーフラグを設定する 中 ← 1 H 1
CLH SREGのハーフキャリーフラグをクリアする 中 ← 0 H 1
データ転送手順
動画 Rd、Rr レジスタ間を移動する Rd←Rr なし 1
MOVW Rd、Rr コピーレジスタワード Rd+1:Rd ← Rr+1:Rr なし 1
LDI Rd、K 即時ロード Rd ← K なし 1
LD Rd、X 間接ロード Rd ← (X) なし 2
LD Rd、X + 間接およびポストインクをロードします。 Rd ← (X)、X ← X + 1 なし 2
LD Rd、– X 間接およびXNUMX月以前をロードします。 X←X-1、Rd←(X) なし 2
LD Rd、Y 間接ロード Rd ← (Y) なし 2
LD Rd、Y + 間接およびポストインクをロードします。 Rd ← (Y)、Y ← Y + 1 なし 2
LD Rd、– Y 間接およびXNUMX月以前をロードします。 Y←Y-1、Rd←(Y) なし 2
LDDD Rd、Y + q 変位を伴う間接荷重 Rd ← (Y + q) なし 2
LD Rd、Z 間接ロード Rd ← (Z) なし 2
LD Rd、Z + 間接およびポストインクをロードします。 Rd ← (Z)、Z ← Z+1 なし 2
LD Rd、-Z 間接およびXNUMX月以前をロードします。 Z←Z-1、Rd←(Z) なし 2
LDDD Rd、Z + q 変位を伴う間接荷重 Rd ← (Z + q) なし 2
末日聖徒イエス・キリスト教会 Rd、k SRAMから直接ロード Rd ← (k) なし 2
ST X、Rr 間接ストア (X) ← Rr なし 2
ST X +、Rr 間接およびポストインクを保存します。 (X) ← Rr、X ← X + 1 なし 2
ST – x、Rr 間接およびXNUMX月以前に保存します。 X←X-1、(X)←Rr なし 2
ST Y、Rr 間接ストア (Y) ← Rr なし 2
ST Y +、Rr 間接およびポストインクを保存します。 (Y) ← Rr、Y ← Y + 1 なし 2
ST – Y、Rr 間接およびXNUMX月以前に保存します。 Y←Y-1、(Y)←Rr なし 2
性感染症 Y + q、Rr 変位を伴う間接保存 (Y + q) ← Rr なし 2
ST Z、Rr 間接ストア (Z) ← Rr なし 2
ST Z +、Rr 間接およびポストインクを保存します。 (Z) ← Rr、Z ← Z + 1 なし 2
ST -Z、Rr 間接およびXNUMX月以前に保存します。 Z←Z-1、(Z)←Rr なし 2
性感染症 Z + q、Rr 変位を伴う間接保存 (Z + q) ← Rr なし 2
技術 k、Rr SRAMに直接保存 (k) ← Rr なし 2
LPPM プログラムメモリのロード R0 ← (ズ) なし 3
LPPM Rd、Z プログラムメモリのロード Rd ← (Z) なし 3
LPPM Rd、Z + プログラムメモリのロードとポストインク Rd ← (Z)、Z ← Z+1 なし 3
SPM プログラムメモリの保存 (z) ← R1:R0 なし
IN Rd、P 港で Rd←P なし 1
P、Rr アウトポート P←Rr なし 1
押す Rr スタック上のプッシュレジスタ スタック ← Rr なし 2
ポップ Rd スタックからのポップレジスタ Rd ← スタック なし 2
MCU制御手順
いいえ 操作なし なし 1
寝る 寝る (スリープ機能の具体的な説明を参照してください) なし 1
WDR ウォッチドッグリセット (WDR /タイマーの特定の説明を参照してください) なし 1
壊す 壊す
速度(MHz) (1) 供給量tage(V) 温度範囲 パッケージ (1) 注文コード (1)
10 1.8 – 5.5 産業

(-40°C〜 + 85°C) (1)

8P3 ATtiny45V-10PU
8S2 ATtiny45V-10SU ATtiny45V-10SUR ATtiny45V-10SH ATtiny45V-10SHR
8X ATtiny45V-10XU ATtiny45V-10XUR
20M1 ATtiny45V-10MU ATtiny45V-10MUR
20 2.7 – 5.5 産業

(-40°C〜 + 85°C) (1)

8P3 ATtiny45-20PU
8S2 ATtiny45-20SU ATtiny45-20SUR

ATtiny45-20SH ATtiny45-20SHR

8X ATtiny45-20XU ATtiny45-20XUR
20M1 ATtiny45-20MU ATtiny45-20MUR

注:1。速度と供給量の比較tage、セクションを参照 21.3ページの「速度」.

すべてのパッケージは鉛フリー、ハロゲン化物フリー、完全にグリーンであり、有害物質の制限に関する欧州指令(RoHS)に準拠しています。

コード指標

H:NiPdAuリード仕上げ

U:つや消しスズ

R:テープ&リール

これらのデバイスは、ウェーハの形で供給することもできます。 詳細な注文情報と最小数量については、最寄りのAtmel営業所にお問い合わせください。

正誤表

エラッタATtiny25

このセクションの改訂レターは、ATtiny25デバイスの改訂を示しています。

改訂D-F

既知の正誤表はありません。

リビジョンB– C

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

低いクロック周波数および/または低い供給量でEEPROMを読み取ろうとしていますtageは無効なデータになる可能性があります。

問題の修正/回避策

クロック周波数が1MHz未満で、供給容量がXNUMXMHz未満の場合は、EEPROMを使用しないでください。tageは2V未満です。 動作周波数を1MHz以上に上げることができない場合は、tageは2V以上である必要があります。 同様に、供給量がtageを2V以上に上げることはできません。その場合、動作周波数は1MHzを超える必要があります。

この機能は温度に依存することが知られていますが、特性化されていません。 ガイドラインは室温についてのみ記載されています。

改訂A

sではありませんamp導いた。

エラッタATtiny45

このセクションの改訂レターは、ATtiny45デバイスの改訂を示しています。

レブF-G

既知の正誤表はありません

改訂 D – E

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

低いクロック周波数および/または低い供給量でEEPROMを読み取ろうとしていますtageは無効なデータになる可能性があります。

問題の修正/回避策

クロック周波数が1MHz未満で、供給容量がXNUMXMHz未満の場合は、EEPROMを使用しないでください。tageは2V未満です。 動作周波数を1MHz以上に上げることができない場合は、tageは2V以上である必要があります。 同様に、供給量がtageを2V以上に上げることはできません。その場合、動作周波数は1MHzを超える必要があります。

この機能は温度に依存することが知られていますが、特性化されていません。 ガイドラインは室温についてのみ記載されています。

リビジョンB– C

PLLがロックしない

アプリケーションコードから読み取ったEEPROMは、ロックビットモード3では機能しません。

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

OC1Bでのタイマーカウンター1PWM出力の生成-XOC1Bが正しく機能しない

PLLがロックしない

6.0 MHz未満の周波数では、PLLはロックされません

問題の修正/回避策

PLLを使用する場合は、6.0MHz以上で実行してください。

アプリケーションコードから読み取ったEEPROMは、ロックビットモード3では機能しません。

メモリロックビットLB2およびLB1がモード3にプログラムされている場合、EEPROMの読み取りはアプリケーションコードから機能しません。

問題の修正/回避策

アプリケーションコードをEEPROMから読み取る必要がある場合は、ロックビット保護モード3を設定しないでください。

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

低いクロック周波数および/または低い供給量でEEPROMを読み取ろうとしていますtageは無効なデータになる可能性があります。

問題の修正/回避策

クロック周波数が1MHz未満で、供給容量がXNUMXMHz未満の場合は、EEPROMを使用しないでください。tageは2V未満です。 動作周波数を1MHz以上に上げることができない場合は、tageは2V以上である必要があります。 同様に、供給量がtageを2V以上に上げることはできません。その場合、動作周波数は1MHzを超える必要があります。

この機能は温度に依存することが知られていますが、特性化されていません。 ガイドラインは室温についてのみ記載されています。

OC1Bでのタイマーカウンター1PWM出力の生成–XOC1Bが正しく機能しない

タイマカウンタ1PWM出力OC1B-XOC1Bが正しく動作しません。 制御ビットCOM1B1とCOM1B0がそれぞれCOM1A1とCOM1A0と同じモードにある場合にのみ、OC1B-XOC1B出力は正しく機能します。

問題の修正/回避策

唯一の回避策は、COM1A [1:0]およびCOM1B [1:0]制御ビットで同じ制御設定を使用することです。データシートの表14-4を参照してください。 Tiny45 revDの問題が修正されました。

改訂A

パワーダウンの消費電力が高すぎる

割り込みにシングルステップインすると、DebugWIREは通信を​​失います

PLLがロックしない

アプリケーションコードから読み取ったEEPROMは、ロックビットモード3では機能しません。

供給量が少ないとEEPROMの読み取りに失敗する場合がありますtage /低クロック周波数

パワーダウンの消費電力が高すぎる

XNUMXつの状況では、パワーダウンの消費電力が高すぎます。 これらは:

外部クロックはヒューズによって選択されますが、I / OPORTは引き続き出力として有効になっています。

EEPROMは、パワーダウンに入る前に読み取られます。

VCCは4.5ボルト以上です。

免責事項: このドキュメントの情報は、Atmel 製品に関連して提供されています。 禁反言またはその他の方法による明示的または黙示的なライセンスは、本書または Atmel 製品の販売に関連して付与されるものではありません。 ATMEL での販売に関する ATMEL 利用規約に規定されている場合を除きます。 WEBサイト、ATMEL は一切の責任を負わず、商品性、特定の目的への適合性、または非侵害の黙示の保証を含むがこれらに限定されない、その製品に関する明示的、黙示的、または法定の保証を否認します。 ATMEL は、使用または使用不能に起因する直接的、間接的、結果的、懲罰的、特別または偶発的な損害 (損失と利益、事業の中断、または情報の損失に対する損害を含むがこれらに限定されない) に対して一切責任を負わないものとします。この文書は、ATMEL がそのような損害の可能性について知らされていたとしても.

Atmel は、このドキュメントの内容の正確性または完全性に関して表明または保証を行わず、いつでも予告なしに仕様および製品の説明を変更する権利を留保します。 Atmel は、ここに含まれる情報を更新する約束をしません。 特に別段の規定がない限り、Atmel 製品は自動車用途には適しておらず、また使用してはなりません。 Atmel 製品は、生命をサポートまたは維持することを目的としたアプリケーションのコンポーネントとして使用することを意図、承認、または保証していません。

参考文献

コメントを残す

あなたのメールアドレスは公開されません。 必須項目はマークされています *