Πώς λειτουργεί το eeprom; Τι είναι ένα τσιπ μνήμης και πώς να προγραμματίσετε μικροκυκλώματα. Παραδείγματα έργων και σκίτσα

Την τελευταία φορά, όταν έγραψα τη "λεπτομερή απάντηση στην ερώτηση" σχετικά με τον τρόπο δημιουργίας αντιγράφων ασφαλείας του υλικολογισμικού από το Mega, με επέπληξαν που δεν ανέφερα το αντίγραφο ασφαλείας EEPROM. Εκείνη τη φορά δεν το έκανα συνειδητά, γιατί… Δικαίως έκρινα ότι δεν υπάρχει λόγος να περιπλέκονται τα πάντα στο στάδιο της αρχικής «προσέγγισης στο βλήμα». Το γεγονός είναι ότι δεν είναι προφανές σε όλους ότι το EEPROM δεν αναβοσβήνει κατά τη μεταγλώττιση και τη μεταφόρτωση του υλικολογισμικού από Arduino IDE. Δηλαδή, αυτό σημαίνει ότι δεν μεταφορτώνεται απολύτως τίποτα στην EEPROM όταν το υλικολογισμικό ανεβαίνει από το IDE. Και οι χειρισμοί με το EEPROM (αν η χρήση του είναι ενεργοποιημένη καθόλου στο υλικολογισμικό) εκτελούνται σε εντελώς διαφορετικό επίπεδο. Και επομένως, για δημιουργία αντιγράφων ασφαλείας γυμνού υλικολογισμικού χωρίς λεπτές ρυθμίσεις, το οποίο ΠΙΘΑΝΟΝ (μόνο ίσως) μπορεί να αποθηκευτεί στο EEPROM, ήταν αρκετά για να σωθεί μόνο το γυμνό υλικολογισμικό. Αλλά αφού έχει προκύψει το ερώτημα, γιατί να μην το «μασάτε». Ας το περάσουμε με τη σειρά. Τι είναι το EEPROM και γιατί μιλάμε για αυτό;
EEPROM - (Electrically Erasable Programmable Read-Only Memory) περιοχή της μη πτητικής μνήμης του μικροελεγκτή στην οποία μπορούν να εγγραφούν και να διαβαστούν οι πληροφορίες. Συχνά χρησιμοποιείται για την αποθήκευση ρυθμίσεων προγράμματος που ενδέχεται να αλλάξουν κατά τη λειτουργία και πρέπει να αποθηκευτούν όταν είναι απενεργοποιημένη η τροφοδοσία.

Πώς χρησιμοποιεί ένας τρισδιάστατος εκτυπωτής το EEPROM;
Ας δούμε το Marlin ως παράδειγμα. Στο Marlin Firmware out of the box, το EEPROM δεν χρησιμοποιείται. Οι παράμετροι του διαμορφωτή (Configuration.h), που περιλαμβάνουν τη δυνατότητα χρήσης του, σχολιάζονται από προεπιλογή.

#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT

Εάν η χρήση του EEPROM είναι ενεργοποιημένη, ο εκτυπωτής μπορεί να αποθηκεύσει και να χρησιμοποιήσει τις ακόλουθες ρυθμίσεις (καθορίζονται από την αστική τάξη):

  • Αριθμός βημάτων ανά χιλιοστό
  • Μέγιστη/ελάχιστη ταχύτητα τροφοδοσίας [mm/s]
  • Μέγιστη επιτάχυνση [mm/s^2]
  • Επιτάχυνση
  • Επιτάχυνση κατά την ανάσυρση
  • Ρυθμίσεις PID
  • Μετατόπιση θέσης έδρας
  • Ελάχιστη ταχύτητα τροφοδοσίας κατά την κίνηση [mm/s]
  • Ελάχιστος χρόνος ενότητας [ms]
  • Άλμα μέγιστης ταχύτητας άξονες Χ-Υ[mm/s]
  • Άλμα μέγιστης ταχύτητας στον άξονα Z [mm/s]
Μπορείτε να επεξεργαστείτε αυτές τις ρυθμίσεις χρησιμοποιώντας την οθόνη και τα στοιχεία ελέγχου του εκτυπωτή. Όταν η χρήση του EEPROM είναι ενεργοποιημένη, το μενού πρέπει να εμφανίζει τα ακόλουθα στοιχεία:
  • Αποθήκευση μνήμης
  • Φόρτωση μνήμης
  • Επαναφορά Failsafe
Μπορείτε επίσης να χρησιμοποιήσετε το GCode για να εργαστείτε απευθείας (μέσω Pronterface).
  • M500 Αποθηκεύει τις τρέχουσες ρυθμίσεις στο EEPROM μέχρι την επόμενη εκκίνηση ή εντολή M501.
  • M501 Διαβάζει ρυθμίσεις από την EEPROM.
  • M502 Επαναφέρει τις ρυθμίσεις στις προεπιλεγμένες τιμές που καθορίζονται στο Configurations.h. Εάν εκτελέσετε το M500 μετά από αυτό, οι προεπιλεγμένες τιμές θα εισαχθούν στο EEPROM.
  • M503 Εμφανίζει τις τρέχουσες ρυθμίσεις - ""Αυτές που έχουν εγγραφεί στο EEPROM.""
Μπορείτε να διαβάσετε για το EEPROM στο υλικολογισμικό Repitier.

Πώς να διαβάσετε και να γράψετε δεδομένα στο EEPROM;
Παρόμοια με τη μέθοδο που περιγράφεται στη μέθοδο δημιουργίας αντιγράφων ασφαλείας υλικολογισμικού χρησιμοποιώντας το κλειδί -U. Μόνο σε αυτήν την περίπτωση, μετά από αυτό θα υπάρχει ένας δείκτης που θα υποδεικνύει ότι το EEPROM πρέπει να διαβαστεί.

avrdude.exe -p atmega2560 -c καλωδίωση -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

