Arduinoを介したAtmelAT89シリーズのプログラミング
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
このチュートリアルでは、ArduinoUnoを使用して16進ファイルをAT89c52に書き込む方法をいくつかの簡単な手順で説明します。このためには、AT89c52をArduino Unoに接続し、LEDをAt89c52に接続することでLED表示を提供する必要があります。
ステップ1:部品表
- Arduino UNO
- AT89C52マイクロコントローラー
- 10uFコンデンサ
- ジャンパー線
- 8.2kΩ抵抗
- 510オームコンデンサ
- LED
- 12MHzクリスタル
- 2 x33pFコンデンサ
ステップ2:マイクロコントローラーを接続する <図>
以下のようにマイクロコントローラーを接続します:
- At89c52 Arduino Uno
- ピン6ピン5
- ピン7ピン4
- ピン8ピン3
- ピン9ピン2
ステップ3:クリスタル <図>
Atmelのピン18と19の間にCrystalを接続してから、ピン18と19の2つの33pfコンデンサをAtmelのグラウンドに接続します。完全な回路図については、回路図のセクションを参照してください。
ステップ4:VCCとGND <図>
Arduino Unoの5vピンをAtmelの40番目のピンに接続し、GNDピンをAtmelの20番目のピンに接続します。
ステップ5:LEDのインターフェース <図> <図>
回路図セクションで提供される回路図の助けを借りてLEDをインターフェースします。
ステップ6:ソフトウェア <図>
16進ファイルを89c52に書き込むには8051SPIプログラマーが必要です。リンクはソフトウェアセクションで提供されます。 Arduino UNOに提供されたコードをアップロードすると、プログラマーの準備が整います。
コード
- 無題のファイル
無題のファイル C / C ++
#defineダミーデータ0xAA#define RDY 75#define NRDY 76const int _MISO =4; const int _MOSI =5; const int _CLK =3; const int RST =2; / *変数定義ブロック* / byte data; byte AL 、AH; // 16ビットアドレスバイトlockByte; //ロックビットをここに埋め込みますbyteSigH、SigL; //署名Bytesvoidsetup(){pinMode(_MISO、INPUT); pinMode(_MOSI、OUTPUT); pinMode(_CLK、OUTPUT); pinMode(RST、OUTPUT); Serial.begin(115200); //ホストPCの設定に依存します} void loop(){while(!Serial.available()); //文字を待つif(Serial.available()> 0)switch(Serial.read()){case'p ':Serial.write(progEnable());壊す;ケース 'r':readProgmem(); Serial.write(data);壊す;ケース 'a':while(!Serial.available()); AL =Serial.read();壊す;ケース 'A':while(!Serial.available()); AH =Serial.read();壊す;ケース 'd':while(!Serial.available()); data =Serial.read();壊す;ケース 'S':AH =0; AL =0; SigH =readSign(); Serial.write(SigH);壊す;ケース 's':AH =2; AL =0; SigL =readSign(); Serial.write(SigL); AH =1; AL =0; SigL =readSign(); Serial.write(SigL);壊す; // SigLケース 'o'を読み取ります:digitalWrite(RST、1); break;ケース 'c':digitalWrite(RST、0); break;ケース 'e':eraseChip(); Serial.write(RDY);壊す;ケース 'j':ブレーク;ケース 'w':writeProgmem();壊す; }} unsigned char SendSPI(unsigned char data){uint8_t retval =0; uint8_t intData =データ; int t; for(int ctr =0; ctr <7; ctr ++){if(intData&0x80)digitalWrite(_MOSI、1);それ以外の場合、digitalWrite(_MOSI、0); digitalWrite(_CLK、1); delayMicroseconds(1); t =digitalRead(_MISO); digitalWrite(_CLK、0); if(t)retval | =1;それ以外の場合、retval&=0xFE; retval <<=1; intData <<=1; delayMicroseconds(1); } if(intData&0x80)digitalWrite(_MOSI、1);それ以外の場合、digitalWrite(_MOSI、0); digitalWrite(_CLK、1); delayMicroseconds(1); t =digitalRead(_MISO); digitalWrite(_CLK、0); if(t)retval | =1;それ以外の場合、retval&=0xFE; retvalを返します。 } byte progEnable(){SendSPI(0xAC); SendSPI(0x53); SendSPI(dummyData); SendSPI(dummyData);} void destroyChip(){SendSPI(0xAC);を返します。 SendSPI(0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520);} void readProgmem(){SendSPI(0x20); SendSPI(AH); SendSPI(AL); data =SendSPI(dummyData);} void writeProgmem(){SendSPI(0x40); SendSPI(AH); SendSPI(AL); SendSPI(data);} void writeLockBits(){SendSPI(0xAC); SendSPI(lockByte); SendSPI(dummyData); SendSPI(dummyData);} void readLockBits(){SendSPI(0x24); SendSPI(dummyData); SendSPI(dummyData); lockByte =SendSPI(dummyData);} byte readSign(){SendSPI(0x28); SendSPI(AH); SendSPI(AL); SendSPI(dummyData);}を返します
回路図
製造プロセス
- Arduinoを介したAtmelAT89シリーズのプログラミング
- Arduinoを使用したRCレシーバーPPM信号の読み取り
- Arduino-シリアル経由でWebに温度を送信
- ThimbleKrox-指でマウスを操作する
- IntelCurieによるモーションセンシティブな回路制御
- BLUE_P:ワイヤレスArduinoプログラミングシールド
- Arduino-FacebookMessengerを介してドアが開くのを監視
- Arduino-ステップモーターコントローラーを使用したWeb経由の描画
- Arduino Calculator
- Arduino制御の人工キャンドルライト
- ArduinoUnoを使用した25kHz4ピンPWMファン制御