AVRマイクロコントローラーとAda言語

この記事では、Rolf EbertによるAVR-Adaプロジェクト( sourceforge.net/projects/avr-ada )へのリンクを共有し、マイクロコントローラー上のアマチュアプロジェクトでのAda言語の使用例を紹介します。 この記事は、私のように、C言語と完全に友達ではない人に役立つかもしれません。 例として、ありふれたデバイス-DS18B20センサー上の温度計とLED表示付きのATtiny13マイクロコントローラーを取り上げましょう。



温度計







パート1.ソフトウェアコンポーネント



ファームウェアを開発するには、以下をダウンロードする必要があります。

1.1。 WinAVR-20100110( sourceforge.net/projects/winavr/files/WinAVR/20100110 )-アセンブラーおよびCでファームウェアを開発するためのSDK Ada構文強調表示機能を備えた「Programmers Notepad」が含まれています。

1.2。 AVR-Ada-1.1.0( sourceforge.net/projects/avr-ada/files/avr-ada/bin_windows )-WinAVR用のGNATコンパイラーとAdaライブラリー。 サンプルプログラムが含まれています。

1.3。 プログラマー 私の場合、これはプログラマーにバンドルされているAvrOSPIIです。



AVR-Adaのダウンロードセクションにはバージョン1.1と1.2があります。 インストールを簡単にするために、古いバージョンを使用することをお勧めします。新しいバージョンでは、インストーラーにない追加のライブラリ(dll)がいくつか必要になるためです。 バージョン1.2をインストールする場合、不足している部分はMinGW( sourceforge.net/projects/mingw/files )にあります。



AVR-Adaは同じディレクトリのWinAVRの上にインストールする必要があります。 コンパイルはmakeユーティリティを使用して実行されるため、ディレクトリC:\ WinAVR-20100110 \ utils \ binおよびC:\ WinAVR-20100110 \ binがPATH環境変数に含まれている必要があります。



パート2.ハードウェアコンポーネント



次のデバイスが必要です。

2.1。 プログラマー-私の場合-Inex PX-400は、「村」店の品揃えによって決定されます。

2.2。 温度計とプログラマー用の電源-5V携帯電話用の充電器が適しています

2.3。 実際には温度計。



スキーム



このデバイスは、ATtiny13マイクロコントローラー( www.atmel.com/devices/attiny13.aspx)、DS18B20温度センサー、少なくとも100オームの電流制限抵抗器、およびLEDで構成されています。 センサーは、1-wireバスを介してマイクロコントローラーのPB4ピンに接続されます。 センサーをプログラマーの接続に使用する端子(RESET、SCK、MOSI、MISO)に接続してはならないことに注意してください。データ交換におけるセンサーの介入は予測できない結果を招く可能性があるためです。 1線バスの説明では、漂遊モード用に4.7 kOhm以下のプルアップ抵抗が必要です。 タイヤの長さが長い場合、この値を小さくすることもお勧めします。 この場合、バスの長さは最小限であり、寄生電力は必要ないため、マイクロコントローラに組み込まれた20-50 kOhmのプルアップ抵抗で十分です。 LEDはPB3ピンに接続されています。 LEDを端子SCK、MOSI、MISOに接続することもできますが、いくつかの追加要件を満たす必要があります。



LEDをオンにするには、マイクロコントローラーの対応する出力を「出力」モードに転送し、それに高レベルを適用する必要があります。 温度センサーとデータを交換するには、出力を個別に構成する既製のライブラリを使用します。 時間遅延を正しく動作させるには、マイクロコントローラーのクロック周波数を8 MHzに設定する必要があります(「ヒューズビット」CKDIV8 = 1)。 ATtiny13はデフォルトで1 MHzに設定されています。 インストールは、プログラマーの指示に従って実行されます。



パート3.プログラミング



