AVRの最小Hello Word制限は0ビットです

2年前、ユーザーswap_mapの Habrahabrに「AVRの最小Hello Word制限は2バイト」というエントリがあり、最後にトリミングがありました。

点滅するLEDプログラムをさらに短く書く人はいますか?


それから私はそれは単に不可能だと思ったが、今ではそれをすることができた。







おそらく、そのようなファームウェアを書く私の方法は多少非標準であると言っておく価値があります。実際にはファームウェアがなく、空の* .hexファイルを作成するためのフォームしかないからです。 空から読み取った* .hexの内容(atmega328pマイクロコントローラーのチップ消去操作後は、次のようになります。









ポートbの放電0のLEDのみを点灯します。 フリッカーの周波数は16 kHzに等しくなります。脚がまだけいれんしていることを確認するために、次の回路を組み立てました。 重要:上アームLEDのアノードの電圧は、これらのLEDの合計順方向電圧パラメーターより小さくする必要があります。そうしないと、電源バスによって短絡され、ほとんどの場合、燃え尽きるか、非常に劣化します。 私の場合、アノードの電圧は3.2Vでした。







プロテウスのシミュレーション、元のバージョンのこのスキーム(空のファームウェアを使用)は機能しません。プロテウスは不正なオペコードを訴えます。 関係ありません、鉄で集めます。 左側にはオシロスコーププローブのワニ、右側にはコンデンサから、さらにブレッドボードに沿ったUSB ASPプログラマーケーブルがあります-別のプロジェクト。







どのように点滅しますか? そして、FUSEビットの設定で点滅します。 ATMega328pおよび他のavr mkにはCKOUTと呼ばれるビットがあり、設定すると、クロック周波数がポートbのピン0に出力されます。 同時に、クロックのソースはまったく重要ではありません。内部RC回路、外部クオーツ、または入力クロック信号さえも-これらはすべてポートに送られます。 クロックソースとして、8の除数で128 kHzの周波数を持つ内部RC回路を選択しました。したがって、最終周波数は16 kHzになります。 その結果、ヒューズは次のように設定されます。hf= DB、lf = 13、ef = 07。 同じフレームが赤で囲まれています。









それで何が機能しますか? はい、上のブレッドボードの写真では、両方のLEDが点灯しているのが見えますが、どういうわけかあまりはっきりしていません。 私の老人s1-49を接続して、ポートbのピン0の状態を確認します。







周期が60μsの場合、周波数は16 kHzをわずかに上回りますが、写真の周期は60に達せず、周波数はより大きくなります。かなりの年齢と非常に長い時間前のキャリブレーションでそれを書き留めます。 結果が達成されたと仮定できます。



このエントリが、FUSEビットを使用してMKによって使用される構成オプションを少なくとも簡単に見ることを一部の人々に強制することを願っています。

そして今、私の番です。「LEDを短く点滅させるためのプログラムを誰が書くのですか?」



All Articles