Introduction à l'EEPROM dans Arduino

Essayez Notre Instrument Pour Éliminer Les Problèmes





Dans cet article, nous allons comprendre ce qu'est l'EEPROM, comment les données sont stockées sur une EEPROM intégrée sur Carte Arduino Microcontrôleur et testez également pratiquement comment écrire et lire des données sur EEPROM par quelques exemples.

Introduction à l

Pourquoi EEPROM?

Avant de se demander ce qu'est l'EEPROM? Il est très important de savoir pourquoi l'EEPROM est utilisée pour le stockage en premier lieu. Pour cela, nous avons une idée claire sur les EEPROM.



Il existe de nombreux périphériques de stockage disponibles ces jours-ci, allant des périphériques de stockage magnétiques tels que les disques durs d'ordinateur, aux magnétophones à cassettes de la vieille école, aux supports de stockage optique tels que les CD, les DVD, les disques Blu-ray et la mémoire à l'état solide comme le SSD ordinateurs et cartes mémoire, etc.

Ce sont des périphériques de stockage de masse qui peuvent stocker des données telles que de la musique, des vidéos, des documents, etc. d'aussi peu que quelques kilo-octets à plusieurs téraoctets. Il s'agit d'une mémoire non volatile, ce qui signifie que les données peuvent être conservées même après la coupure de l'alimentation du support de stockage.



L'appareil qui diffuse une musique apaisante pour les oreilles ou des vidéos époustouflantes telles qu'un ordinateur ou un smartphone stocke certaines données critiques telles que les données de configuration, les données de démarrage, les mots de passe, les données biométriques, les données de connexion, etc.

Ces données mentionnées ne peuvent pas être stockées dans des périphériques de stockage de masse pour des raisons de sécurité et ces données pourraient également être modifiées par les utilisateurs sans le vouloir, ce qui pourrait entraîner un dysfonctionnement de l'appareil.

Ces données ne prennent que quelques octets à quelques mégaoctets, la connexion d'un périphérique de stockage conventionnel comme un support magnétique ou optique à des puces de processeur n'est pas économiquement et physiquement réalisable.

Ainsi, ces données critiques sont stockées dans les puces de traitement elles-mêmes.

L'Arduino n'est pas différent de l'ordinateur ou des smartphones. Il existe plusieurs circonstances dans lesquelles nous devons stocker des données critiques qui ne doivent pas être effacées même après la coupure de courant, par exemple les données des capteurs.

À présent, vous auriez une idée de la raison pour laquelle nous avons besoin d'EEPROM sur les microprocesseurs et les puces de microcontrôleurs.

Qu'est-ce que l'EEPROM?

EEPROM signifie mémoire en lecture seule programmable effaçable électriquement. C'est aussi une mémoire non volatile qui peut être lue et écrite octet sage.

La lecture et l'écriture au niveau des octets la différencient des autres mémoires à semi-conducteurs. Par exemple, la mémoire flash: lecture, écriture et effacement des données par blocs.

Un bloc peut être de quelques centaines à des milliers de bits, ce qui est faisable pour le stockage de masse, mais pas pour les opérations de «mémoire en lecture seule» dans les microprocesseurs et les microcontrôleurs, qui doivent accéder aux données octet par octet.

Sur la carte Arduino Uno (ATmega328P), il a à bord 1 Ko ou 1024 octets d'EEPROM. Chaque octet est accessible individuellement. Chaque octet a une adresse comprise entre 0 et 1023 (soit un total de 1024).

L'adresse (0-1023) est un emplacement de mémoire où nos données seront stockées.

Sur chaque adresse, vous pouvez stocker des données 8 bits, des chiffres numériques de 0 à 255. Nos données sont stockées sous forme binaire, donc si nous écrivons le numéro 255 dans l'EEPROM, il stockera le chiffre 11111111 dans une adresse et si nous stockons zéro, il stockera en tant que 00000000.

Vous pouvez également stocker du texte, des caractères spéciaux, des caractères alphanumériques, etc. en écrivant le programme approprié.

Les détails de construction et le fonctionnement ne sont pas abordés ici, ce qui pourrait rendre cet article long et vous endormir. Dirigez-vous vers YouTube ou Google, il y a des articles / vidéos intéressants concernant la construction et le fonctionnement d'EEPORM.

Ne confondez pas EEPROM avec EPROM:

En un mot, l'EPROM est une mémoire morte électriquement programmable, ce qui signifie qu'elle peut être programmée (stocker la mémoire) électriquement, mais ne peut pas être effacée électriquement.

Il utilise la brillance de la lumière ultraviolette au-dessus de la puce de stockage qui efface les données stockées. L'EEPROM est venu en remplacement de l'EPROM et n'est plus utilisé dans aucun appareil électronique.

Ne confondez pas la mémoire flash avec l'EEPROM:

