Πίνακας περιεχομένων:

Το ενσωματωμένο EEPROM του Arduino σας: 6 βήματα
Το ενσωματωμένο EEPROM του Arduino σας: 6 βήματα

Βίντεο: Το ενσωματωμένο EEPROM του Arduino σας: 6 βήματα

Βίντεο: Το ενσωματωμένο EEPROM του Arduino σας: 6 βήματα
Βίντεο: Lesson 01 Arduino Boards | Robojax Arduino Step By Step Course 2024, Νοέμβριος
Anonim
Το ενσωματωμένο EEPROM του Arduino σας
Το ενσωματωμένο EEPROM του Arduino σας

Σε αυτό το άρθρο θα εξετάσουμε την εσωτερική EEPROM στους πίνακες Arduino. Τι είναι ένα EEPROM που μερικοί από εσάς μπορεί να λέτε; Το EEPROM είναι μια ηλεκτρικά διαγραφόμενη προγραμματιζόμενη μνήμη μόνο για ανάγνωση.

Είναι μια μορφή μη πτητικής μνήμης που μπορεί να θυμάται πράγματα με την απενεργοποιημένη ισχύ ή μετά την επαναφορά του Arduino. Η ομορφιά αυτού του είδους μνήμης είναι ότι μπορούμε να αποθηκεύσουμε δεδομένα που παράγονται μέσα σε ένα σκίτσο σε πιο μόνιμη βάση.

Γιατί να χρησιμοποιήσετε την εσωτερική EEPROM; Για καταστάσεις όπου τα δεδομένα που είναι μοναδικά για μια κατάσταση χρειάζονται μια πιο μόνιμη κατοικία. Για παράδειγμα, η αποθήκευση του μοναδικού σειριακού αριθμού και της ημερομηνίας κατασκευής ενός εμπορικού έργου που βασίζεται σε Arduino-μια λειτουργία του σκίτσου θα μπορούσε να εμφανίσει τον σειριακό αριθμό σε μια οθόνη LCD ή τα δεδομένα θα μπορούσαν να διαβαστούν ανεβάζοντας ένα «σκίτσο υπηρεσίας». Or μπορεί να χρειαστεί να μετρήσετε ορισμένα συμβάντα και να μην επιτρέψετε στον χρήστη να τα επαναφέρει-όπως ένα χιλιομετρητή ή μετρητή κύκλου λειτουργίας.

Βήμα 1: Τι είδους δεδομένα μπορούν να αποθηκευτούν;

Τι είδους δεδομένα μπορούν να αποθηκευτούν
Τι είδους δεδομένα μπορούν να αποθηκευτούν

Οτιδήποτε μπορεί να αναπαρασταθεί ως byte δεδομένων. Ένα byte δεδομένων αποτελείται από οκτώ bits δεδομένων. Ένα bit μπορεί να είναι είτε ενεργοποιημένο (τιμή 1) είτε απενεργοποιημένο (τιμή 0) και είναι ιδανικό για την αναπαράσταση αριθμών σε δυαδική μορφή. Με άλλα λόγια, ένας δυαδικός αριθμός μπορεί να χρησιμοποιεί μόνο μηδενικά και ένα για να αντιπροσωπεύει μια τιμή. Έτσι το δυαδικό είναι επίσης γνωστό ως "βάση-2", καθώς μπορεί να χρησιμοποιήσει μόνο δύο ψηφία.

Πώς μπορεί ένας δυαδικός αριθμός μόνο με τη χρήση δύο ψηφίων να αντιπροσωπεύει έναν μεγαλύτερο αριθμό; Χρησιμοποιεί πολλά και μηδενικά. Ας εξετάσουμε έναν δυαδικό αριθμό, ας πούμε 10101010. Δεδομένου ότι αυτός είναι ένας αριθμός βάσης-2, κάθε ψηφίο αντιπροσωπεύει το 2 στην ισχύ του x, από x = 0 και μετά.

Βήμα 2:

Εικόνα
Εικόνα

Δείτε πώς κάθε ψηφίο του δυαδικού αριθμού μπορεί να αντιπροσωπεύει έναν αριθμό-10. Έτσι ο δυαδικός αριθμός παραπάνω αντιπροσωπεύει 85 στη βάση-10-η τιμή 85 είναι το άθροισμα των τιμών βάσης-10. Ένα άλλο παράδειγμα - το 11111111 στο δυαδικό ισοδυναμεί με 255 στη βάση 10.

Βήμα 3:

Τώρα κάθε ψηφίο σε αυτόν τον δυαδικό αριθμό χρησιμοποιεί ένα «bit» μνήμης και οκτώ bits κάνουν ένα byte. Λόγω των εσωτερικών περιορισμών των μικροελεγκτών στους πίνακες Arduino, μπορούμε να αποθηκεύσουμε μόνο αριθμούς 8-bit (ένα byte) στο EEPROM.

Αυτό περιορίζει την δεκαδική τιμή του αριθμού να πέσει μεταξύ μηδέν και 255. Στη συνέχεια, εναπόκειται σε εσάς να αποφασίσετε πώς μπορούν να αναπαρασταθούν τα δεδομένα σας με αυτό το εύρος αριθμών. Μην το απογοητεύετε - οι αριθμοί που είναι διατεταγμένοι με τον σωστό τρόπο μπορούν να αντιπροσωπεύουν σχεδόν τα πάντα! Υπάρχει ένας περιορισμός που πρέπει να προσέξουμε - πόσες φορές μπορούμε να διαβάσουμε ή να γράψουμε στην EEPROM. Σύμφωνα με τον κατασκευαστή Atmel, το EEPROM είναι καλό για 100.000 κύκλους ανάγνωσης/εγγραφής (δείτε το φύλλο δεδομένων).