記事の名前が示すように、Adaでプログラムします。 言語は習得しやすく、ソースコードは読みやすいです。 ロシア語の教科書はここで読むことができますada-ru.org/V-0.4w/index.html



LEDを点滅させることから始めましょう。 プロジェクト全体は、ソーステキスト(ファイル「Main.adb」)、プロジェクトファイル(build.gpr)、および「make」ユーティリティの構成(Makefile)で構成されます。 最後の2つは、コンパイル専用の部分に書かれています。 「Main.adb」ファイルは次のようになります。



Main.adb




リスト1






コメント付きの同じコード:

Main.adb




リスト2






センサーメモリから温度を読み取るためのコードを使用して例を拡張しましょう。 上記のファイルにOne_Wireライブラリ(one_wire.ads、one_wire.adb、one_wire-init_comm.adb、one_wire-init_comm.adb、one_wire-avr_wiring.ads)を追加する必要があります。これらのファイルは「C:\ WinAVR-20100110 \ lib \ gnat \ onewire」フォルダにあります。 ファイル「one_wire-avr_wiring.ads」には特に注意を払う必要があります。 その中で、1線式バスの接続に使用されるマイクロコントローラーの出力を指定する必要があります。 指定されたスキームでは、次のようになります。

one_wire-avr_wiring.ads




リスト2






拡張サンプルコード:

Main.adb




リスト3






パート4.コンパイル



前述のように、コンパイルは「C:\ WinAVR-20100110 \ utils \ bin」ディレクトリにある「make」ユーティリティを使用して実行されます。 コンパイルするには、フォルダーCからMakefileプロジェクトのあるフォルダーにコピーする必要があります。\ WinAVR-20100110 \ share \ doc \ avr-ada \ apps \ examplesで、必要なパラメーターを指定します。



メイクファイル

#   MCU := attiny13 #    GNAT (  ) GPR := build.gpr #    ADA_TARGETS := main #     ...
      
      







GNATコンパイラ(GNU Adaコンパイラ)を使用すると、拡張子が「* .gpr」のプロジェクトファイルを通じてさまざまなオプションを設定できます。 プロジェクトの例は、「C:\ WinAVR-20100110 \ share \ doc \ avr-ada \ apps \ examples」フォルダにもあります。 この場合、次のようになります。

build.gpr

 project Build extends "avr_app" is --  ""   "avr_app", --    AVR-Ada for Object_Dir use "obj"; --      obj, --     for Exec_Dir use "."; --        for Source_Dirs use ("."); --        end Build;
      
      







これで、プロジェクトフォルダーに移動してコンパイルを試みることができます。

 >cd "  " >make
      
      





コンソールに登らないようにするために、プログラマーのメモ帳には、[ツール]> [WinAVR] Make allコマンドがあります。

高い確率で、コンパイルは初めて実行されません。 これは、Adaの非常に厳しい構文と細心のコンパイラによるものです。 他の言語ではエラーと見なされない多くの構文エラーを修正する必要があります。



それでもコンパイルが成功する場合、「main.hex」ファイルがルートフォルダーに表示されます。このファイルは、プログラマーの指示に従ってマイクロコントローラーにフラッシュする必要があります。



パート5.装飾



結果として得られるデバイスの本体として小さなガラスカップを使用できます(いいえ、これはウォッカを消費するためのショットグラスではなく、ろうそく足です)。

一握りのマットな白いビーズは、ディフューザーとして適しています。 明るさを滑らかに調整することで、火の滑らかな成長と減衰の印象を与えます。

温度計の負の温度を示すために青いLEDが追加されました。

例に示されている最も単純な単項表示システムに加えて、単項10進、2進、3進、およびオフセットがゼロの単項のオプションもあります。



アプリ



残念ながら、HabrahabrはAda構文の強調表示をサポートしていません(まあ、私は「初心者ユーザー」です)。そのため、写真の形でコードを挿入する必要がありました。 ここでテキスト形式のコードでアーカイブします



All Articles