Αυτή η εντολή διαβάζει τα δεδομένα EEPROM στο αρχείο "printer_eeprom.eep". Εάν είναι επιτυχής, θα δείτε κάτι σαν το παρακάτω στην οθόνη.

Η εγγραφή επίσης δεν είναι περίπλοκη και εκτελείται με παρόμοια εντολή, η οποία διαφέρει μόνο σε αυτό στο κλειδί -UΔεν είναι "r", αλλά "w".

avrdude.exe -p atmega2560 -c καλωδίωση -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i

Εάν είναι επιτυχής, θα δείτε κάτι σαν το ακόλουθο μήνυμα στην οθόνη.

Πώς και γιατί να διαγράψετε το EEPROM;
Αρχικά, "γιατί να το κάνεις αυτό;" Πρέπει να διαγράψετε το EEPROM εάν το χρησιμοποιούσε και το προηγούμενο υλικολογισμικό και μπορεί να μείνουν σκουπίδια στη μνήμη. Κάπου έχω ήδη συναντήσει ανθρώπους με προβλήματα που μετά την εναλλαγή από το ένα υλικολογισμικό στο άλλο (από το Marlin στο Repitier EMNIP), ο εκτυπωτής τους άρχισε να συμπεριφέρεται, θα λέγαμε, «δημιουργικά». Αυτό οφείλεται στο γεγονός ότι διαφορετικά υλικολογισμικά αποθηκεύουν τα δεδομένα τους κάτω από διαφορετικές διευθύνσεις. Και όταν προσπαθείτε να διαβάσετε δεδομένα από λάθος διεύθυνση, αρχίζει η πανδαισία.
Μπορείτε να διαγράψετε το EEPROM μόνο μέσω προγραμματισμού από το υλικολογισμικό, αλλά για να το κάνετε αυτό θα πρέπει να ανεβάσετε προσωρινά ένα ειδικό σκίτσο στον ελεγκτή. Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτό στην επίσημη τεκμηρίωση του Arduino.
Εάν το EEPROM διαγραφεί όχι μέσα Πλακέτα Arduino, και σε κάποιο αφηρημένο ελεγκτή, ο κώδικας σκίτσου θα πρέπει να αλλάξει λαμβάνοντας υπόψη το μέγεθος του EEPROM σε έναν συγκεκριμένο ελεγκτή στον πίνακα. Για να το κάνετε αυτό, θα χρειαστεί να αλλάξετε τη συνθήκη λήξης στον βρόχο "For". Για παράδειγμα, για το ATmega328, το οποίο έχει μνήμη EEPROM 1 kb, ο κύκλος θα μοιάζει με αυτό:
Συμπέρασμα.
Τρελαίνομαι εδώ και αρκετό καιρό, αλλά για ποιο λόγο όλα αυτά; Για να καταλήξουμε στο συμπέρασμα ότι κατά τη δημιουργία αντιγράφων ασφαλείας του υλικολογισμικού, το EEPROM μπορεί επίσης να αποθηκευτεί, αλλά μόνο εάν χρειάζεστε τις ρυθμίσεις που είναι αποθηκευμένες σε αυτό. Αν είσαι έτοιμος να τα θυσιάσεις, τότε ξέχασέ το. Επίσης, εάν αλλάξετε ένα υλικολογισμικό σε άλλο ή αλλάξετε από μια έκδοση σε άλλη, μην τεμπελιάζετε να διαγράψετε το EEPROM πριν το ανεβάσετε νέο υλικολογισμικό. Λοιπόν, ταυτόχρονα μάθαμε πολλά νέα πράγματα.

Μάθημα 15

Μέρος 1

Εσωτερικός μη-πτητική μνήμη EEPROM

Νομίζω, ίσως όχι όλοι, αλλά πολλοί άνθρωποι γνωρίζουν ότι στους ελεγκτές AVR, εκτός από τον κύριο μνήμη τυχαίας προσπέλασης, καθώς και μνήμη για την αποθήκευση υλικολογισμικού, υπάρχει επίσης μη πτητική μνήμη όπως EEPROM. Αυτή η μνήμη κατασκευάζεται χρησιμοποιώντας την τεχνολογία ηλεκτρικής διαγραφής πληροφοριών, η οποία, σε αντίθεση με τον προκάτοχό της EPROM, στην οποία η διαγραφή πραγματοποιήθηκε μόνο με χρήση υπεριωδών ακτίνων, κατέστησε δυνατή τη χρήση αυτού του τύπου μνήμης σχεδόν παντού. Όπως γνωρίζουμε, υπάρχει και μη πτητική μνήμη όπως η Flesh, η οποία είναι πολύ φθηνότερη, αλλά έχει και ένα σημαντικό μειονέκτημα. Εκεί είναι αδύνατο να διαγραφεί ένα μόνο byte· η διαγραφή πραγματοποιείται μόνο σε μπλοκ, κάτι που δεν είναι απολύτως βολικό σε ορισμένες περιπτώσεις, ειδικά όταν χρειάζεται να αποθηκευτούν λίγες πληροφορίες και αυτές οι πληροφορίες αντιπροσωπεύουν μικρές παραμέτρους ρύθμισης. Ως εκ τούτου, θα πρέπει επίσης να σταματήσουμε σε αυτός ο τύποςμνήμη. Και όχι μόνο επειδή υπάρχει στο χειριστήριο, αλλά επειδή είναι πολύ βολικό για την αποθήκευση κάποιων ποσοτήτων που θα χρειαστούμε ακόμα και αφού ο ελεγκτής έχει χάσει το ρεύμα.

Εφόσον εργαζόμαστε με τον ελεγκτή Atmega8A, θα ανοίξουμε την τεχνική τεκμηρίωση αυτού του MK και θα δούμε εκεί ότι έχουμε συνολικά 512 byte τέτοιας μνήμης. Ωστόσο, αυτό δεν είναι τόσο λίγο. Αν, για παράδειγμα, προγραμματίσουμε κάποιου είδους ξυπνητήρι έτσι ώστε τα δεδομένα των ρυθμίσεων να μην χάνονται μετά την απενεργοποίηση του ρεύματος, μπορούμε εύκολα να αναφερθούμε σε αυτή τη μνήμη. Το λέει και η τεκμηρίωση δεδομένη μνήμηείναι εγγυημένο ότι θα επιβιώσει σε 100.000 κύκλους εγγραφής/ανάγνωσης.

