Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Programmation de la série Atmel AT89 via Arduino

Composants et fournitures

Arduino UNO
× 1
LED (générique)
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE
Programmeur SPI 8051

À propos de ce projet

Dans ce didacticiel, je vais vous montrer comment graver votre fichier hexadécimal sur AT89c52 à l'aide d'Arduino Uno en quelques étapes simples. Pour cela, nous devons interfacer AT89c52 à Arduino Uno et lui donner des indications LED via une LED d'interfaçage à At89c52.

Étape 1 :Nomenclature

  • Arduino UNO
  • Microcontrôleur AT89C52
  • Condensateur 10uF
  • Cavaliers
  • Résistance de 8,2 kohms
  • Condensateur 510 ohms
  • LED
  • Cristal 12 MHz
  • 2 condensateurs 33pF

Étape 2 : Connecter le microcontrôleur

Connectez le microcontrôleur comme indiqué ci-dessous :

  • At89c52 Arduino Uno
  • Broche 6 Broche 5
  • Broche 7 Broche 4
  • Broche 8 Broche 3
  • Broche 9 Broche 2

Étape 3 :Cristal

Connectez un cristal sur les broches 18 et 19 d'Atmel, puis connectez deux condensateurs 33pf des broches 18 et 19 à la terre d'Atmel. Voir la section Schémas pour le schéma de circuit complet.

Étape 4 :VCC et GND

Connectez la broche 5v d'Arduino Uno à la 40e broche d'Atmel et la broche GND à la 20e broche d'Atmel.

Étape 5 : Interface LED

LED d'interface à l'aide du schéma de circuit fourni dans la section Schémas.

Étape 6 :Logiciel

Nous avons besoin du programmeur 8051 SPI pour graver un fichier hexadécimal sur 89c52. Le lien est fourni dans la section Logiciel. Téléchargez le code fourni à Arduino UNO et votre programmeur est prêt.

Code

  • Fichier sans titre
Fichier sans titreC/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;/* Bloc de définition de variable */byte data;byte AL ,AH; // addressbyte 16 bits lockByte; // incorporer les bits de verrouillage ici SigH,SigL; // Signature Bytesvoid setup(){pinMode(_MISO, INPUT);pinMode(_MOSI, OUTPUT);pinMode(_CLK, OUTPUT);pinMode(RST, OUTPUT);Serial.begin(115200); // dépend de la configuration du PC hôte}void loop(){ while (!Serial.available()); // attend le caractère if (Serial.available()> 0) switch (Serial.read()) { case 'p':Serial.write(progEnable()); Pause; cas 'r' :readProgmem(); Serial.write(données); Pause; cas 'a' :while(!Serial.available()); AL =Serial.read(); Pause; cas 'A' :while(!Serial.available()); AH =Serial.read(); Pause; case 'd' :while(!Serial.available()); data =Serial.read(); Pause; cas 'S' :AH =0; AL =0 ; SigH =readSign(); Serial.write(SigH); Pause; cas « s » : AH =2 ; AL =0 ; SigL =readSign(); Serial.write(SigL); AH =1 ; AL =0 ; SigL =readSign(); Serial.write(SigL); Pause; // lecture de la casse SigL 'o' :digitalWrite(RST,1) ;break ; case 'c':digitalWrite(RST,0);break; cas 'e' : effacerChip(); Serial.write(RDY); Pause; cas « j » :pause ; cas « w » : writeProgmem(); Pause; }}char non signé SendSPI (données de char non signées){ uint8_t retval =0 ; uint8_t intData =données ; entier t; for (int ctr =0; ctr <7; ctr++) { if (intData &0x80) digitalWrite(_MOSI,1) ; else digitalWrite(_MOSI,0) ; écriture numérique(_CLK,1) ; délaiMicrosecondes(1) ; t =digitalRead(_MISO); digitalWrite(_CLK,0) ; si (t) retval |=1; sinon retval &=0xFE; retval<<=1; intDonnées<<=1; délaiMicrosecondes(1) ; } if (intData &0x80) digitalWrite(_MOSI,1) ; else digitalWrite(_MOSI,0) ; écriture numérique(_CLK,1) ; délaiMicrosecondes(1) ; t =digitalRead(_MISO); digitalWrite(_CLK,0) ; si (t) retval |=1; sinon retval &=0xFE; retour retour; }octet progEnable(){ SendSPI(0xAC); EnvoyerSPI (0x53); SendSPI(dummyData); return SendSPI(dummyData);}void effacerChip(){ SendSPI(0xAC); EnvoyerSPI (0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520);}void readProgmem(){ SendSPI(0x20); EnvoyerSPI(AH); EnvoyerSPI(AL); data =SendSPI(dummyData);}void writeProgmem(){ SendSPI(0x40); EnvoyerSPI(AH); EnvoyerSPI(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); EnvoyerSPI(AH); EnvoyerSPI(AL); return SendSPI(dummyData);}

Schémas


Processus de fabrication

  1. Programmation de la série Atmel AT89 via Arduino
  2. Lecture du signal PPM du récepteur RC à l'aide d'Arduino
  3. Arduino - Envoyer la température au Web via série
  4. Dé à coudre - Contrôle de la souris avec vos doigts
  5. Contrôle de circuit sensible aux mouvements via Intel Curie
  6. BLUE_P :Bouclier de programmation Arduino sans fil
  7. Arduino - Surveillance de l'ouverture de la porte via Facebook Messenger
  8. Arduino - Dessin via le Web à l'aide d'un contrôleur de moteur pas à pas
  9. Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno