Arduinoをプログラマーとして使用する場合、ATtiny85でクロック速度ヒューズを設定するにはどうすればよいですか?


17

私はこのチュートリアルに従って、ArduinoでATtiny85をプログラミングし、それを使用して(ピエゾスピーカーを通して)いくつかのトーンを再生します。私は音を正しいピッチで取得することに苦労しています(ATtiny85ではtone()関数がサポートされていないため、手動で波形を作成しています)。

問題はArduinoとATtinyの異なるクロック速度にあると考えられます。ATtinyでクロック速度を変更できることを理解していますが、arduino環境を使用してこれを達成するにはどうすればよいですか?


ちなみにこれは本当にクールです、共有してくれてありがとう!
vicatcu

脱帽!このようにattiny85をプログラムすることはできませんでした。avrdudeがフラッシュを書き込もうとすると、常に「プログラマーの同期が取れていません」というエラーが発生します。...にもかかわらずバス海賊の作品でarduinoのスワッピング
JonathanD

@Jon:「プログラマーが同期していない」根本原因はわかりませんが、AVR Studioを使用すると、プログラミングの頻度を調整できます。あなたは二度とそれを旋回を与える場合には一見の価値あるかもしれない、AVRDUDEで同様のオプションがあるかもしれません
ニック・T

回答:


2

Arduinoソフトウェア(ライブラリおよびすべて)は、16MHzで動作していると想定しています。あなたが実際に走っている時計にその仮定を適用するなら...物事はうまくいくはずです。内部発振器でTiny85を実行していると仮定すると、1MHzで動作すると思うので、すべての遅延ステートメント(および他の時間の概念)に16を掛けます。

内部発振器が提供するよりも高い精度が必要な場合は、外部水晶または共振器の使用を検討する必要がありますが、それを機能させるにはAVRのヒューズ設定を変更する必要があり、AVRISPのようなプログラマが必要になると思いますAVR Studioでそれを行うmkII(私の推奨)。

ArduinoISPのスケッチについてはあまり知りませんが、プログラムをターゲットチップ(Mega328上のボードではない)にアップロードするためにISPプロトコルを少し強打しているように見えます。ArduinoISPについては、http: //arduino.cc/en/Tutorial/ArduinoISP、fwiwで文書化されています。現在、UNOを使用してArduinoISPスケッチを実行できないことに注意してください。スケッチを使用してArduinoをAVR Studio GUIツールを使用するための実行可能なインターフェースにすることができるように思えません。

編集:ものが追いついたようで、ArduinoISPにとってUNOは現在実行可能です-すべてのコメントをありがとう


UNOについての頭のおかげで、私は実際に328に交換された168チップでDuemilanoveを使用しており、通常のATtinyスケッチを取得してArduinoISP経由で適切にアップロードできます。あなたの/ 16チップを試してみます!
fearoffours

@fearoffours ArduinoISPに基づいて、ヒューズを特定の値に設定するスケッチを書くこともできます。ArduinoISPがFlashを作成できる場合、ヒューズを設定するためにAVRデータシートに記載されているISPプロトコルをビットバンできないと考えることができる理由はありません。
vicatcu

1
(あなたが遅いクロックを実行している、それはより多くの同じ時間を取得するためにダニがかかります)16によって代わりに除算を16で乗算言うこと@fearoffours、また、私はちょうど実現(と更新後の)
vicatcu

私はそれが一年以上後であることを知っていますが、私は無事にAVRプログラマーとしてUNOを使用しています。(ただし、私はにArduinoISPスケッチを変更しなかったdelay(20)のinsted delay(40)のその定義にvoid heartbeat()。)
JellicleCat

私はそれがさらに後であることを知っていますが、スケッチ内の何も変更せずにAVRプログラマーとして私のウノをうまく使用しました。
ingh.am 14

4

Arduino UNO + ArduinoISPを正常に使用しています。

コマンドに-Uフラグを追加してavrdude、3つのATtinyヒューズのいずれかまたはすべてを設定します。

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

クロックの選択は、3番目のヒューズのビット[3:0]で行われます(「ヒューズ下位バイト」)。次のように設定して、外部水晶(8MHz以上)を使用します。

-U lfuse:w:0x6f:m

その定義(私が推測する)は次のようなものでなければなりません:[低バイトのヒューズ]:[書き込み]:[16進値]:[手動で設定]

このバイトの上位4ビットのデフォルト値はです0110ので、6in はそのままにし0x6fて、2桁目f(デフォルト値は2)のみを変更します。

注:プロセスに予想よりも長いまたは短い時間がかかる場合は、クロックプリスケーラーとF _ CPUの定義を確認してください


上記の-U lfuse:w:0x6f:mavrdudeオプションを使用して、AtTiny85をブリックしただけであることに注意してください。高電圧セットアップを使用してリセットする必要があります。そのため、自分が何をしているのか知らずにヒューズをリセットしようとしている人(私のような人)に注意を促します。
MV

