小さなコントローラーの大きな落とし穴

この投稿は、マイクロコントローラのATtiny4 / 5/9/10ファミリに関するよくある質問への回答です。 それらのほとんどは、ドキュメントを注意深く読むことで解決されます。 それでも、これらのMKを使用する際の主な違いを説明することにしました。 カットの下に、最年少のAVRについてのストーリーと、それらを知るときに生じる問題の説明があります。



画像



これらのコントローラーは、人気のあるATtiny85と同様にtinyAVRファミリーに属しますが、他のコントローラーとは大きく異なります。 まず、ATtiny4、5、9、および10のみが、小さいがはんだ付けが簡単なSOT23-6に梱包されています。 次に、TPIはプログラミングに使用されますが、これは従来のISPと互換性がありません。 第三に、これらはクロックソースをオンザフライで切り替えることができる唯一のtinyAVRであり、より現代的なソリューションにより類似しています。



家族の上級代表-ATtiny10は2009年に登場し、ほとんどのサプライヤーから簡単に購入できます。



SOT23-6パッケージのマイクロコントローラーは、小さいサイズで興味深いもので、約9平方メートルを占有します。 「鉛フリー」のケースのみがこの指標と競合できます。これは、設置が比較的難しく、多くの場合多層基板が必要です。



このような場合、Atmelに加えて、マイクロチップにはコントローラーがあります。 ただし、PIC10F2xxはパフォーマンスが劣り、ハイブリッドPIC10F3xxはプログラムメモリが少なくなりますが、ボード上にプログラマブルロジックがあり、はるかに経済的です。



これらのファミリの一部のMKの比較表を作成しました。消費量はアクティブモードとスリープモードのMHzで示されます。

役職 フラッシュ

バイト
RAM

バイト
クロッキング ADC アナログ

コンパレータ
イオン タイマー 食べ物

消費量
ATtiny4 512 32 8 MHz

128 kHz
- + - 1、16ビット

2つのPWMチャンネル
1.8-5.5 200μA

<0.1μA
ATtiny5 512 32 8 MHz

128 kHz
1、8ビット

4チャンネル
+ - 1、16ビット

2つのPWMチャンネル
1.8-5.5 200μA

<0.1μA
ATtiny9 1024 32 8 MHz

128 kHz
- + - 1、16ビット

2つのPWMチャンネル
1.8-5.5 200μA

<0.1μA
ATtiny10 1024 32 8 MHz

128 kHz
1、8ビット

4チャンネル
+ - 1、16ビット

2つのPWMチャンネル
1.8-5.5 200μA

<0.1μA
PIC10F206 768 24 4 MHz - + + 1、8ビット

PWMなし
2-5.5 <175μA

0.1μA
PIC10F222 768 23 8 MHz

4 MHz
1、8ビット

2チャンネル
- + 1、8ビット

PWMなし
2-5.5 <175μA

0.1μA
PIC10F320 〜460 64 16 MHz

32 kHz
1、8ビット

3チャンネル
- + 2、8ビット

PWMを持っている
1.8-3.6

2.3-5.5
25μA

0.02μA
PIC10F322 〜920 64 16 MHz

32 kHz
1、8ビット

3チャンネル
- + 2、8ビット

PWMを持っている
1.8-3.6

2.3-5.5
25μA

0.02μA


テーブルは、EEPROMのサイズを示していないため、EEPROMのサイズを示していません。



Atmel製品のコストは、1000個のロットあたり58〜72セントの範囲です。 PICは46〜75セントから若干安くなっていますが、SOT23-6パッケージに入れるのはそれほど簡単ではありません。 地元の店では、これらのMKはすべて70〜80ルーブルの価格で購入できます。



より強力なアセンブラAVR'ovを考えると、私の選択は明らかにそれらに傾いています。 PIC10F3xxはかなり良いように見えますが、私はまだそれらを使用する必要はありません。



ATtiny10マイクロコントローラーを知っている場合、いくつかの問題があります。 最も一般的な5つを次に示します。



1.クロック周波数が切り替わりません



これはCプログラムで特に顕著であるため、例があります。

このファミリのクロックシステムには、他のAVRとは多くの違いがあります。 対応するヒューズがないため、それらの機能は3つのレジスタ(CLKMSR、CLKPSR、およびCCP)によって実行されます。

リセット後、コントローラーは常に内部8 MHzソースから開始し、8のリミッターを備えています。別のソースに切り替えるには、CLKMSRの内容を変更し、リミッターをCLKPSRに変更する必要があります。 それらでできることは、データシートの表6-3と6-4に書かれています。

実際には、次のフォームの設計には期待される効果がありません。



CLKPSR = (1<<CLKPS2);
      
      





これにより、一部の機能は使用できなくなりますが、 クロッキングを行うレジスタは書き込み保護されています。

内容を変更するには、値0xD8CCPに書き込む必要があります。これにより、これらのレジスタを操作するための4クロックサイクルが与えられ、これらの4クロックサイクル中の割り込みは無視されます。

正しいことは:



 CCP = 0xD8; CLKMSR = (1<<CLKMS0); CLKPSR = (1<<CLKPS0);
      
      





このような割り当て式は、通常2サイクルで実行されます。 ただし、効率の低いコードが生成される場合があります。 このような問題が発生した場合、保護されたレジスタの各変更の前にCCPを書き込み、割り込み禁止で設計グループを囲みます。



2.ウォッチドッグの問題



「後背位」モードは、CCPレジスタによっても保護されているWDTCSRレジスタを介して選択されます。 ここでのコメントは不要だと思います。



3.リセットをGPIOモードにする



他のAVRマイクロコントローラーと同様に、リセット入力は入力/出力ポートモードに切り替えることができます。 シリアルプログラマでコントローラをフラッシュする機能は失われます。 ファミリは、この問題を解決するために、このラインをプログラマから切断した後、プログラミング時間全体でRESETに12ボルトを印加するだけで十分であるという点で興味深いです。



4.コントローラーがプログラムされていない、プログラマーに見えない



このファミリーを初めて使用する人には、非常に一般的な問題があります。 通常、ポイントは供給電圧、これらのコントローラーがフラッシュされるTPIインターフェース、5ボルトの電源、およびプログラマーの対応する論理レベルでのみ動作します。



5.ヒューズはどこにありますか?



問題のファミリーにはヒューズがほとんど残っていません。

0x00の下位バイトに半分に収まります。 これらは、RSTDISBL-オフリセット、WDTON-ウォッチドッグタイマーの有効化、CKOUT-ポートPB2へのクロック周波数の出力信号です。

コントローラーメモリのプログラミングおよび読み取りに対する保護に必要なロックバイトは、その場所に残りました。



明らかな低電力にもかかわらず、ATtiny10はLEDを点滅させたり、インターフェイスを変換したりすることはできません。 後で、これらの小さなコントローラー用のソフトウェアUSBについて説明します。



All Articles