Βήμα 4:

Τώρα γνωρίζουμε τα bits και τα byte μας, πόσα byte μπορούν να αποθηκευτούν στον μικροελεγκτή του Arduino; Η απάντηση ποικίλλει ανάλογα με το μοντέλο του μικροελεγκτή. Για παράδειγμα:

  • Πίνακες με Atmel ATmega328, όπως Arduino Uno, Uno SMD, Nano, Lilypad κ.λπ. - 1024 byte (1 κιλομπάιτ)
  • Πίνακες με Atmel ATmega1280 ή 2560, όπως η σειρά Arduino Mega - 4096 bytes (4 kilobytes)
  • Πίνακες με Atmel ATmega168, όπως το αρχικό Arduino Lilypad, το παλιό Nano, Diecimila κ.λπ. - 512 byte.

Εάν δεν είστε σίγουροι, ρίξτε μια ματιά στο ευρετήριο υλικού Arduino ή ρωτήστε τον προμηθευτή του σκάφους σας. Εάν χρειάζεστε περισσότερο χώρο αποθήκευσης EEPROM από αυτόν που είναι διαθέσιμος στον μικροελεγκτή σας, σκεφτείτε να χρησιμοποιήσετε ένα εξωτερικό I2C EEPROM.

Σε αυτό το σημείο καταλαβαίνουμε τώρα τι είδους δεδομένα και πόσα μπορούν να αποθηκευτούν στο EEPROM του Arduino μας. Τώρα είναι καιρός να το κάνουμε πράξη. Όπως συζητήθηκε προηγουμένως, υπάρχει ένας πεπερασμένος χώρος για τα δεδομένα μας. Στα ακόλουθα παραδείγματα, θα χρησιμοποιήσουμε έναν τυπικό πίνακα Arduino με το ATmega328 με 1024 byte αποθήκευσης EEPROM.

Βήμα 5:

Για να χρησιμοποιήσετε το EEPROM, απαιτείται βιβλιοθήκη, οπότε χρησιμοποιήστε την παρακάτω βιβλιοθήκη στα σκίτσα σας:

#include "EEPROM.h"

Τα υπόλοιπα είναι πολύ απλά. Για να αποθηκεύσουμε ένα κομμάτι δεδομένων, χρησιμοποιούμε την ακόλουθη συνάρτηση:

EEPROM.write (a, b);

Η παράμετρος a είναι η θέση στο EEPROM για την αποθήκευση του ακέραιου (0 ~ 255) δεδομένων β. Σε αυτό το παράδειγμα, έχουμε 1024 byte αποθήκευσης μνήμης, οπότε η τιμή a είναι μεταξύ 0 και 1023. Για να ανακτήσετε ένα κομμάτι δεδομένων είναι εξίσου απλό, χρησιμοποιήστε:

z = EEPROM.read (α);

Όπου το z είναι ακέραιος για την αποθήκευση των δεδομένων από τη θέση EEPROM a. Τώρα για να δείτε ένα παράδειγμα.

Βήμα 6:

Εικόνα
Εικόνα

Αυτό το σκίτσο θα δημιουργήσει τυχαίους αριθμούς μεταξύ 0 και 255, θα τους αποθηκεύσει στο EEPROM και μετά θα τους ανακτήσει και θα τους εμφανίσει στη σειριακή οθόνη. Η μεταβλητή EEsize είναι το ανώτατο όριο του μεγέθους EEPROM, οπότε (για παράδειγμα) αυτό θα είναι 1024 για Arduino Uno ή 4096 για Mega.

// Arduino εσωτερική επίδειξη EEPROM

#περιλαμβάνω

int zz; int EEsize = 1024; // μέγεθος σε byte του EEPROM του πίνακα σας

void setup ()

{Serial.begin (9600); randomSeed (analogRead (0)); } void loop () {Serial.println ("Γράφοντας τυχαίους αριθμούς …"); για (int i = 0; i <EEsize; i ++) {zz = random (255); EEPROM.write (i, zz); } Serial.println (); για (int a = 0; a <EEsize; a ++) {zz = EEPROM.read (a); Serial.print ("θέση EEPROM:"); Serial.print (a); Serial.print ("περιέχει"); Serial.println (zz); καθυστέρηση (25)? }}

Θα εμφανιστεί η έξοδος από τη σειριακή οθόνη, όπως φαίνεται στην εικόνα.

Ορίστε λοιπόν, ένας άλλος χρήσιμος τρόπος αποθήκευσης δεδομένων με τα συστήματά μας Arduino. Αν και δεν είναι το πιο συναρπαστικό σεμινάριο, είναι σίγουρα χρήσιμο.

Αυτή η ανάρτηση σας έφερε το pmdway.com - τα πάντα για κατασκευαστές και λάτρεις των ηλεκτρονικών ειδών, με δωρεάν παράδοση σε όλο τον κόσμο.

Συνιστάται: