Mint korábban már beharangoztam most egy EEPROM használattal kapcsolatos cikk következik.
Ezen eszközök működését a korábbi cikkemben már leírtam, így erre most nem térnék ki.
A legtöbb PIC mikrovezérlő rendelkezik saját, belső EEPROM memóriával melyet akár már a programozás során is módosíthatunk, így elérve, hogy első indításnál is rendelkezzen már bizonyos belső adatokkal.
A MikroC programban elég szépen le van írva példával szemléltetve, hogy ezt hogyan is kell pontosan használni, ezért ez egy rövidebb cikk lesz. A következő ilyen témájú rész, amely az alkatrészek miatt valószínűleg csúszik 1 hetet, (vagy többet) a külső I2C EEPROMok programozására fog kiéleződni.
Az oldalon már említettem egy Proteus 7 vagy 8 nevű programot mellyel nagyon szépen lehet leszimulálni egy ilyen program futását a kijelölt cél IC-n. A mai részben a 18F2550-es IC-t veszem alapul, amely 256 byte EEPROM memóriával rendelkezik.
A MikroC 6.0.0 verzióját és a Proteus 7 professionalt fogom használni a program elkészítéséhez és szimulálásához.
unsigned short bejovo;
void main() {
UART1_init(9600);
TRISB=0xff; //B lábak bemenetek
Delay_ms(1000);
UART1_Write_Text("EEPROM v1.0");
UART1_Write(13);
UART1_Write(13);
UART1_Write(13);
while(1) {
if(PORTB.F0==1){
while(PORTB.F0==1){}
while(1){
if(UART1_Data_Ready()){
bejovo=UART1_Read();
EEPROM_Write(0x32, bejovo);
UART1_Write_Text("EEPROM Irasa v1.0");
UART1_Write(13);
UART1_Write_Text("Modositva: 0x32");
UART1_Write(13);
UART1_Write(bejovo);
UART1_Write(13);
UART1_Write_Text("===================");
UART1_Write(13);
UART1_Write(13);
break;
}
}
}
bejovo = 0x00;
if(PORTB.F1==1){
while(PORTB.F1==1){}
bejovo=EEPROM_Read(0x32);
UART1_Write_Text("EEPROM Olvasas v1.0");
UART1_Write(13);
UART1_Write_Text("Kiolvasva: 0x32");
UART1_Write(13);
UART1_Write(bejovo);
UART1_Write(13);
UART1_Write_Text("===================");
UART1_Write(13);
UART1_Write(13);
}
if(PORTB.F2==1){
while(PORTB.F2==1){}
EEPROM_Write(0x32, 0xff);
UART1_Write_Text("EEPROM Torolve");
UART1_Write(13);
UART1_Write(13);
}
}
}
Íme egy egyszerű program. A B0 lábon lévő gomb megnyomása esetén írási módba lépünk. Ez esetben az UARTon keresztül érkező egyetlen karakter beírásra kerül az EEPROMba. A B1-es lábon lévő gomb megnyomása esetén Ezt kiolvassa majd UARTon keresztül visszaküldi. A "bejovo=0x00;" sor annak érdekében kell, hogy ez bizonyítsa, tényleg kiolvas nem csak visszaküld.
A B2-es lábon lévő gombbal pedig törölni lehet az EEPROMot.
A második program amit leközlök UARTon elküldni az EEPROM adatait a B0-án lévő gomb lenyomásáról. Erről láthattok képet a cikk elején.
unsigned short datas;
unsigned int adresss, adr1, adr2, ii, yy;
unsigned char hhh[2];
unsigned char readed [16];
void main() {
UART1_Init(9600);
Delay_ms(1000);
TRISB=0xff;
while(1){
UART1_Write_Text("Press 'button' to read the EEPROM");
while(1){
if(PORTB.F0==1){
break;
}
}
UART1_Write(13);
UART1_Write_Text("Addr 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F CHAR");
UART1_Write(13);
UART1_Write(13);
EEPROM_Write(0x05, 'H');
EEPROM_Write(0x06, 'e');
EEPROM_Write(0x07, 'l');
EEPROM_Write(0x08, 'l');
EEPROM_Write(0x09, 'o');
EEPROM_Write(0x0A, '!');
EEPROM_Write(0x00, 0xff);
for(ii=0; ii<=15; ii++){
UART1_Write_Text("000");
if(ii<=9){
UART1_Write(ii+48);
}
else if(ii>=10){
UART1_Write(ii+55);
}
UART1_Write(' ');
UART1_Write(' ');
for(yy=0; yy<=15; yy++){
datas=EEPROM_Read((ii*16)+yy);
readed[yy]=datas;
ShortToHex(datas, hhh);
UART1_Write(hhh[0]);
UART1_Write(hhh[1]);
//UART1_Write(datas);
UART1_Write(' ');
if(yy==7){UART1_Write(' ');}
//UART1_Write(' ');
}
UART1_Write(' ');
for(yy=0; yy<16; yy++){
UART1_Write(readed[yy]);
}
UART1_Write(13);
}
}
}
Rövid demonstrációnak azt hiszem ez elég is lesz, hamarosan folytatom.
Nincsenek megjegyzések:
Megjegyzés küldése