Τώρα αυτό γεννά το ερώτημα. Πώς οργανώνεται η διαδικασία εργασίας με αυτήν τη μνήμη σε έναν μικροελεγκτή; AVR? Όπως πάντα, η Atmel φρόντισε για αυτό και οργάνωσε αυτή τη διαδικασία σε επίπεδο υλικού, κάτι που είναι πολύ ευχάριστο γιατί πρέπει συνεχώς να εξοικονομούμε πόρους του ελεγκτή. Για τον έλεγχο αυτού του επιπέδου υλικού, υπάρχουν ορισμένοι καταχωρητές.

Ένα από αυτά είναι ένα ζεύγος καταχωρητών ΑΥΤΙ. Γιατί ένα ζευγάρι, αλλά επειδή 512 διευθύνσεις δεν χωράνε σε 8 bit, απαιτείται ένα ακόμη

Θα δούμε πώς ακριβώς θα απευθυνθούμε κατά τη διαδικασία προγραμματισμού EEPROM.

Ακολουθεί το μητρώο δεδομένων EADR

Θα γράψουμε δεδομένα σε αυτόν τον καταχωρητή για να τα γράψουμε σε μια συγκεκριμένη διεύθυνση μνήμης EEPROM, καθώς και για να τα διαβάσουμε από μια συγκεκριμένη διεύθυνση της ίδιας μνήμης.

Λοιπόν, ως συνήθως, σχεδόν κανένα περιφερειακό ή τεχνολογία οργανωμένη σε επίπεδο υλικού δεν μπορεί να κάνει χωρίς καταχωρητή ελέγχου. Το μητρώο διαχείρισης μας είναι το μητρώο EECR

Ας γνωρίσουμε αμέσως τα κομμάτια αυτού του μητρώου.

Κομμάτι EERE— ένα κομμάτι που προκαλεί την έναρξη της διαδικασίας ανάγνωσης από τη μνήμη EEPROM. Και, μόλις διαβαστούν και εγγραφούν τα δεδομένα στον καταχωρητή δεδομένων, αυτό το bit θα επαναφερθεί. Επομένως, μπορούμε να θεωρήσουμε αυτό το bit όχι μόνο ένα bit ελέγχου, αλλά και ένα bit κατάστασης ή κατάστασης.

Κομμάτι ΕΕΕΕ— ένα bit, η ρύθμιση του οποίου δίνει εντολή στον ελεγκτή να εγγράψει δεδομένα από τον καταχωρητή δεδομένων σε μια συγκεκριμένη διεύθυνση EEPROM. Αφού ολοκληρωθεί η διαδικασία εγγραφής, αυτό το bit επαναφέρεται επίσης ανεξάρτητα.

Κομμάτι EEMWE— ένα bit που επιτρέπει (όχι ξεκινά) τη διαδικασία εγγραφής.

Κομμάτι ΜΥΣΤΗΡΙΩΔΗΣ— bit που επιτρέπει διακοπές.

Λοιπόν, τώρα ας περάσουμε στο έργο. Το έργο δημιουργήθηκε με τον συνήθη τυπικό τρόπο και ονομάστηκε Δοκιμή 13. Συμπεριλήφθηκε και το αρχείο κύρια.χκαι δημιουργούνται αρχεία eeprom.hΚαι eeprom.c.

Εδώ πηγήδημιουργήθηκαν αρχεία

Test13.c:

#περιλαμβάνω"main.h"

ενθκύριος( κενός)

{

ενώ(1)

{

}

}

#ifndefMAIN_H_

#καθορίζωMAIN_H_

#καθορίζωF_CPU8000000 UL

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

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

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

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

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

#περιλαμβάνω"eeprom.h"

 

#τέλος εαν/* MAIN_H_ */

eeprom.h

#ifndefEEPROM_H_

#καθορίζωEEPROM_H_

#περιλαμβάνω"main.h"

κενόςEEPROM_write( ανυπόγραφοενθΔιεύθυνση ui, ανυπόγραφοαπανθρακώνωucData);

ανυπόγραφοαπανθρακώνωEEPROM_read( ανυπόγραφοενθΔιεύθυνση ui);

#τέλος εαν/* EEPROM_H_ */

eeprom.c

#περιλαμβάνω"eeprom.h"

Πρώτα, αναλόγως, θα προσπαθήσουμε να γράψουμε δεδομένα στη μνήμη EEPROM. Λοιπόν, είναι λογικό, αφού ενώ δεν έχουμε γράψει τίποτα, δεν έχουμε και τίποτα να διαβάσουμε.

Λοιπόν, ας μην ταλαιπωρούμαστε και ας εισάγουμε τον κωδικό για τη συνάρτηση εγγραφής, καθώς και τη συνάρτηση ανάγνωσης από το παράδειγμα στην τεχνική τεκμηρίωση, στο αρχείο eeprom.cκαι αφαιρέστε τα αγγλόφωνα σχόλια, εισάγοντας εκεί τα ρωσικά. Μετά από όλες τις διορθώσεις το αρχείο θα μοιάζει με αυτό

#περιλαμβάνω"eeprom.h"

κενόςEEPROM_write( ανυπόγραφοενθΔιεύθυνση ui, ανυπόγραφοαπανθρακώνωucData)

{

ενώ( EECR& (1<< ΕΕΕΕ))

{}

ΑΥΤΙ= Διεύθυνση ui; //Ρυθμίστε τη διεύθυνση

EEDR= ucData; //Τροφοδοτούμε δεδομένα στο μητρώο

EECR|= (1<< EEMWE); //Να επιτρέπεται η εγγραφή

EECR|= (1<< ΕΕΕΕ); //Γράψτε ένα byte στη μνήμη

}