@MVヒューズをリセットしようとしたときに、実際にブロックしたのか、外部XOを使用しなかったのですか?
いまいましい14年

使用する外部クロックがありませんでした。より厳密な意味でのブリックとはどういう意味ですか?
JellicleCat 14年

@JellicleCat、外部XOを使用するようにヒューズを設定する場合、それ以降はヒューズをプログラム/設定/リセットするためにmcuに接続された外部XOを使用する必要があります。そうしないと、extが必要なため、mcuがブリックされている(〜動作しなくなった)印象を与えます。XOは、ISPを介してプログラミングする場合でも機能します。
いまいましい14年

わかった。問題を理解したら、XOを期待するようにヒューズを設定し、チップを復元するためにArduinoを使用して定在波を供給し、XOに役立てました。
JellicleCat 14年

3

同じグループ(MITのHigh-Low Tech)の関連するチュートリアル(Programming an ATtiny w / Arduino 1.0)を使用してみてください。

簡単な要約:Arduino IDEの[ツール]-> [ボード]メニューから、ATtiny85と実行する周波数(1または8 Mhz内部クロック、または20 Mhz外部クリスタル)を選択し、[ツール]-> [ブートローダーの書き込み]を使用します。希望のスピードボードを選択すると、クロック速度と同期するために、delay()およびその他の時間関連のArduino関数の動作が変更されると思います。

私はいくつかのATtiny84チップを使用して、このアプローチで成功しました。delayMicroseconds()を使用してサーボに送信されるパルスを手動で制御するために必要な、より繊細なタイミングと同様に、単純な点滅プログラムが修正されました。


1

あなたが使用してみてください、ArduinoISPを使用している表示されますAVR Studioのかのコマンドラインオプションをavrdude。ArduinoISPの記述方法に応じて、Atmel AVRISP mkIIなどと同様に機能する場合があります。


Arduino自体がISPプログラマーだとは思いませんでした
...-vicatcu

記事をより詳しく読むと、ArduinoISPスケッチを使用してこれを行うことができるように見えます-毎日新しいことを学びます!:)
vicatcu

Windowsを使用している場合、AVRスタジオは問題ありません。Eclipse用のAVRプラグインがあることを知ってください(これはSloeberとして知られるArduinoプラグインとは異なります)。[プロパティ]-> [AVR]の下に、素敵なヒューズダイアログがあります。しかし、はい、OPは「コア」周波数と「書き込みブートローダー」を使用したいだけです。
-mckenzm

1

ATtiny85のデフォルトのヒューズ設定は、lfuse 0x62、hfuse 0xdf、efuse 0xffです。これは、クロックが1 MHzであるため、「8で除算」する内部RC(8 MHz)発振器を使用します。

ヒューズ設定の詳細については、http://www.engbedded.com/fusecalcを参照してください

ArduinoISPをプログラマとして使用している場合でも、avrdudeを直接使用してATtiny85のヒューズ設定を変更できます。

手動でヒューズを変更してクロックを変更する場合attiny85.build.f_cpuは、[arduino_folder] \ hardware \ attiny45_85 \ boards.txtファイルの行を必ず編集してください。


+1これは非常に便利です。特にクロック速度が1MHzであるため、おかげで
-fearoffours

0

ArduinoISPでヒューズを設定できると思いますが、Arduino IDEではなくavrdudeでこのリンクを確認してください。自分でテストしたことはありません。

チュートリアルでは、Arduino UNOを使用できることを明示的に示しており、テストして動作したので確認できます。したがって、ArduinoISPページは古く、UNO警告は無視する必要があります。UNOが最初のバッチのUNOである場合、ブートローダーに問題がある可能性が高いため、ブートローダーを再フラッシュする必要があります。詳細については、このページを確認してください(シリアル番号は無視してください。すべてのUNOはそのシリーズのものではなく、問題がありました)。

チュートリアルからダウンロードした移植済みコアライブラリは、1MHzの内部発振器(boards.txtファイルで確認済み)を使用するように記述されているため、タイミングの問題は移植済みコアライブラリまたはコードにある可能性があります。

敬具


0
  1. ATTiny85を含む「ボードマネージャー」からATTinyボードを選択します。これは「ツール」メニューにあります。現在、これには「16MHz内部PLL」が含まれていると思います。(http://drazzy.com/package_drazzy.com_index.jsonからインストールできます

  2. 必要に応じて、ATTiny85を明示的に選択します。

  3. 時計を選択してください。詳細がわかるまで、内部時計を選択してください。

  4. メニュー項目として[ブートローダーの書き込み]をクリックします。

非常に低い値を選択すると、MCUをプログラムできなくなる可能性があります。これが意図する場合は、ヒューズをリセットするスペアまたは高電圧プログラマーがない限り、最後にこれを行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.