Une mémoire flash est une mémoire semi-conductrice et non volatile qui est également effaçable électriquement et programmable électriquement, en fait la mémoire flash est dérivée de l'EEPROM. Mais l'accès à la mémoire par blocs ou en d'autres termes, le mode d'accès à la mémoire et sa construction diffère de l'EEPROM.

Arduino Uno (microcontrôleur ATmega328P) possède également 32 Ko de mémoire flash pour le stockage des programmes.

Durée de vie de l'EEPROM:

Comme tout autre support de stockage électronique, l'EEPROM a également des cycles finis de lecture, d'écriture et d'effacement. Mais le problème est qu'elle a l'une des plus faibles durées de vie par rapport à tout autre type de mémoire à semi-conducteur.

Sur l'EEPROM d'Arduino, Atmel a réclamé environ 100 000 cycles d'écriture (un lakh) par cellule. Si la température de votre pièce est inférieure, plus la durée de vie de l'EEPROM est longue.

Veuillez noter que la lecture des données depuis l'EEPROM n'affecte pas la durée de vie de manière significative.

Il existe des CI EEPROM externes qui peuvent être interfacés facilement avec Arduino avec une capacité de mémoire allant de 8 Ko, 128 Ko, 256 Ko, etc. avec une durée de vie d'environ 1 million de cycles d'écriture par cellule.

Voilà qui conclut l'EEPROM, vous auriez maintenant acquis suffisamment de connaissances théoriques sur les EEPROM.

Dans la section suivante, nous allons apprendre à tester pratiquement l'EEPROM sur arduino.

Comment tester l'EEPROM dans Arduino

Pour mettre en œuvre cela, tout ce dont vous avez besoin est un câble USB et une carte Arduino Uno, vous êtes prêt à partir.

D'après les explications ci-dessus, nous avons compris que les EEPROM ont une adresse où nous stockons nos données. Nous pouvons stocker de 0 à 1023 emplacements à Arduino Uno. Chaque emplacement peut accueillir 8 bits ou un octet.

Dans cet exemple, nous allons stocker des données dans une adresse. Pour réduire la complexité du programme et garder le programme aussi court que possible, nous allons stocker un entier à un chiffre (0 à 9) sur une adresse de 0 à 9.

Code de programme # 1

Maintenant, téléchargez le code sur Arduino:
//------------------Program Developed by R.GIRISH-------------------//
#include
int inputAddress = 0
int inputValue = 0
int ReadData = 0
boolean Readadd = true
boolean Readval = true
void setup()
{
Serial.begin(9600)
Serial.println('Enter the address (0 to 9)')
Serial.println('')
while(Readadd)
{
inputAddress = Serial.read()
if(inputAddress > 0)
{
inputAddress = inputAddress - 48
Readadd = false
}
}
Serial.print('You have selected Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Enter the value to be stored (0 to 9)')
Serial.println('')
while(Readval)
{
inputValue = Serial.read()
if(inputValue > 0)
{
inputValue = inputValue - 48
Readval = false
}
}
Serial.print('The value you entered is: ')
Serial.println(inputValue)
Serial.println('')
delay(2000)
Serial.print('It will be stored in Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Writing on EEPROM.....')
Serial.println('')
EEPROM.write(inputAddress, inputValue)
delay(2000)
Serial.println('Value stored successfully!!!')
Serial.println('')
delay(2000)
Serial.println('Reading from EEPROM....')
delay(2000)
ReadData = EEPROM.read(inputAddress)
Serial.println('')
Serial.print('The value read from Address ')
Serial.print(inputAddress)
Serial.print(' is: ')
Serial.println(ReadData)
Serial.println('')
delay(1000)
Serial.println('Done!!!')
}
void loop()
{
// DO nothing here.
}
//------------------Program Developed by R.GIRISH-------------------//

PRODUCTION:

Une fois le code téléchargé, ouvrez le moniteur série.

Il vous demandera d'entrer une adresse allant de 0 à 9. À partir de la sortie ci-dessus, j'ai entré l'adresse 3. Donc, je vais stocker une valeur entière dans l'emplacement (adresse) 3.

Maintenant, il vous invitera à entrer une valeur entière à un chiffre allant de 0 à 9. À partir de la sortie ci-dessus, j'ai entré la valeur 5.

Donc, maintenant, la valeur 5 sera stockée dans l'emplacement d'adresse 3.

Une fois que vous avez entré la valeur, il écrira la valeur sur l'EEPROM.

Il affichera un message de réussite, ce qui signifie que la valeur est stockée.

Après quelques secondes, il lira la valeur qui est stockée sur l'adresse commentée et il affichera la valeur sur le moniteur série.

En conclusion, nous avons écrit et lu les valeurs de l’EEPROM du microcontrôleur Arduino.

Maintenant, nous allons utiliser l'EEPROM pour stocker le mot de passe.