ανυπόγραφοαπανθρακώνωEEPROM_read( ανυπόγραφοενθΔιεύθυνση ui)

{

ενώ( EECR& (1<< ΕΕΕΕ))

{} //περιμένετε να απελευθερωθεί η σημαία λήξης από την τελευταία λειτουργία μνήμης

ΑΥΤΙ= Διεύθυνση ui; //Ρυθμίστε τη διεύθυνση

EECR|= (1<< EERE); //Ξεκινήστε μια λειτουργία ανάγνωσης από τη μνήμη στον καταχωρητή δεδομένων

ΕΠΙΣΤΡΟΦΗEEDR; //Επιστρέφετε το αποτέλεσμα

}

Ας γράψουμε πρωτότυπα για αυτές τις συναρτήσεις σε ένα αρχείο eeprom.h

#περιλαμβάνω"main.h"

κενόςEEPROM_write( ανυπόγραφοενθΔιεύθυνση ui, ανυπόγραφοαπανθρακώνωucData);

ανυπόγραφοαπανθρακώνωEEPROM_read( ανυπόγραφοενθΔιεύθυνση ui);

Τώρα ας καλέσουμε τη συνάρτηση εγγραφής στη συνάρτηση main() και έτσι προσπαθήσουμε να γράψουμε κάποια τιμή 8-bit στη διεύθυνση 1. Γενικά, η διευθυνσιοδότηση σε αυτή τη μνήμη ξεκινά από το 0

ενθκύριος( κενός)

EEPROM_write(1, 120);

Ενώ(1)

Χρησιμοποιούμε τον ίδιο πίνακα εντοπισμού σφαλμάτων για πειράματα, χωρίς να συνδέουμε απολύτως τίποτα σε αυτόν

Ας συναρμολογήσουμε το έργο και πάμε στο πρόγραμμα υλικολογισμικού Avrdude.

Ας επιλέξουμε το αρχείο υλικολογισμικού μας εκεί, στη συνέχεια προσπαθήστε να διαβάσετε τον ελεγκτή και, στη συνέχεια, διαγράψτε τα πάντα χρησιμοποιώντας το κουμπί "διαγραφή όλων"

Επίσης στο πρόγραμμα avrdude υπάρχει μια άλλη γραμμή "Eeprom". Μπορούμε να χρησιμοποιήσουμε αυτή τη γραμμή για να γράψουμε σε αυτή τη μνήμη όχι μέσω προγραμματισμού, αλλά από ένα αρχείο. Αλλά θα γράψουμε από το πρόγραμμά μας και θα χρησιμοποιήσουμε αυτή τη γραμμή για να διαβάσουμε τη μνήμη EEPROM σε ένα αρχείο. Μπορείτε να γράψετε τη διαδρομή σε αυτή τη γραμμή με το χέρι και το αρχείο θα δημιουργηθεί αυτόματα. Ας γράψουμε, για παράδειγμα, "C:\1\11111" και κάντε κλικ στο "Ανάγνωση" και κατά μήκος αυτής της διαδρομής όλες οι πληροφορίες από τη μνήμη EEPROM θα εγγραφούν στο καθορισμένο αρχείο

Μπορείτε να γράψετε οποιαδήποτε διαδρομή, αρκεί το μέσο με αυτό το γράμμα που υποδεικνύεται στα αριστερά να υπάρχει και να είναι εγγράψιμο. Είναι επίσης καλύτερο να δημιουργήσετε τον φάκελο εκ των προτέρων.

Ας βρούμε τώρα αυτό το αρχείο στο δίσκο και ας το ανοίξουμε στο Σημειωματάριο

Αυτό το αρχείο έχει περίπου την ίδια μορφή με το αρχείο υλικολογισμικού. Πρώτα τη διεύθυνση, μετά 32 byte πληροφοριών και μετά ένα άθροισμα ελέγχου για αυτά τα 32 byte. Αν δεν έχουμε γράψει ποτέ τίποτα στη μνήμη EEPROM, τότε θα έχουμε FF σε όλες τις διευθύνσεις, δηλαδή έχουμε σε όλα τα bit μνήμης.

Κλείνουμε το αρχείο, προσπαθούμε να αναβοσβήνουμε τον ελεγκτή, μετά διαβάζουμε ξανά τη μνήμη EEPROM στο αρχείο και ανοίγουμε το αρχείο

Βλέπουμε ότι ο αριθμός "78" γράφτηκε στο αρχείο, που σημαίνει 120 σε δεκαδική μορφή.

Τώρα ας προσπαθήσουμε να πατήσουμε το κουμπί "Erase Everything", σε αυτήν την περίπτωση η μνήμη EEPROM δεν πρέπει να διαγραφεί.

Διαβάζουμε ξανά το EEPROM στο αρχείο, ανοίγουμε το αρχείο και βλέπουμε ότι η μνήμη έχει διαγραφεί, έχουμε πάλι "FF" παντού.

Γιατί συνέβη? Γιατί πρέπει να ρυθμίσετε τις ασφάλειες. Φίλια ανάγνωσης

Ας προσέξουμε το EESAVE bit. Όταν αυτό το bit είναι ένα (όπως έχουμε, τα bit είναι ανεστραμμένα), τότε αναγκάζουμε τη μνήμη EEPROM να διαγραφεί όταν απενεργοποιηθεί η τροφοδοσία, καθώς και όταν διαγραφεί. Και για να μην συμβεί αυτό, αυτό το bit πρέπει να γίνει επαναφορά, δηλαδή να βάλετε ένα σημάδι επιλογής και να αναβοσβήσετε τις ασφάλειες.

Αναβοσβήνουμε τις ασφάλειες, σβήνουμε τον ελεγκτή, αναβοσβήνουμε τον ελεγκτή, τον σβήνουμε ξανά, διαβάζουμε τη μνήμη EEPROM σε ένα αρχείο και το ανοίγουμε. Τώρα βλέπουμε ότι δεν έχει σβήσει τίποτα από πάνω μας

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

