Cでプログラムするには、AVR GCC Toolchainが必要です。
Windows:
WinAVRをインストールします。これには必要なものがすべて含まれています。
DebianおよびUbuntu:
sudo apt-get install gcc-avr binutils-avr avr-libc
MacOs X:
AVR開発用のCrossPackをインストールする
また、インストール済みのArduino IDEも必要です。 ファームウェアをコントローラーにダウンロードするために必要なavrdudeユーティリティが含まれています。 CrossPackにもavrdudeが含まれていますが、CrossPackに付属するバージョンではArduinoの操作方法がわかりません。
すべてをインストールしたら、最初のプロジェクトを作成します。 まず、 Makefileを書きます 。 これにより、コンパイルとファームウェアのダウンロードのたびに長いコマンドを手動で入力する必要がなくなります。
#, . , atmega328 DEVICE = atmega168 # 16 CLOCK = 16000000 # avrdude. Arduino IDE. AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -carduino -P/dev/tty.usbserial-A600dAAQ -b19200 -D -p atmega168 OBJECTS = main.o COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) all: main.hex .co: $(COMPILE) -c $< -o $@ .So: $(COMPILE) -x assembler-with-cpp -c $< -o $@ .cs: $(COMPILE) -S $< -o $@ flash: all $(AVRDUDE) -U flash:w:main.hex:i clean: rm -f main.hex main.elf $(OBJECTS) main.elf: $(OBJECTS) $(COMPILE) -o main.elf $(OBJECTS) main.hex: main.elf rm -f main.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex avr-size --format=avr --mcu=$(DEVICE) main.elf
このファイルでは、avrdudeを実行するコマンドを入力する必要があります。 異なるシステムでは、見た目が異なります。 バージョンを確認するには、Arduino IDEを実行し、[アップロード中に詳細な出力を表示する]チェックボックスをオンにします。
スケッチをArduinoにロードし、ウィンドウの下部に表示されるメッセージを確認します。 そこでavrdude呼び出しを見つけ、-Uflashパラメーター以外をすべてコピーし、「AVRDUDE =」の後にMakefileに貼り付けます。
短いメモ:Makefileのすべてのインデントはタブ(Tabキー)を使用して行われます。 テキストエディタがこれらの文字をスペースに置き換えた場合、makeコマンドはプロジェクトのビルドを拒否します。
さて、 main.cファイルを作成しましょう。実際にはプログラムのテキストで、従来はLEDを点滅させていました。
#include <avr/io.h> #include <util/delay.h> #define LED_PIN 5 int main() { DDRB |= 1 << LED_PIN; while(1) { PORTB |= 1 << LED_PIN; _delay_ms(1000); PORTB &= ~(1 << LED_PIN); _delay_ms(1000); } return 0; }
プロジェクトの準備ができました。 プロジェクトのディレクトリでコンソールを開き、コマンド「make」を入力します。
ご覧のとおり、結果のファームウェアのサイズは180バイトのみです。 同様のArduinoスケッチは、コントローラーのメモリで1116バイトを使用します。
コンソールに戻り、「make flash」と入力して、コンパイル済みファイルをコントローラーにロードします。
ダウンロードにエラーがなかった場合、ボードの13番目の接点に接続されているLEDが楽しく点滅します。 時々avrdudeがボードを見つけられないか、タイムアウトで落ちる-この場合、USBケーブルを動かすと助けになります。 また、ボードへのアクセスの競合を避けるため、「make flash」コマンドの前にArduino IDEを閉じることを忘れないでください。
おそらく、この記事で説明されていることの多くは、ベテランの開発者には明らかなように思えます。 私は初心者のアルドゥイノイストにとって最も理解しやすい言語でプロセスを説明し、さまざまなソースから取得した情報を1か所に集めて実験的に検証しようとしました。 たぶん、この記事は誰かを数時間節約するでしょう。
マイクロコントローラのマスタリングで頑張ってください!
明けましておめでとうございます!