Atmel AT89-serie programmeren via Arduino
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
|
Apps en online services
| ||||
|
Over dit project
In deze zelfstudie laat ik je zien hoe je je Hex-bestand naar AT89c52 kunt branden met Arduino Uno in slechts enkele eenvoudige stappen. Hiervoor moeten we AT89c52 koppelen aan Arduino Uno en deze led-indicaties geven via interface-LED naar At89c52.
Stap 1:Stuklijst
- Arduino UNO
- AT89C52-microcontroller
- 10uF condensator
- Jumperdraden
- 8,2kohm-weerstand
- 510 ohm condensator
- LED
- 12 MHz kristal
- 2 x 33pF condensator
Stap 2:Microcontroller aansluiten
Sluit de microcontroller aan zoals hieronder vermeld:
- At89c52 Arduino Uno
- Pin 6 Pin 5
- Pin 7 Pin 4
- Pin 8 Pin 3
- Pin 9 Pin 2
Stap 3:Kristal
Sluit een kristal aan op pin 18 en 19 van Atmel en sluit vervolgens twee 33pf-condensatoren van pin 18 en 19 aan op aarde van Atmel. Zie de sectie Schema's voor het volledige schakelschema.
Stap 4:VCC en GND
Sluit de 5v-pin van Arduino Uno aan op de 40e pin van Atmel en GND-pin op de 20e pin van Atmel.
Stap 5:Interfacing LED
Interface-LED met behulp van het schakelschema in de sectie Schema's.
Stap 6:Software
We hebben 8051 SPI Programmer nodig om Hex-bestand naar 89c52 te branden. De link wordt geleverd in de sectie Software. Upload de code die is verstrekt aan Arduino UNO en uw programmeur is klaar.
Code
- Naamloos bestand
Naamloos bestandC/C++
#define dummyData 0xAA#define RDY 75#define NRDY 76const int _MISO =4;const int _MOSI =5;const int _CLK =3;const int RST =2;/* Variabel definitieblok */byte data;byte AL ,AH; // 16-bit adresbyte lockByte; // sluit hierbij slotbits in SigH,SigL; // Signature Bytesvoid setup(){pinMode(_MISO, INPUT);pinMode(_MOSI, OUTPUT);pinMode(_CLK, OUTPUT);pinMode(RST, OUTPUT);Serial.begin(115200); // hangt af van de instelling van de host-pc}void loop(){ while (!Serial.available()); // wacht op karakter if (Serial.available()> 0) switch (Serial.read()) { case 'p':Serial.write(progEnable()); pauze; geval 'r':readProgmem(); Serieel.schrijven(gegevens); pauze; geval 'a':while(!Serial.available()); AL =Serieel.lezen(); pauze; geval 'A':while(!Serial.available()); AH =Serieel.lezen(); pauze; geval 'd':while(!Serial.available()); data =Serieel.lezen(); pauze; geval 'S':AH =0; AL =0; SigH =readSign(); Serieel.schrijven (Zucht); pauze; zaak 's':AH =2; AL =0; SignL =readSign(); Serieel.schrijven (SigL); AH =1; AL =0; SignL =readSign(); Serieel.schrijven (SigL); pauze; // lees SigL case 'o':digitalWrite(RST,1);break; geval 'c':digitalWrite(RST,0);break; geval 'e':eraseChip(); Serieel.schrijven (RDY); pauze; geval 'j':breken; geval 'w':writeProgmem(); pauze; }}unsigned char SendSPI(unsigned char data){ uint8_t retval =0; uint8_t intData =gegevens; int t; for (int ctr =0; ctr <7; ctr++) {if (intData &0x80) digitalWrite(_MOSI,1); anders digitalWrite(_MOSI,0); digitalWrite(_CLK,1); vertragingMicroseconden(1); t =digitalRead(_MISO); digitalWrite(_CLK,0); als (t) terugval |=1; anders ophalen &=0xFE; terugval<<=1; intData<<=1; vertragingMicroseconden(1); } if (intData &0x80) digitalWrite(_MOSI,1); anders digitalWrite(_MOSI,0); digitalWrite(_CLK,1); vertragingMicroseconden(1); t =digitalRead(_MISO); digitalWrite(_CLK,0); als (t) terugval |=1; anders ophalen &=0xFE; terughalen; }byte progEnable(){ SendSPI(0xAC); SendSPI (0x53); SendSPI(dummyData); return SendSPI(dummyData);}void eraseChip(){ SendSPI(0xAC); SendSPI (0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520);}void readProgmem(){ SendSPI(0x20); StuurSPI(AH); StuurSPI(AL); data =SendSPI(dummyData);}void writeProgmem(){ SendSPI(0x40); StuurSPI(AH); StuurSPI(AL); SendSPI(data);}nietig writeLockBits(){ SendSPI(0xAC); SendSPI(lockByte); SendSPI(dummyData); SendSPI(dummyData);}nietig readLockBits(){ SendSPI(0x24); SendSPI(dummyData); SendSPI(dummyData); lockByte =SendSPI(dummyData);}byte readSign(){ SendSPI(0x28); StuurSPI(AH); StuurSPI(AL); retourneer SendSPI(dummyData);}
Schema's
Productieproces
- Atmel AT89-serie programmeren via Arduino
- PPM-signaal van de RC-ontvanger lezen met Arduino
- Arduino - Stuur temperatuur naar internet via serieel
- ThimbleKrox - Muisbediening met je vingers
- Bewegingsgevoelige circuitbesturing via Intel Curie
- BLUE_P:Wireless Arduino Programming Shield
- Arduino - Monitoring Door Open via Facebook Messenger
- Arduino - Tekenen via internet met stappenmotorcontroller
- Arduino-rekenmachine
- Arduino gecontroleerde kunstmatige kaarslichten
- 25 kHz 4-pins PWM-ventilatorregeling met Arduino Uno