Στο επόμενο μέρος του σεμιναρίου θα προσπαθήσουμε να διαβάσουμε μέσω προγραμματισμού δεδομένα από τη μνήμη EEPROM.

Δείτε VIDEO TUTORIAL (κάντε κλικ στην εικόνα)

Προβολές ανάρτησης: 7.259

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

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

Ένα ευρύ φάσμα συσκευών απαιτεί μνήμη, επομένως τα τσιπ EEPROM έχουν πολλές εφαρμογές στον τομέα των ηλεκτρονικών ειδών ευρείας κατανάλωσης. Χρησιμοποιούνται σε συστήματα παιχνιδιών, τηλεοράσεις και οθόνες υπολογιστών. Τα ακουστικά βαρηκοΐας, οι ψηφιακές κάμερες, η τεχνολογία Bluetooth και τα συστήματα παιχνιδιών χρησιμοποιούν επίσης τσιπ EEPROM. Χρησιμοποιούνται στις τηλεπικοινωνίες, την ιατρική και τη μεταποιητική βιομηχανία. Οι προσωπικοί και επαγγελματικοί υπολογιστές περιέχουν EEPROM.

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

Υπάρχει όριο στον αριθμό των επαναλήψεων που μπορούν να αντικατασταθούν από το τσιπ EEPROM. Το στρώμα μέσα στο τσιπ καταστρέφεται σταδιακά από πολυάριθμες επανεγγραφές. Αυτό δεν είναι μεγάλο πρόβλημα γιατί ορισμένα τσιπ EEPROM μπορούν να τροποποιηθούν έως και ένα εκατομμύριο φορές. Περαιτέρω πρόοδος στην τεχνολογία θα έχουν πιθανώς θετικό αντίκτυπο στο τι μπορούν να κάνουν τα τσιπ μνήμης στο μέλλον.

Η EEPROM είναι μη πτητική ηλεκτρικά διαγραφόμενη μνήμη. Ο αριθμός των κύκλων εγγραφής-διαγραφής σε αυτά τα μικροκυκλώματα φτάνει τις 1.000.000 φορές. Τα κελιά εμπλοκής σε αυτά, καθώς και στις μνήμες μόνο για ανάγνωση EPROM, υλοποιούνται με χρήση τρανζίστορ κινητής πύλης. Η εσωτερική δομή αυτού του κελιού μνήμης φαίνεται στο Σχήμα 1:


Εικόνα 1. Κυψέλη μνήμης ROM (EEPROM) που διαγράφεται ηλεκτρικά

Η κυψέλη μνήμης EEPROM είναι ένα τρανζίστορ MOS στο οποίο η πύλη είναι κατασκευασμένη από πολυκρυσταλλικό πυρίτιο. Στη συνέχεια, κατά τη διαδικασία κατασκευής του τσιπ, αυτή η πύλη οξειδώνεται και ως αποτέλεσμα θα περιβάλλεται από οξείδιο του πυριτίου, ένα διηλεκτρικό με εξαιρετικές μονωτικές ιδιότητες. Σε ένα τρανζίστορ με αιωρούμενη πύλη, όταν η ROM διαγραφεί εντελώς, δεν υπάρχει φόρτιση στην «πλωτή» πύλη και επομένως αυτό το τρανζίστορ δεν μεταφέρει ρεύμα. Κατά τη διάρκεια του προγραμματισμού, εφαρμόζεται υψηλή τάση στη δεύτερη πύλη, που βρίσκεται πάνω από την πλωτή πύλη, και επάγονται φορτίσεις σε αυτήν λόγω του φαινομένου της σήραγγας. Αφού αφαιρεθεί η τάση προγραμματισμού, το επαγόμενο φορτίο παραμένει στην αιωρούμενη πύλη και ως εκ τούτου το τρανζίστορ παραμένει σε αγώγιμη κατάσταση. Το φορτίο στο πλωτό μπουλόνι του μπορεί να αποθηκευτεί για δεκαετίες.

Ένα παρόμοιο στοιχείο μνήμης χρησιμοποιήθηκε σε υπεριώδη διαγραφή ROM (EPROM). Σε μια κυψέλη μνήμης με ηλεκτρική διαγραφή, είναι δυνατή όχι μόνο η εγγραφή, αλλά και η διαγραφή πληροφοριών. Οι πληροφορίες διαγράφονται εφαρμόζοντας αντίθετη τάση από την τάση εγγραφής στην πύλη προγραμματισμού. Σε αντίθεση με το UV erase ROM, ο χρόνος διαγραφής της μνήμης EEPROM είναι περίπου 10 ms.

Το μπλοκ διάγραμμα της μη πτητικής μνήμης με ηλεκτρική διαγραφή δεν διαφέρει από το μπλοκ διάγραμμα της μάσκας ROM. Η μόνη διαφορά είναι ότι αντί για ένα εύτηκτο βραχυκυκλωτήρα, χρησιμοποιείται το κελί που περιγράφεται παραπάνω. Το απλοποιημένο μπλοκ διάγραμμα του φαίνεται στο Σχήμα 2.



Εικόνα 2. Απλοποιημένο μπλοκ διάγραμμα EEPROM

Ως παράδειγμα τσιπ μνήμης EEPROM, μπορούμε να ονομάσουμε εγχώρια τσιπ 573РР3, 558РР3 και ξένα μικροκυκλώματα της σειράς AT28с010, AT28с040 από την Atmel, HN58V1001 από την Hitachi Semiconductor, X28C010 από την Intersil Corporation. Η μνήμη EEPROM αποθηκεύει συχνότερα δεδομένα χρήστη σε κυψελοειδείς συσκευές που δεν πρέπει να διαγράφονται όταν η τροφοδοσία είναι απενεργοποιημένη (για παράδειγμα, βιβλία διευθύνσεων), πληροφορίες διαμόρφωσης δρομολογητών ή κινητών συσκευών, λιγότερο συχνά αυτά τα τσιπ χρησιμοποιούνται ως μνήμη διαμόρφωσης FPGA ή δεδομένα DSP αποθήκευση. Τα EEPROM απεικονίζονται σε διαγράμματα κυκλώματος όπως φαίνεται στο Σχήμα 3.