Nous entrerons un mot de passe à 6 chiffres (ni moins ni plus), il sera stocké dans 6 adresses différentes (chaque adresse pour chaque chiffre) et une adresse supplémentaire pour stocker «1» ou «0».

Une fois que vous avez entré le mot de passe, l'adresse supplémentaire stockera la valeur «1» indiquant que le mot de passe est défini et le programme vous demandera d'entrer le mot de passe pour allumer la LED.

Si la valeur de l'adresse supplémentaire enregistrée est «0» ou toute autre valeur est présente, il vous demandera de créer un nouveau mot de passe à 6 chiffres.

Par la méthode ci-dessus, le programme peut identifier si vous avez déjà défini un mot de passe ou si vous devez créer un nouveau mot de passe.

Si le mot de passe entré est correct, le voyant intégré à la broche n ° 13 s'allume, si le mot de passe saisi est incorrect, le voyant ne s'allumera pas et le moniteur série vous indiquera que votre mot de passe est incorrect.

Code de programme # 2

Téléchargez maintenant le code:
//------------------Program Developed by R.GIRISH---------------//
#include
int passExistAdd = 200
const int LED = 13
int inputAddress = 0
int word1 = 0
int word2 = 0
int word3 = 0
int word4 = 0
int word5 = 0
int word6 = 0
int wordAddress1 = 0
int wordAddress2 = 1
int wordAddress3 = 2
int wordAddress4 = 3
int wordAddress5 = 4
int wordAddress6 = 5
int passwordExist = 0
boolean ReadVal1 = true
boolean ReadVal2 = true
boolean ReadVal3 = true
boolean ReadVal4 = true
boolean ReadVal5 = true
boolean ReadVal6 = true
int checkWord1 = 0
int checkWord2 = 0
int checkWord3 = 0
int checkWord4 = 0
int checkWord5 = 0
int checkWord6 = 0
void setup()
{
Serial.begin(9600)
pinMode(LED, OUTPUT)
digitalWrite(LED, LOW)
passwordExist = EEPROM.read(passExistAdd)
if(passwordExist != 1)
{
Serial.println('Enter a new 6 number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
Serial.println('')
Serial.print(word1)
Serial.print(word2)
Serial.print(word3)
Serial.print(word4)
Serial.print(word5)
Serial.print(word6)
EEPROM.write(wordAddress1, word1)
EEPROM.write(wordAddress2, word2)
EEPROM.write(wordAddress3, word3)
EEPROM.write(wordAddress4, word4)
EEPROM.write(wordAddress5, word5)
EEPROM.write(wordAddress6, word6)
EEPROM.write(passExistAdd,1)
Serial.println(' Password saved Sucessfully!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
if(passwordExist == 1)
{
Serial.println('')
Serial.println('Please enter the 6 digit number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
checkWord1 = EEPROM.read(wordAddress1)
if(checkWord1 != word1)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord2 = EEPROM.read(wordAddress2)
if(checkWord2 != word2)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord3 = EEPROM.read(wordAddress3)
if(checkWord3 != word3)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord4 = EEPROM.read(wordAddress4)
if(checkWord4 != word4)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord5 = EEPROM.read(wordAddress5)
if(checkWord5 != word5)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord6 = EEPROM.read(wordAddress6)
if(checkWord6 != word6)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
digitalWrite(LED, HIGH)
Serial.println('')
Serial.println('LED is ON')
Serial.println('')
Serial.println('Press Reset Button.')
}
}
void loop()
{
}
//------------------Program Developed by R.GIRISH---------------//

PRODUCTION:

Ouvrez le moniteur série, il vous demandera de créer un mot de passe à 6 chiffres.

Entrez n'importe quel mot de passe à 6 chiffres, notez-le et appuyez sur Entrée. Le mot de passe est maintenant enregistré.

Vous pouvez appuyer sur le bouton de réinitialisation ou déconnecter le câble USB du PC, ce qui interrompt l'alimentation de la carte Arduino.

Maintenant, reconnectez le câble USB, ouvrez le moniteur série, ce qui vous demandera de saisir le mot de passe à 6 chiffres enregistré.

Entrez le mot de passe correct, la LED s'allumera.

Si vous souhaitez changer le mot de passe, changez le chiffre du code:

int passExistAdd = 200

La ligne ci-dessus est l'adresse supplémentaire dont nous avons discuté précédemment. Changez n'importe où de 6 à 1023. 0 à 5 adresses sont réservées pour stocker le mot de passe à 6 chiffres.

La modification de cette adresse supplémentaire trompera le programme que le mot de passe n'est pas encore créé et vous invitera à créer un nouveau mot de passe à 6 chiffres.

Si vous avez des questions concernant ce didacticiel EEPROM dans Arduino, veuillez exprimer dans les commentaires, vous pouvez recevoir une réponse rapide.




Une paire de: Alimentation par coupure de courant à l'aide d'Arduino Un article: Voiture robot contrôlée par téléphone portable utilisant le module DTMF