Arduino UNOをプログラマーとして使用する

地下室に登って測定値を取得しないように、水道メーターの外部インターフェイスを作成するというアイデアがありました。 少し考えてから、ATTiny2313Aに落ち着きました(コストは80rで、これにArduinoを〜1000rの価格で使用します。ヒキガエルは私に与えません)+いくつかの抵抗器、ボタン、7セグメントインジケーター。 しかし、問題の前に停止しました-Arduinoとは異なり、ここではプログラマが必要です。 私はMKにあまり興味がないので、どういうわけかプログラマーがいません。 Arduinoは理論的にはこの容量で使用できますが、実際には使用しませんでした。





このテーマに関するインターネット上の多くの記事があります。 しかし、現時点では、彼らは準備のできていない人を混乱させることができます。 問題は次のとおりです-Arduinoの以前のバージョン(Duemilanove、Diecimila)には、USB-> UARTコンバーターであるFT232RLチップがありました。 Unoでは、このチップは削除され、Atmega8U2(MKはUSB-> Serialに変換するようにプログラムされています)に置き換えられました。 したがって、ほとんどの指示は私たちには合いません。 私はすでに、このアイデアは実現不可能であると思っていましたが、予想外に適切なオプションに出会いました。 彼と一緒に知り合います。 続行:



1. Arduino IDE(v1.0があります)を開き、ArduinoISP(ファイル->例-> Arduino ISP)と呼ばれるArduino Unoスケッチを入力します。 ファイルの最初の行に注意してください-プログラマをMKに接続する方法に関する重要なヒントが含まれています。

// this sketch turns the Arduino into a AVRISP // using the following pins: // 10: slave reset // 11: MOSI // 12: MISO // 13: SCK // Put an LED (with resistor) on the following pins: // 9: Heartbeat - shows the programmer is running // 8: Error - Lights up if something goes wrong (use red if that makes sense) // 7: Programming - In communication with the slave
      
      





実際、この段階の後、すでにavrispタイプのプログラマがいますが、MKを接続する必要があります。



2.データシートで目的のMK(ATTiny2313Aを持っています)を探し、ピン配置を探します。 次の写真で、私たちが興味を持っている脚に注目しました。





3.今、最も興味深い段階が来ています-プログラマーをMKに接続します。 実際、接続図は複雑なものではありませんが、1つの秘trickがあります。ArduinoのRESET出力とGND出力の間に10μF(uF)のコンデンサを接続する必要があります。 さらに、「-」出力(白いバーでマーク)をGNDに接続する必要があります。 このトリックは、ファームウェアをMKにアップロードするときにArduinoが再起動するのを防ぎます。



ピンアウトとスケッチの機能に応じて、MK脚とArduinoピンを接続します(PA2フット付きのピン10、PB5フット付きのピン11など)。 VCCは電力であり、この場合は+ 5Vであることを忘れないでください。 表示のために、次のLEDを選択しました。

9:ハートビート-緑。 プログラマが働いていることを示します。 ダウンタイム中、常に点滅します。

8:エラー-赤。 エラーで理論的に点灯しますが、見たことがない。

7:プログラミング-青。 ファームウェアをMKにアップロードすると、ArduinoのRX / TXと同様に点滅します。

私は220オームの抵抗器を通してそれらを掛けました。

組み立てられた回路は次のようになります。





4. MKのファームウェアを準備します。 テストのために、通常の点滅LEDを使用することにしました。

 #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> void init_io(void); void init_io(void) { DDRB = (1<< PB0); } int main(void) { init_io(); for (;;) { PORTB |= (1 << 0); _delay_ms(100); PORTB = 0; _delay_ms(100); } }
      
      





16進数でコンパイルします(WinAVRのMakefileからコマンドを分割します):

 avr-gcc -c -mmcu=attiny2313 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=blink_led.lst -std=gnu99 blink_led.c -o blink_led.o avr-gcc -mmcu=attiny2313 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=blink_led.o -std=gnu99 blink_led.o --output blink_led.elf -Wl,-Map=blink_led.map,--cref -lm avr-objcopy -O ihex -R .eeprom blink_led.elf blink_led.hex
      
      





そしてMKを埋めます:

 avrdude -p t2313 -P /dev/ttyACM0 -c avrisp -b 19200 -U flash:w:blink_led.hex
      
      





19200年の充填速度の制限に注意を払いたいと思います。このパラメーターがないと、長い間何かを充填しようとしましたが、avrdudeは「プログラマーが応答していません」または「同期していない」などのエラーを永続的に返しました。



その後、LEDをPB0 MKレッグに接続し(もちろん抵抗を介して)、どのように点滅するかを確認できます。



記事のソース資料:

hlt.media.mit.edu/?p=1229

hlt.media.mit.edu/?p=1695

arduino.cc/en/Tutorial/ArduinoToBreadboard

iamsuhasm.wordpress.com/tutsproj/avr-gcc-tutorial

www.instructables.com/id/ATtiny-programmer-using-Arduino-ISP



All Articles