Εικόνα 3. Γραφική ονομασία μιας ηλεκτρικά διαγραφόμενης συσκευής μνήμης μόνο για ανάγνωση

Η ανάγνωση πληροφοριών από παράλληλη μνήμη EEPROM είναι παρόμοια με την ανάγνωση από μάσκα ROM. Αρχικά, η διεύθυνση της κυψέλης μνήμης που διαβάζεται ορίζεται στο δίαυλο διευθύνσεων σε δυαδικό κώδικα A0...A9, και στη συνέχεια εφαρμόζεται το σήμα ανάγνωσης RD. Το σήμα επιλογής τσιπ CS χρησιμοποιείται συνήθως ως πρόσθετο καλώδιο διεύθυνσης για πρόσβαση στο τσιπ. Τα διαγράμματα χρονισμού των σημάτων στις εισόδους και εξόδους αυτού του τύπου ROM φαίνονται στο Σχήμα 4.



Εικόνα 4. Διαγράμματα χρονισμού σημάτων για ανάγνωση πληροφοριών από τη μνήμη EEPROM

Το σχήμα 5 δείχνει ένα σχέδιο ενός τυπικού περιβλήματος για ένα παράλληλο τσιπ μνήμης EEPROM.


Εικόνα 5. Σχέδιο του παράλληλου περιβλήματος μικροκυκλώματος EEPROM

Συνήθως, τα δεδομένα που είναι αποθηκευμένα στο EEPROM απαιτούνται αρκετά σπάνια. Ο χρόνος ανάγνωσης δεν είναι κρίσιμος σε αυτή την περίπτωση. Επομένως, σε ορισμένες περιπτώσεις, η διεύθυνση και τα δεδομένα μεταφέρονται στο τσιπ και πίσω μέσω της σειριακής θύρας. Αυτό καθιστά δυνατή τη μείωση του μεγέθους των μικροκυκλωμάτων μειώνοντας τον αριθμό των εξωτερικών ακίδων. Σε αυτήν την περίπτωση, χρησιμοποιούνται δύο τύποι σειριακών θυρών - θύρα SPI και θύρα I2C (μικροκυκλώματα σειράς 25cXX και 24cXX, αντίστοιχα). Η ξένη σειρά 24cXX αντιστοιχεί στην εγχώρια σειρά μικροκυκλωμάτων 558PPX.

Το εσωτερικό διάγραμμα των μικροκυκλωμάτων της σειράς 24cXX (για παράδειγμα AT24C01) φαίνεται στο Σχήμα 6.



Εικόνα 6. Εσωτερικό κύκλωμα του τσιπ AT24C01

Τέτοια τσιπ χρησιμοποιούνται ευρέως για την αποθήκευση ρυθμίσεων τηλεόρασης, όπως μνήμη plug and play σε υπολογιστές και φορητούς υπολογιστές, μνήμη διαμόρφωσης FPGA και επεξεργαστές σήματος (DSP). Η χρήση της σειριακής μνήμης EEPROM έχει μειώσει σημαντικά το κόστος αυτών των συσκευών και έχει αυξήσει την ευκολία χρήσης. Ένα παράδειγμα της θέσης αυτού του τσιπ στην πλακέτα τυπωμένου κυκλώματος μιας κάρτας μνήμης υπολογιστή φαίνεται στο Σχήμα 7.



Εικόνα 7. EEPROM στην πλακέτα τυπωμένου κυκλώματος μιας κάρτας μνήμης υπολογιστή

Το σχήμα 8 δείχνει ένα διάγραμμα μιας ηλεκτρονικής κάρτας που χρησιμοποιεί ένα εξωτερικό τσιπ EEPROM.


Εικόνα 8. Κύκλωμα ηλεκτρονικής κάρτας με χρήση εξωτερικού EEPROM

Σε αυτό το διάγραμμα, ο μικροελεγκτής PIC16F84 ανταλλάσσει δεδομένα με τη μνήμη EEPROM 24LC16B. Συσκευές όπως η κάρτα SIM δεν χρησιμοποιούν πλέον τσιπ εξωτερικής μνήμης. Οι κάρτες SIM των συσκευών κινητής τηλεφωνίας χρησιμοποιούν την εσωτερική μνήμη EEPROM ενός μικροελεγκτή ενός chip. Αυτό σας επιτρέπει να μειώσετε την τιμή αυτής της συσκευής όσο το δυνατόν περισσότερο.

Το κύκλωμα ελέγχου για τις ηλεκτρικά διαγραφόμενες προγραμματιζόμενες ROM αποδείχθηκε πολύπλοκο, επομένως έχουν προκύψει δύο κατευθύνσεις για την ανάπτυξη αυτών των μικροκυκλωμάτων:

  1. EEPROM - ηλεκτρικά διαγραφόμενη προγραμματιζόμενη μνήμη μόνο για ανάγνωση
  2. FLASH ROM

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


Εικόνα 9. Γραφική ονομασία μνήμης FLASH

Κατά την πρόσβαση σε μια μόνιμη συσκευή αποθήκευσης, πρέπει πρώτα να ορίσετε τη διεύθυνση της κυψέλης μνήμης στο δίαυλο διευθύνσεων και, στη συνέχεια, να εκτελέσετε μια λειτουργία ανάγνωσης από το τσιπ. Αυτό το διάγραμμα χρονισμού φαίνεται στο Σχήμα 11.



Εικόνα 10. Διαγράμματα χρονισμού σημάτων για ανάγνωση πληροφοριών από ROM

