- EEPROM i PIC16F877A:
- Kredsløbsdiagram og forklaring:
- Simulering af brug af PIC EEPROM:
- Programmering af PIC til EEPROM:
- Arbejder:
I denne vejledning lærer vi, hvor let det er at gemme data ved hjælp af den EEPROM, der findes i PIC16F877A Microcontroller. I de fleste realtidsprojekter er vi muligvis nødt til at gemme nogle data, som ikke bør slettes, selv når strømmen er slukket. Dette lyder måske som en kompliceret proces, men ved hjælp af XC8 Compiler kan denne opgave udføres ved blot at bruge en enkelt kodelinje. Hvis dataene er store med hensyn til Mega-byte, kan vi interface en lagerenhed som et SD-kort og gemme disse data på dem. Men vi kan undgå disse trættende processer, hvis dataene er små, vi kan simpelthen bruge EEPROM til stede i PIC Microcontroller til at gemme vores data og hente dem når som helst vi ønsker det.
Denne PIC EEPROM tutorial er en del af en sekvens af PIC Microcontroller Tutorials, hvor vi startede fra et meget grundlæggende niveau. Hvis du ikke har lært de tidligere tutorials, ville det være bedre at se på dem nu, fordi denne tutorial antager, at du er fortrolig med Interfacing LCD med PIC Microcontroller og Brug ADC med PIC Microcontroller.
EEPROM i PIC16F877A:
EEPROM står for “Elektronisk sletbar og programmerbar skrivebeskyttet hukommelse”. Som navnet antyder, er det en hukommelse til stede inde i PIC Microcontroller, hvor vi kan skrive / læse data ved at programmere det til at gøre det. Data gemt i dette slettes kun, hvis det nævnes at gøre det i programmet. Mængden af tilgængelig lagerplads i EEPROM varierer efter hver mikrokontroller; detaljerne gives som normalt i databladet. I vores tilfælde for PIC16F877A er den ledige plads 256 byte som nævnt i specifikationsdatabladet. Lad os nu se, hvordan vi kan bruge disse 256 byte til at læse / skrive data ved hjælp af en simpel eksperimentel opsætning.
Kredsløbsdiagram og forklaring:
Kredsløbsdiagrammet for projektet er vist ovenfor. Vi har grænseflade til et LCD-display for at visualisere de data, der bliver gemt og hentet. Et normalt potentiometer er forbundet til AN4 Analog kanal, så fød variabel spænding, denne variable spænding vil blive brugt som de data, der skal gemmes i EEPROM. Vi har også brugt en trykknap på RB0, når der trykkes på denne knap, gemmes dataene fra den analoge kanal i EEPROM.
Denne forbindelse kan foretages på et brødbræt. De pinouts af PIC Microcontroller er vist i tabellen nedenfor.
S. nej: |
Pinkode |
Pin-navn |
Forbundet til |
1 |
21 |
RD2 |
RS på LCD |
2 |
22 |
RD3 |
E af LCD |
3 |
27 |
RD4 |
D4 af LCD |
4 |
28 |
RD5 |
D5 af LCD |
5 |
29 |
RD6 |
D6 af LCD |
6 |
30 |
RD7 |
D7 af LCD |
7 |
33 |
RBO / INT |
Trykknap |
8 |
7 |
AN4 |
Potentiometer |
Simulering af brug af PIC EEPROM:
Dette projekt involverer også en simulering designet med Proteus, hvor vi kan simulere projektets arbejde uden hardware. Programmet til denne simulering gives i slutningen af denne vejledning. Du kan simpelthen bruge Hex-filen herfra og simulere hele processen.
Under simuleringen kan du visualisere den aktuelle ADC-værdi og data gemt i EEPROM på LCD-skærmen. For at gemme den aktuelle ADC-værdi i EEPROM skal du blot trykke på kontakten, der er tilsluttet RB0, og den gemmes. Et øjebliksbillede af simuleringen er vist nedenfor.
Programmering af PIC til EEPROM:
Den komplette kode til denne tutorial gives i slutningen af denne tutorial. I vores program skal vi læse Værdier fra ADC-modulet, og når der trykkes på en knap, skal vi gemme den værdi i vores EEPROM. Da vi allerede har lært om ADC'er og LCD-grænseflader, vil jeg yderligere forklare koden for at gemme og hente data fra EEPROM.
Ifølge databladet “Disse enheder har 4 eller 8K ord med Flash-program med et adresseområde fra 0000 til 1FFFh for PIC16F877A”. Dette betyder, at hver EEPROM-lagerplads har en adresse, hvorigennem den kan tilgås, og i vores MCU starter adressen fra 0000 til 1FFFh.
For at gemme data inde i en bestemt EEPROM-adresse skal du blot bruge nedenstående linje.
eeprom_write (0, adc);
Her er “adc” en variabel af typen heltal, hvor de data, der skal gemmes, er til stede. Og "0" er adressen på EEPROM, hvor vores data gemmes. Syntaksen “eeprom_write” leveres af vores XC8-complier, og derfor bliver registre automatisk taget hånd om af compileren.
For at hente data, der allerede er gemt i EEPROM og gemme dem i en variabel, kan følgende linje kode bruges.
Sadc = (int) eeprom_read (0);
Her er “Sadc” variablen, hvor dataene fra EEPROM gemmes. Og "0" er adressen på EEPROM, hvorfra vi henter dataene. Syntaksen “eeprom_read” leveres af vores XC8-complier, og derfor bliver registre automatisk taget hånd om af compileren. De data, der er gemt i EEPROM, vil være i hexadecimal type. Derfor konverterer vi dem til heltalstype ved at prefikse en (int) før syntaksen.
Arbejder:
Når vi først har forstået, hvordan koden fungerer, og gør os klar med hardwaren, kan vi teste koden. Upload koden til din PIC Microcontroller og tænd for opsætningen. Hvis alt fungerer som forventet, skal du se de aktuelle ADC-værdier vises i LCD'et. Du kan nu trykke på knappen for at gemme ADC-værdien i EEPROM. Nu kontrollerer du, om værdien er gemt ved at slukke for hele systemet og tænde det igen. Når den er tændt, skal du se den tidligere gemte værdi på LCD-skærmen.
Den komplette bearbejdning af dette projekt til brug af PIC Microcontroller EEPROM er vist i videoen nedenfor. Håber du forstod vejledningen og nød at gøre det. Hvis du er i tvivl, kan du skrive dem i kommentarfeltet nedenfor eller sende dem på vores fora.