Γνωρίζατε ότι το Arduino μπορεί να αποθηκεύσει δεδομένα όταν είναι απενεργοποιημένο; Όχι το σκίτσο που είναι αποθηκευμένο στη μνήμη flash. Μιλώ για μεταβλητά δεδομένα στην EEPROM. Ελάτε μαζί μου καθώς σας δείχνω πώς να το διαβάσετε και να γράψετε σε αυτό, και τι μπορεί να κάνει για τα έργα σας.
Εάν είστε νέος στο Arduino, φροντίστε να δείτε τον οδηγό μας για αρχάριους Ξεκινώντας με τον Arduino: Οδηγός για αρχάριους Ξεκινώντας με το Arduino: Οδηγός για αρχάριους Το Arduino είναι μια πλατφόρμα πρωτοτύπου ηλεκτρονικών ανοικτών πηγών που βασίζεται σε ευέλικτο και εύχρηστο υλικό και το λογισμικό. Πρόκειται για καλλιτέχνες, σχεδιαστές, χομπίστες και όσους ενδιαφέρονται να δημιουργήσουν διαδραστικά αντικείμενα ή περιβάλλοντα. Διαβάστε περισσότερα .
Τι είναι το EEPROM;
Το EEPROM σημαίνει ηλεκτρικά διαγράψιμη προγραμματιζόμενη μνήμη μόνο για ανάγνωση . Είναι ένας τύπος μη πτητικής μνήμης. Μην ανησυχείτε αν δεν καταλαβαίνετε τι σημαίνει αυτό. Απλά αποθηκεύει τα δεδομένα ακόμα και με την ενέργεια που έχει αφαιρεθεί (σε αντίθεση με τη μνήμη RAM Ένας γρήγορος και βρώμικος οδηγός για τη μνήμη RAM: Τι πρέπει να γνωρίζετε Ένας γρήγορος και βρώμικος οδηγός για τη μνήμη RAM: Τι πρέπει να ξέρετε Η RAM είναι ένα κρίσιμο συστατικό του κάθε υπολογιστή. να μπερδέψετε για να καταλάβετε αν δεν είστε τεχνικός γκουρού. Σε αυτήν την ανάρτηση, το κατακερματίζουμε σε εύκολα κατανοητούς όρους.
Το EEPROM είναι ενσωματωμένο σε μια πλειάδα επεξεργαστών, όπως η προγραμματισμένη σειρά πύλης (FPGA) που χρησιμοποιείται στον Matrix Creator Matrix Creator για το Raspberry Pi Review Matrix Creator για το Raspberry Pi Review Ο Matrix Creator είναι ένα ελβετικό μαχαίρι στρατού για το Pi σας, με 15 αισθητήρες, μια σουίτα πρωτοκόλλων επικοινωνίας, ένα δαχτυλίδι LED RGB, μια συστοιχία μικροφώνων και πολλά άλλα! Διαβάστε περισσότερα Pi HAT. Όλοι οι Arduinos διαθέτουν EEPROM, αλλά η χωρητικότητα ποικίλει ανά μοντέλο. Σιγουρευτείτε ότι ρίχνετε μια ματιά στον οδηγό αγορών μας Arduino Οδηγός αγοράς: Ποιο συμβούλιο θα έπρεπε να πάρετε; Arduino Οδηγός αγοράς: Ποιο συμβούλιο πρέπει να πάρετε; Υπάρχουν τόσα πολλά διαφορετικά είδη σανίδων Arduino εκεί έξω, θα συγχωρεθήκατε για σύγχυση. Ποια θα πρέπει να αγοράσετε για το έργο σας; Ας βοηθήσουμε, με αυτόν τον οδηγό αγοράς Arduino! Διαβάστε περισσότερα για περισσότερες λεπτομέρειες σε κάθε πίνακα.
Πώς λειτουργεί?
Το EEPROM σβήνεται και προγραμματίζεται ηλεκτρικά χρησιμοποιώντας σήραγγες Fowler-Nordheim . Δεν χρειάζεται να γνωρίζετε τις τεχνικές λεπτομέρειες για να μπορείτε να το χρησιμοποιήσετε. Η βασική προϋπόθεση είναι ότι η ηλεκτρική ενέργεια χρησιμοποιείται για την αλλαγή των δυαδικών δεδομένων (τι είναι δυαδικό Τι είναι δυαδικό [Technology Explained] Τι είναι δυαδικό [Technology Explained] Δεδομένου ότι το δυαδικό είναι τόσο απολύτως θεμελιώδες για την ύπαρξη υπολογιστών, δεν έχουμε αντιμετωπίσει ποτέ το θέμα πριν - έτσι σήμερα είχα σκεφτεί ότι θα δώσω μια σύντομη επισκόπηση του τι δυαδικό ... Διαβάστε περισσότερα). Μπορεί να διαβαστεί, να διαγραφεί και να επαναγραφεί ηλεκτρονικά.
Ευτυχώς, η γλώσσα Arduino καθιστά εύκολη την αλλαγή των δεδομένων, όλα χωρίς να απαιτείται πτυχίο στην επιστήμη των υπολογιστών.
Προσδόκιμο ζωής
Ενώ είναι εύκολο να χρησιμοποιηθεί το EEPROM στο Arduino, έχει περιορισμένη διάρκεια ζωής. Το EEPROM έχει οριστεί για να χειρίζεται 100.000 κύκλους ανάγνωσης / διαγραφής. Αυτό σημαίνει ότι μπορείτε να γράψετε και στη συνέχεια να διαγράψετε / επαναγράψετε δεδομένα 100.000 φορές προτού η EEPROM γίνει ασταθής. Στην πραγματικότητα, η Atmel (οι κατασκευαστές των ημιαγωγών Arduino "Chip") μπορεί να χειριστεί έναν υψηλότερο ή μικρότερο αριθμό κύκλων, ανάλογα με τις ανοχές του κάθε επεξεργαστή.
Μόλις μια θέση έχει γραφτεί και διαγραφεί πάρα πολλές φορές μπορεί να αρχίσει να γίνει αναξιόπιστη. Μπορεί να μην επιστρέψει τα σωστά δεδομένα ή να επιστρέψει την τιμή από ένα γειτονικό κομμάτι.
Αυτό μπορεί να ακούγεται σαν πολλά γράφει, αλλά μπορεί να είναι εύκολο να φτάσετε αυτό το όριο εάν διαβάζετε και γράφετε προγραμματικά (σε ένα βρόχο, για παράδειγμα). Τα δεδομένα ανάγνωσης δεν υποβαθμίζουν το πυρίτιο, αλλά μόνο η γραφή . Μπορείτε να διαβάσετε τα δεδομένα από το EEPROM όσο θέλετε χωρίς φόβο!
Είναι σημαντικό να σημειωθεί ότι αυτό το όριο ισχύει για κάθε θέση μνήμης. Το Arduino μπορεί να έχει στη διάθεσή του 1.000 ή περισσότερες θέσεις μνήμης σε EEPROM, οπότε αν γράφετε πάρα πολλές φορές σε μία τοποθεσία, μόνο αυτή η περιοχή επηρεάζεται και όχι οποιαδήποτε άλλη. Αργότερα, θα συζητήσουμε τη φθορά φθοράς, η οποία μπορεί να μειώσει τη φθορά EEPROM με την κατανομή των δεδομένων ομοιόμορφα - κάτι που SSDs Πώς να εκτιμήσετε την εναπομένουσα διάρκεια ζωής του SSD σας Πώς να εκτιμήσετε την εναπομένουσα διάρκεια ζωής του SSD σας Όλες οι μονάδες SSD έχουν περιορισμένη διάρκεια ζωής λόγω της εγγραφής (αν και αυτή η διάρκεια ζωής είναι πολύ μεγαλύτερη από ό, τι νομίζετε). Δείτε πώς μπορείτε να υπολογίσετε πόσο κοντά βρίσκεστε στο τέλος. Διαβάστε περισσότερα κάνουν χρήση του.
Τι είναι χρήσιμο για;
Το EEPROM είναι εξαιρετικά χρήσιμο για τα έργα Arduino. Καθώς θυμάται τα δεδομένα ακόμη και όταν αφαιρείται η ισχύς, μπορείτε να αποθηκεύσετε την κατάσταση του Arduino. Ίσως θα μπορούσατε να φτιάξετε ένα πυργίσκο λέιζερ Pew Pew! Πώς να οικοδομήσουμε ένα λέιζερ πυργίσκων με ένα Pedu Pedu! Πώς να οικοδομήσουμε ένα λέιζερ πυργίσκων με ένα Arduino Εσύ βαρεθείς; Μπορεί επίσης να χτίσει έναν πυργίσκο λέιζερ. Διαβάστε περισσότερα ότι θυμάται τη θέση του ή πόσα "πυρομαχικά" παραμένουν. Θα μπορούσατε να το χρησιμοποιήσετε για να ελέγξετε τις συσκευές σας Συσκευές Ελέγχου από ένα Arduino: Η Έναρξη Συσκευών Ελέγχου Αυτοματισμού Εσωτερικών Από ένα Arduino: Η Έναρξη του Αυτοματισμού Σπιτιών Τελευταία φορά, σας έδειξα μερικούς τρόπους για να κάνετε τα έργα Arduino σας να ελέγχονται μέσω του SiriProxy, OS Τα ενσωματωμένα ομιλητά αντικείμενα του X, καθώς και ορισμένα scripting Automator ή ακόμα και ένα ειδικό τσιπ υλικού αναγνώρισης φωνής. Εγώ ... Διαβάστε περισσότερα και καταγράψτε πόσες φορές ενεργοποιήθηκε η συσκευή σας.
Το EEPROM ταιριάζει καλύτερα σε θέματα όπως ρυθμίσεις ή υψηλές βαθμολογίες. Αν θέλετε να γράφετε τακτικά πολύπλοκα δεδομένα, ίσως να εξετάσετε μια θωράκιση Ethernet Δώστε το έργο Arduino Ο δικός του Mini-Webserver με μια θωράκιση Ethernet Δώστε το έργο Arduino Το δικό σας Mini-Webserver με μια ασπίδα Ethernet Πριν από λίγο σας έδειξα πώς για να ρυθμίσετε ένα σύστημα ελέγχου Internet για το Arduino σας - αλλά έπρεπε να μείνετε συνδεδεμένοι με έναν υπολογιστή μέσω USB για να διατηρήσετε τη σύνδεση στο διαδίκτυο .... Διαβάστε περισσότερα (με ενσωματωμένη υποδοχή SD) ή Raspberry Pi Raspberry Pi: Ανεπίσημο Tutorial Raspberry Pi: Το Ανεπίσημο Tutorial Είτε είστε τωριμένος ιδιοκτήτης Pi που θέλει να μάθει περισσότερα, είτε πιθανό ιδιοκτήτη αυτής της συσκευής μεγέθους πιστωτικής κάρτας, αυτός δεν είναι ένας οδηγός που θέλετε να χάσετε. Διαβάστε περισσότερα .
Διάβασε και γράψε
Τώρα που η θεωρία είναι εκτός δρόμου, ας δούμε πώς να διαβάζουμε και να γράφουμε κάποια δεδομένα! Πρώτα, συμπεριλάβετε τη βιβλιοθήκη (αυτό έρχεται με το IDE του Arduino):
#include
Τώρα γράψτε κάποια δεδομένα:
EEPROM.write(0, 12);
Αυτό γράφει τον αριθμό 12 στη θέση EEPROM 0 . Κάθε εγγραφή διαρκεί 3, 3 χιλιοστά του δευτερολέπτου ( ms, 1000ms = 1 δευτερόλεπτο). Παρατηρήστε πώς δεν μπορείτε να γράψετε γράμματα ( char ), επιτρέπονται μόνο οι αριθμοί από το μηδέν έως το 255. Αυτός είναι ο λόγος για τον οποίο η EEPROM είναι ιδανική για ρυθμίσεις ή υψηλές βαθμολογίες, αλλά όχι τόσο καλή για ονόματα παικτών ή λέξεις. Είναι δυνατό να αποθηκεύσετε κείμενο χρησιμοποιώντας αυτήν τη μέθοδο (θα μπορούσατε να χαρτογραφήσετε κάθε γράμμα του αλφαβήτου σε έναν αριθμό), ωστόσο θα χρειαστεί να έχετε πολλαπλές τοποθεσίες μνήμης - μία θέση για κάθε γράμμα.
Δείτε πώς διαβάζετε αυτά τα δεδομένα:
EEPROM.read(0);
Το μηδέν είναι η διεύθυνση που γράψατε προηγουμένως. Εάν δεν έχετε γράψει σε μια διεύθυνση πριν, θα επιστρέψει τη μέγιστη τιμή ( 255 ).
Υπάρχουν κάποιες λίγο πιο χρήσιμες διαθέσιμες μέθοδοι. Ας υποθέσουμε ότι θέλετε να αποθηκεύσετε ένα δεκαδικό μέρος ή μια συμβολοσειρά:
EEPROM.put(2, "12.67");
Αυτό γράφει τα δεδομένα σε πολλαπλές τοποθεσίες - κάτι που θα ήταν εύκολο να γραφτείς, αλλά είναι πρακτικό. Θα χρειαστεί να παρακολουθείτε πόσες τοποθεσίες έχει γράψει, ώστε να μην αντικαταστήσετε τυχαία τα δεδομένα σας! Πρέπει να χρησιμοποιήσετε τη μέθοδο Get για να ανακτήσετε ξανά αυτά τα δεδομένα:
float f = 0.00f; EEPROM.get(2, f);
Η τιμή από τη λήψη αποθηκεύεται στη μεταβλητή float f . Παρατηρήστε πώς γίνεται αυτό το ξεκίνημα με το 0.00f ως τιμή. Το f επιτρέπει στον μεταγλωττιστή να γνωρίζει ότι μπορεί να θέλετε να αποθηκεύσετε ένα μεγάλο αριθμό σε αυτήν τη μεταβλητή, έτσι ώστε να δημιουργήσει κάποιες πρόσθετες διαμορφώσεις κατά τη διάρκεια της σύνταξης.
Η τεκμηρίωση EEPROM στην ιστοσελίδα του Arduino έχει πολλά περισσότερα παραδείγματα.
Να φοράτε ισοπέδωση
Η εξομάλυνση φθοράς είναι μια τεχνική που χρησιμοποιείται για να μειώσει τη φθορά και να αυξήσει τη διάρκεια ζωής της EEPROM. Εάν εργάζεστε μόνο σε ένα μικρό έργο, ίσως να μην χρειάζεται να ανησυχείτε για αυτό.
Το απλούστερο πράγμα που μπορείτε να κάνετε για να διατηρήσετε τη ζωή του EEPROM είναι να περιορίσετε τις εγγραφές σας σε μια συγκεκριμένη τοποθεσία. Μπορείτε να το κάνετε αυτό διαβάζοντας πρώτα τη διεύθυνση και εάν η τιμή που θέλετε να γράψετε είναι ήδη παρούσα, δεν χρειάζεται να την γράψετε ξανά (θυμηθείτε, η ανάγνωση των δεδομένων δεν προκαλεί βλάβη). Δείτε πώς θα το κάνετε αυτό:
int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); } }
Αυτό είναι πολύ απλό κομμάτι του κώδικα, ωστόσο λειτουργεί μόνο για ακέραιους αριθμούς! Αντί να ανακαλύψετε ξανά τον τροχό, χρησιμοποιήστε τη λειτουργία που είναι ενσωματωμένη στη βιβλιοθήκη Arduino EEPROM:
EEPROM.update(address, val);
Αυτή η μέθοδος έχει ακριβώς την ίδια υπογραφή με τη μέθοδο εγγραφής, αν και μπορεί να μειώσει δραστικά τον αριθμό των εγγράφων που χρειάζονται!
Εάν χρειάζεται να γράψετε πολλά δεδομένα και ανησυχείτε για τη φθορά του πυριτίου, μπορείτε να παρακολουθείτε πόσα γράφει εσείς, αν και αυτό χρησιμοποιεί περισσότερα δεδομένα. Ακολουθεί μια ακατανόητη εφαρμογή στον ψευδοκώδικα:
var address = 0 var writeCount = 0 if(writeCount>75, 000) writeCount = 0 address += 1 EEPROM.write(address, data)
Θα χρειαστεί να αποθηκεύσετε διεύθυνση και writeCount σε EEPROM (και το writeCount θα πρέπει να χωριστεί σε όλες τις διευθύνσεις). Κατά το μεγαλύτερο μέρος του χρόνου, αυτό το επίπεδο προστασίας δεν θα είναι απαραίτητο. Οι Arduinos είναι τόσο φθηνές, οπότε ίσως να είναι πιο εύκολο να αγοράσετε ένα αντίγραφο ασφαλείας!
Τώρα πρέπει να γνωρίζετε αρκετά για να κάνετε κάποια εκπληκτικά έργα. Ενημερώστε μας αν κάνετε κάτι δροσερό! Μπορείτε να αναγνωρίσετε όλες τις συσκευές στις εικόνες; Αφήστε μας ένα σχόλιο παρακάτω!