Στο Σχήμα 10, τα βέλη δείχνουν την ακολουθία με την οποία πρέπει να παράγονται σήματα ελέγχου. Σε αυτό το σχήμα, το RD είναι το σήμα ανάγνωσης, το A είναι τα σήματα επιλογής διεύθυνσης κυψέλης (καθώς τα μεμονωμένα bit στο δίαυλο διευθύνσεων μπορούν να λάβουν διαφορετικές τιμές, εμφανίζονται οι διαδρομές μετάβασης τόσο στη μία όσο και στη μηδενική κατάσταση), D είναι η πληροφορία εξόδου που διαβάζεται από επιλεγμένο κελί ROM.

Βιβλιογραφία:

Μαζί με το άρθρο "Συσκευές μνήμης μόνο για ανάγνωση (ROM)" διαβάστε:

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

Το κύριο πράγμα που πρέπει να γνωρίζουμε είναι ότι η μνήμη EEPROM δεν θεωρείται καλύτερα ως «απλή μνήμη», αλλά ως ξεχωριστή εσωτερική συσκευή στο τσιπ.
EEPROM χωριστό χώρο διευθύνσεων, που δεν έχει καμία σχέση με το χώρο διευθύνσεων του επεξεργαστή (FLASH και SRAM). Για να αποκτήσετε πρόσβαση σε δεδομένα σε μια συγκεκριμένη διεύθυνση στη μη πτητική μνήμη, πρέπει να εκτελέσετε μια συγκεκριμένη σειρά ενεργειών χρησιμοποιώντας έναν αριθμό καταχωρητών (καταχωρητές διευθύνσεων EEARH και EEARL, καταχωρητές δεδομένων EEDR και καταχωρητές ελέγχου EECR).
Σύμφωνα με το φύλλο δεδομένων, για να γράψετε ένα byte σε μια συγκεκριμένη διεύθυνση στο EEPROM, πρέπει να κάνετε τα εξής:

  1. περιμένετε να είναι έτοιμη η EEPROM για εγγραφή δεδομένων (το bit EEPE του καταχωρητή EECR επαναφέρεται).
  2. περιμένετε να τελειώσει η εγγραφή στη μνήμη FLASH (επαναφορά του bit SELFPRGEN του καταχωρητή SPMCSR) - αυτό πρέπει να γίνει εάν ο φορτωτής εκκίνησης υπάρχει στο πρόγραμμα.
  3. γράψτε τη νέα διεύθυνση στο μητρώο EEAR (εάν είναι απαραίτητο).
  4. γράψτε ένα byte δεδομένων στο μητρώο EEDR (εάν είναι απαραίτητο).
  5. ορίστε το bit EEMPE του καταχωρητή EECR σε ένα.
  6. εντός τεσσάρων κύκλων ρολογιού μετά τη ρύθμιση της σημαίας EEMPE, γράφουμε μια λογική στο bit EEPE του καταχωρητή EECR.

Στη συνέχεια, ο επεξεργαστής παρακάμπτει 2 κύκλους ρολογιού πριν εκτελέσει την επόμενη εντολή.
Το δεύτερο σημείο πρέπει να εκτελεστεί εάν υπάρχει ένας bootloader στο πρόγραμμα - το γεγονός είναι ότι η εγγραφή σε EEPROM δεν μπορεί να εκτελεστεί ταυτόχρονα με την εγγραφή στη μνήμη FLASH, επομένως πριν γράψετε στη EEPROM πρέπει να βεβαιωθείτε ότι ο προγραμματισμός της μνήμης FLASH έχει ολοκληρωθεί. εάν ο μικροελεγκτής δεν διαθέτει bootloader, τότε δεν αλλάζει ποτέ τα περιεχόμενα της μνήμης FLASH (θυμηθείτε ότι το avr έχει αρχιτεκτονική Harvard: η μνήμη προγράμματος (FLASH) και η μνήμη δεδομένων (SRAM) διαχωρίζονται).
Η διάρκεια του κύκλου εγγραφής εξαρτάται από τη συχνότητα του εσωτερικού ταλαντωτή RC του τσιπ, την τάση τροφοδοσίας και τη θερμοκρασία. συνήθως για τα μοντέλα ATmega48x/88x/168x αυτό είναι 3,4 ms (!), για ορισμένα παλαιότερα μοντέλα – 8,5 ms (!!!).
Επιπλέον, κατά την εγγραφή στην EEPROM, ενδέχεται να προκύψουν προβλήματα με τις διακοπές κλήσεων κατά την εκτέλεση της ακολουθίας των παραπάνω ενεργειών - επομένως είναι καλύτερο να απενεργοποιήσετε τις διακοπές κατά την εγγραφή στην EEPROM.
Η ανάγνωση της μη πτητικής μνήμης είναι λίγο πιο απλή:

  1. περιμένετε να είναι έτοιμο το EEPROM για ανάγνωση δεδομένων (το bit EEWE του καταχωρητή EECR επαναφέρεται).
  2. γράψτε τη διεύθυνση στο μητρώο EEAR.
  3. ορίστε το bit EERE του καταχωρητή EECR σε ένα.
  4. διαβάζουμε δεδομένα από τον καταχωρητή EEDR (στην πραγματικότητα, όταν τα ζητούμενα δεδομένα μετακινούνται στον καταχωρητή δεδομένων, το bit EERE επαναφέρεται από το υλικό, αλλά δεν υπάρχει ανάγκη παρακολούθησης της κατάστασης αυτού του bit, καθώς η λειτουργία ανάγνωσης από το EEPROM είναι εκτελούνται πάντα σε έναν κύκλο ρολογιού).

Αφού ρυθμίσει ένα bit στο EERE σε ένα, ο επεξεργαστής παραλείπει 4 κύκλους ρολογιού πριν εκτελέσει την επόμενη εντολή.
Όπως μπορούμε να δούμε, η εργασία με μη πτητική μνήμη είναι μια χρονοβόρα διαδικασία. Εάν γράφουμε και διαβάζουμε συχνά δεδομένα από το EEPROM, το πρόγραμμα μπορεί να αρχίσει να επιβραδύνεται.

Ωστόσο, γράφουμε ένα πρόγραμμα στο περιβάλλον IAR και είμαστε τυχεροί: όλη η εργασία με την ανάγνωση και τη γραφή από το EEPROM θα γίνει από το περιβάλλον ανάπτυξης - το iar έχει τον τροποποιητή «__eeprom», ο οποίος δημιουργεί μεταβλητές στη μη πτητική μνήμη - και τότε θα χρειαστεί απλώς να διαβάσουμε από "μόνιμες" μεταβλητές σε "current" (κατά την προετοιμασία του ελεγκτή), ή να γράψουμε από "τρέχουσες" μεταβλητές σε "σταθερά" - δηλαδή, όταν αλλάξει η τρέχουσα τιμή, η τιμή του Η μεταβλητή στη μη πτητική μνήμη πρέπει επίσης να αλλάξει.
Οι νέες μεταβλητές θα μοιάζουν με αυτό:

Eeprom uint16_t EEP_MinTemperature;

Μερικές γενικές λέξεις: και παρόλο που δεν υποθέτουμε δείκτες στις μεταβλητές eeprom, πρέπει να θυμόμαστε ότι το eeprom είναι ένας ξεχωριστός χώρος διευθύνσεων και για να δημιουργήσουμε έναν δείκτη στο eeprom (και ο μεταγλωττιστής μας επιτρέπει να το κάνουμε αυτό), πρέπει να υποδεικνύει ότι πρόκειται για δείκτη σε μια διεύθυνση στο eeprom:

Uint16_t __eeprom *EEP_MinTemperatureAdr;

Ας επιστρέψουμε στον ελεγκτή σόμπας και στην EEPROM. Στην περίπτωσή μας, φυσικά, καμία εικονική μηχανή δεν υποτίθεται για την EEPROM. Επιπλέον, αξίζει να εξεταστεί εάν χρειάζεται ξεχωριστή βιβλιοθήκη για να λειτουργήσει με μη πτητική μνήμη - η εγγραφή σημαντικών ρυθμίσεων είναι πολύ "διάσπαρτη" σε όλο το πρόγραμμα. Εάν προσπαθήσετε να δημιουργήσετε μια ξεχωριστή βιβλιοθήκη, θα πρέπει να κάνετε παραπομπές: στη βιβλιοθήκη για το EEPROM, συνδέστε τις βιβλιοθήκες του ADC, το στοιχείο θέρμανσης και τις καθολικές ρυθμίσεις. και σε αυτές τις περιφερειακές βιβλιοθήκες, η σύνδεση της βιβλιοθήκης EEPROM δεν είναι πολύ καλή προσέγγιση.
Μια άλλη επιλογή είναι να προσθέσετε μια μεταβλητή eeprom σε κάθε βιβλιοθήκη όπου πρέπει να αποθηκεύσετε τις ρυθμίσεις και να αποθηκεύσετε τις αντίστοιχες ρυθμίσεις απευθείας στις εικονικές μηχανές. Θα εφαρμόσουμε αυτήν την επιλογή.
Αρχικά, ας παραθέσουμε ποιες μεταβλητές πρέπει να αποθηκεύσουμε στο EEPROM:

  1. σημεία βαθμονόμησης
  2. τιμές της μέγιστης-ελάχιστης ρυθμισμένης θερμοκρασίας και του βήματος ρύθμισης θερμοκρασίας
  3. καθορισμένη τιμή θερμοκρασίας
  4. Συντελεστές ελεγκτή PID

Δεν εξοικονομούμε την τιμή του χρονοδιακόπτη κουζίνας - θα υποθέσουμε ότι ο χρήστης πρέπει να ρυθμίζει το χρονόμετρο της εστίας κάθε φορά μετά την απενεργοποίηση του ρεύματος.
Όλες αυτές οι ρυθμίσεις ορίζονται από τον χρήστη περιστρέφοντας τον κωδικοποιητή και στη συνέχεια πατώντας στιγμιαία το κουμπί χρήστη. Ταυτόχρονα, θυμόμαστε ότι ο αριθμός των κύκλων ανάγνωσης-εγγραφής EEPROM εξακολουθεί να είναι περιορισμένος, επομένως μην αντικαταστήσετε ξανά τις ίδιες πληροφορίες (για παράδειγμα, εάν ο χρήστης επέλεξε την ίδια τιμή κάποιας ρύθμισης όπως ήταν). Επομένως, πριν από κάθε αλλαγή στη μεταβλητή __eeprom, ελέγχουμε αν χρειάζεται να ξαναγραφεί:

//εάν η τιμή έχει αλλάξει, αντικαταστήστε την σε μη πτητική μνήμη εάν (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t)VMEn. atMinTemperatureV alue; )

Η ανάγνωση των ρυθμίσεων από το EEPROM είναι επίσης απλή - όταν αρχικοποιούμε τις "τρέχουσες" ρυθμίσεις, απλά διαβάζουμε την τιμή από τη μη πτητική μνήμη:

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

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

Eeprom uint16_t EEP_MinTemperature = 20; ... //πίνακας για την αποθήκευση σημείων βαθμονόμησης σε μη πτητική μνήμη __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

Σε αυτήν την περίπτωση, ο μεταγλωττιστής αρχικοποιεί τις μεταβλητές __eeprom πριν ξεκινήσει την εργασία με την κύρια συνάρτηση. Για να αποκτήσετε ένα αρχείο με μη πτητική μνήμη (.eep), πρέπει να μεταβείτε στις ακόλουθες ρυθμίσεις:
Έργο->Επιλογές..->Σύνδεσμος->Επιπλέον επιλογές
Εάν το πλαίσιο ελέγχου "Χρήση επιλογών γραμμής εντολών" δεν είναι επιλεγμένο, επιλέξτε το και προσθέστε τη γραμμή
-Ointel-standard,(XDATA)=.eep
Πρώτα μεταγλωττίζουμε το έργο με αρχικοποιημένες μεταβλητές, αποθηκεύουμε το αρχείο eep ξεχωριστά. τότε αφαιρούμε την προετοιμασία κατά τη δημιουργία μεταβλητών.

Αυτό είναι όλο - η σόμπα μας είναι έτοιμη!