EEPROM Programming.(Reading and Writing EEPROM using microcontroller)
මයික්රෝකොන්ට්රෝලරයක් ගත්කල ප්රධාන මතකයන් (memory) තුනක් ඇත.Programming memory,RAM memory හා EEPROM එම මතකයන් තුන වේ.අප මෙතෙක් වැඩසටහන් සකස් කරනු
ලැබුවේ මෙම මතකයන් තුනෙන් Programming memory හා RAM memory යොදාගෙන වේ.එබැවින් එම මතකයන් පිළිබදව අප දැනටමත් දනිමු.
මයික්රෝකොන්ට්රෝලර සදහා වැඩසටහන් සකස්කර එය ඇතුලත් කරනු ලබන්නේ Program memory යට වන බවත්, මෙය flash memory වර්ගයට අයත් වන නිසා නැවත නැවත වැඩසටහන් ගත කිරීම සිදු කල හැකි බවත්,එසේම මෙම මතකය විදුලි විසන්දී කල විට පවා මතකය වෙනස් නොවී පවතින බවත් (non-volatile) අප දනිමු.
RAM memory යෙන් සිදු වන්නේ, Program memory යේ ඇති වැඩසටහන ක්රියාත්මක වන විට එම වැඩසටහන තුල මයික්රෝකොන්ට්රෝලරයේ යොදාගැනෙන ඒකක පාලනය කිරීම සදහා යොදාගැනෙන සැකසුම් තාවකාලිකව ගබඩා කර තබා ගැනීම වේ. මෙම මතකය රදා පවතින්නේ විදුලිය තිබෙන තුරු පමණක් වන අතර විදුලිය විසන්දි කල විට මෙම මතකය මැකී යයි.එමනිසා RAM memory එක volatile memory වර්ගයට අයත් වේ.
මෙම මතකයන් දෙකට අමතරව තවත් මතකයක් මයික්රෝකොන්ට්රෝලර වල ඇත.එය EEPROM වේ. EEPROM යනු Electrically Erasable Programmable Read Only Memory යන්න කෙටිකර දැක්වීමයි. මෙම EEPROM මතකය ROM(Read Only Memory) MEMORY ට ම සමාන වේ.එනම් මෙම මතකය යොදාගනු ලබන්නේ වැඩසටහන ක්රියාත්මක වීමේදී අවශ්ය වන කියවීම සදහා ඇති දත්ත තැන්පත් කරලීම සදහා වේ.මෙම ROM මතකය සදහා දත්ත තැන්පත් කිරීම සදහා විශේෂිත උපකරන සහ ක්රමවේද අනුගමනය කරනු ලබයි.කෙසේවෙතත්, සාමාන්ය ROM මතකය මෙන් නොව, EEPROM හී විශේෂත්වය වන්නේ මෙම මතකයෙහි අන්තර්ගතය වැඩසටහන ක්රියාත්මක වන විට වෙනස් කළ හැකි වීමයි.ඒ අනුව නමෙන්ම පැහැදිලිවන ආකාරයට මෙම මතකය විදුලිය මගින් මැකිය හැකි,නැවත නැවත දත්ත ඇතුලත් කල හැකි Memory යක් වේ.
මයික්රෝකොන්ට්රෝලර සදහා වැඩසටහන් සකස්කර එය ඇතුලත් කරනු ලබන්නේ Program memory යට වන බවත්, මෙය flash memory වර්ගයට අයත් වන නිසා නැවත නැවත වැඩසටහන් ගත කිරීම සිදු කල හැකි බවත්,එසේම මෙම මතකය විදුලි විසන්දී කල විට පවා මතකය වෙනස් නොවී පවතින බවත් (non-volatile) අප දනිමු.
RAM memory යෙන් සිදු වන්නේ, Program memory යේ ඇති වැඩසටහන ක්රියාත්මක වන විට එම වැඩසටහන තුල මයික්රෝකොන්ට්රෝලරයේ යොදාගැනෙන ඒකක පාලනය කිරීම සදහා යොදාගැනෙන සැකසුම් තාවකාලිකව ගබඩා කර තබා ගැනීම වේ. මෙම මතකය රදා පවතින්නේ විදුලිය තිබෙන තුරු පමණක් වන අතර විදුලිය විසන්දි කල විට මෙම මතකය මැකී යයි.එමනිසා RAM memory එක volatile memory වර්ගයට අයත් වේ.
මෙම මතකයන් දෙකට අමතරව තවත් මතකයක් මයික්රෝකොන්ට්රෝලර වල ඇත.එය EEPROM වේ. EEPROM යනු Electrically Erasable Programmable Read Only Memory යන්න කෙටිකර දැක්වීමයි. මෙම EEPROM මතකය ROM(Read Only Memory) MEMORY ට ම සමාන වේ.එනම් මෙම මතකය යොදාගනු ලබන්නේ වැඩසටහන ක්රියාත්මක වීමේදී අවශ්ය වන කියවීම සදහා ඇති දත්ත තැන්පත් කරලීම සදහා වේ.මෙම ROM මතකය සදහා දත්ත තැන්පත් කිරීම සදහා විශේෂිත උපකරන සහ ක්රමවේද අනුගමනය කරනු ලබයි.කෙසේවෙතත්, සාමාන්ය ROM මතකය මෙන් නොව, EEPROM හී විශේෂත්වය වන්නේ මෙම මතකයෙහි අන්තර්ගතය වැඩසටහන ක්රියාත්මක වන විට වෙනස් කළ හැකි වීමයි.ඒ අනුව නමෙන්ම පැහැදිලිවන ආකාරයට මෙම මතකය විදුලිය මගින් මැකිය හැකි,නැවත නැවත දත්ත ඇතුලත් කල හැකි Memory යක් වේ.
මෙම EEPROM මතකයන් කුඩා IC ලෙස, විවිධ මතක ධාරිතාවන්ගෙන් යුක්තවන ලෙස EEPROM ශ්රේණි බොහොමයක් නිර්මාණය කර ඇත. මේවා අතරින් බහුලව භාවිතා වන EEPROM ශ්රේණිය වන්නේ 24CXX ශ්රේණියේ IC වර්ග වේ. 24C02, 24C04, 24C08 යනු එලෙස
නිර්මාණය කර ඇති EEPROM කිහිපයක් වේ. පහත දැක්වෙන්නේ මෙම EEPROM IC එකක පින් සැකැස්ම වේ.
මෙම IC එකට දත්ත
ඇතුලත් කිරීමට සහ කියවීම සදහා යොදාගනු ලබන්නේ I2C සංනිවේදන ක්රමය වේ.එසේම මෙම IC සියල්ලටම පොදු සමාන ගති ලක්ෂණ ඇති නමුත් මේවායේ මතක ධාරිතාවයේ වෙනස පමණක්. ඇත.
මයික්රෝකොන්ට්රෝලර තුල EEPROM යොදාගනු ලබන්නේ ඇයි?
සාමාන්යයෙන් ROM මතකය යොදාගනු
ලබන්නේ විදුලිය විසන්දි වු විට පවා මැකී නොයන දත්ත ගබඩා කිරීමට බව ඉහත සදහන් කරන
ලදී.ඒ අනුව මයික්රෝකොන්ට්රෝලරයේ
EEPROM තුලට ඇතුලත් කරන දත්ත වර්ග පිළිබදව සලකා බැලිම මගින් මයික්රෝකොන්ට්රෝලර
තුල මෙම මතකය යොදැගනු ලබන්නේ ඇයි දැයි
පැහැදිලි කර ගත හැකිය.
විවිධ සැකසුම් මතක තබා ගැනීම, උපාංගයේ වැදගත් පරාමිතීන් ගබඩා කිරීම ආදිය සදහා EEPROM මතකය බහුලව භාවිතා වේ. උදාහරණයක් වශයෙන් විදුලි පංකාවක වේගය පාලනය කිරීම සඳහා පරිපථයක් සදා ඇතැයි සිතන්න.මෙය ක්රියාත්මක කිරීම සදහා වේගය පාලනය සදහා වූ සැකසුම් දත්ත මෙම පරිපථයට ලබා දිය යුතුය.එවිට විදුලිය සපයා ඇති තෙක් මෙම සැකසුම් වලට අනුව විදුලි පංකාව ක්රියාත්මක වේ.එහෙත් විදුලිය විසන්දි කර නැවත ක්රියාත්මක කිරීම සදහා නැවත සැකසුම් සකස් කල යුතුය.නමුත් මෙම සැකසුම් දත්ත ගබඩා කිරීම සදහා EEPROM එක යොදාගනු ලැබුව හොත් වැඩසටහන ක්රියාත්මක වීමේදී මෙම සැකසුම් කියවා ඒවා ක්රියාත්මක කිරීම සිදු කල හැක.ඒ අනුව මෙහිදී වරක් සැකසුම් සකසා,EEPROM මතකයේ ගබඩා කල පසු ඊළඟ වතාවේ බලය සපයා ක්රියාත්මක කරන විට, EEPROM මතකයෙන් වේගය කියවා විදුලි පංකාවේ වේගය පාලනය කිරීමට භාවිතා කරයි. එවිට පරිපථය නැවත ආරම්භ කරන සෑම අවස්ථාවකම පරිශීලකයා නැවත නැවතත් සැකසුම් සැකසීම වළක්වයි. මෙම සැකසුම් කිසිම අකාරයකින් අප විසින් වෙනස් කරන තුරු හෝ මකාදවන තුරු නොවෙනස්ව පවතී.
විවිධ සැකසුම් මතක තබා ගැනීම, උපාංගයේ වැදගත් පරාමිතීන් ගබඩා කිරීම ආදිය සදහා EEPROM මතකය බහුලව භාවිතා වේ. උදාහරණයක් වශයෙන් විදුලි පංකාවක වේගය පාලනය කිරීම සඳහා පරිපථයක් සදා ඇතැයි සිතන්න.මෙය ක්රියාත්මක කිරීම සදහා වේගය පාලනය සදහා වූ සැකසුම් දත්ත මෙම පරිපථයට ලබා දිය යුතුය.එවිට විදුලිය සපයා ඇති තෙක් මෙම සැකසුම් වලට අනුව විදුලි පංකාව ක්රියාත්මක වේ.එහෙත් විදුලිය විසන්දි කර නැවත ක්රියාත්මක කිරීම සදහා නැවත සැකසුම් සකස් කල යුතුය.නමුත් මෙම සැකසුම් දත්ත ගබඩා කිරීම සදහා EEPROM එක යොදාගනු ලැබුව හොත් වැඩසටහන ක්රියාත්මක වීමේදී මෙම සැකසුම් කියවා ඒවා ක්රියාත්මක කිරීම සිදු කල හැක.ඒ අනුව මෙහිදී වරක් සැකසුම් සකසා,EEPROM මතකයේ ගබඩා කල පසු ඊළඟ වතාවේ බලය සපයා ක්රියාත්මක කරන විට, EEPROM මතකයෙන් වේගය කියවා විදුලි පංකාවේ වේගය පාලනය කිරීමට භාවිතා කරයි. එවිට පරිපථය නැවත ආරම්භ කරන සෑම අවස්ථාවකම පරිශීලකයා නැවත නැවතත් සැකසුම් සැකසීම වළක්වයි. මෙම සැකසුම් කිසිම අකාරයකින් අප විසින් වෙනස් කරන තුරු හෝ මකාදවන තුරු නොවෙනස්ව පවතී.
PIC16F877A මයික්රෝකොන්ට්රෝලරයේ EEPROM මතකය
මයික්රෝකොන්ට්රෝලර තුලද වැඩසටහන් ක්රියාත්මක කිරීමේදී අවශ්යවන සැකසුම් මතක තබා ගැනීම, උපාංගයේ වැදගත් පරාමිතීන් ආදිය ගබඩා කිරීම සදහා EEPROM මතකයක් අතුලත් කර ඇත.ඒ අනුව PIC16F877A මයික්රෝකොන්ට්රෝලරයේ ද bytes 256 ක EEPROM memory ක් ඇත. මෙය කුඩා මතක ප්රමාණයක් බව පෙනුනද, උපාංග හා සම්බන්ධ වින්යාස තොරතුරු බොහොමයක් ගබඩා කිරීමට එය ප්රමාණවත් වේ.මීට වඩා වැඩි ගබඩා කිරීමක් අවශ්ය නම් බාහිරව සම්බන්ද කලහැකි EEPROM IC එකක් සම්බන්ද කර මතක ධාරිතාවය වැඩි කර ගත හැක.
මයික්රෝකොන්ට්රෝලරය තුල ඇති ඒකක පාලනය කිරීම සදහා, එම ඒකකයන්ට වෙන්වු
රෙජිස්ටර යොදාගනු ලබයි.EEPROM මතකයද මයික්රෝකොන්ට්රෝලරය තුල ඇති ඒකකයක් බැවින්,මෙම ඒකකය යොදාගැනීම
සදහා ද රෙජිස්ටර කිහිපයක් ඇත.ඒ අනුව මෙම EEPROM මතකයට දත්ත ඇතුලත් කිරීම සහ එයින්
දත්ත කියවීම සදහා එම රෙජිස්ටර වලට සුදුසු
අගයන් යොදා ඒවා යොදාගැනීම සිදු කල හැක.
EEPROM ඒකකය යොදාගැනීම සදහා ඇති Registers
- EEDATA - මෙය බිටු 8 ක රෙජිස්ටරයක් වන අතර EEPROM මතකයට read/write කිරීමට අදාල දත්ත තාවකාලිකව ගබඩා කිරීමට යොදාගනු ලබයි.
- EEADR - මෙම රෙජිස්ටරය යොදාගනු ලබන්නේ, දත්ත read හෝ write කිරීමට EEPROM මතකයේ ඇති memory location එක (address of EEPROM memory location) තාවකාලිකව ගබඩා කිරීම සදහා වේ.
- EECON1 - මෙම රෙජිස්ටරය EEPROM මතකයට දත්ත read හා write කිරීමේ ක්රියාවලිය පාලනය කරනු ලබයි.
EEPGD Bit - මෙම බිටුව යොදාගනු ලබන්නේ Program Memory හා Data Memory එක තෝරා ගැනීම සදහා වේ.එනම් Program Memory එක තේරීම සදහා 1 ද Data Memory තේරීම සදහා 0 ද
වේ.
WRERR Bit – මෙම බිටුව Flag බිටුවක් ලෙස යොදාගනු ලබයි.එනම් මෙම බිටුව 1 නම් දත්ත
තැන්පත් කිරීම අතරමග ඇනහිට ඇත.මෙම බිටුව 0 නම් දත්ත තැන්පත් කිරීම සාර්තකව සිදු වී
ඇත.
WREN - මෙම බිටුව මගින් දත්ත තැන්පත් කිරීම සක්රිය කරනු ලබයි.
WR Bit – Write control bit - මෙම බිටුව
මගින් දත්ත තැන්පත් කිරීම ඇරබීම සිදු කරනු ලබයි.එනම් මෙම බිටුව 1 නම් දත්ත තැන්පත්
කිරීම සිදු වෙමින් පවතින අතර දත්ත තැන්පත්වීම අවසන් වූ පසු මෙම බිටුව ස්වයංක්රියව
0 බවට පත් වේ.
RD - Read control bit- මෙම බිටුව මගින් දත්ත කියවීම ආරම්බ කරනු ලබයි.මෙහිදීද දත්ත කියවීම අවසන්
වූ පසු මෙම බිටුව ස්වයංක්රියව 0 බවට පත් වේ.
- EECON2 – EEPROM තුලට ඇතුලත් කරනු ලබන දත්ත එම නිර්මාණය කරනු ලබන වැඩසටහනට අතවශ්ය දත්ත වේ.එම නිසා එම දත්ත ඇතුලත් කිරීමේදී ඒවා නිවැරදිව ඇතුලත් කිරීම සිදු කල යුතුය.ඒ අනුව මෙම රෙජිසිටරය යොදාගනු ලබන්නේ දත්ත write කිරීමේ ක්රියාවලිය සදහා වේ.මෙම රෙජිස්ටරය ඇත්ත වශයෙන්ම ඉහත EECON1 රෙජිස්ටරය මෙන් හෞතිකව බිටු සැකසුමු නොකරන අතර write කිරීමේ ක්රියාවලිය නිවැරදිව සිදු කිරීම සදහා Backup එකක් ලෙස යොදාගනු ලබයි.
EEPROM Memory යෙන් දත්ත කියවීමට අදාල පියවර
1. EEADR රෙජිස්ටරයට EEPROM මතකයේ දත්ත කියවීමට අදාල memory location හී address එක ලිවීම.
2. EEPROM data memory එක තේරීම සිදු කිරීම, ඒ සදහා EEPGD බිටුව 0 බවට පත්කල යුතුය.
3. RD bit මගින් දත්ත කියවීම සක්රිය කිරීම.
4. අවසාන වශයෙන් EEDATA register එක කියවීම තුලින් එම අදාල දත්තය ලබා ගත හැක.
EEPROM Memory යට දත්ත තැන්පත් කිරීමට අදාල පියවර
1. EEADR රෙජිස්ටරයට EEPROM මතකයේ දත්ත ලිවීමට අදාල memory location හී address එක ලිවීම.
2. බිටු අටකින් යුතු දත්තය EEDATA register එකට ලිවීම.
3. EEPROM data memory එක තේරීම සිදු කිරීම, ඒ සදහා EEPGD bit ව 0 බවට පත්කල යුතුය.
4.WREN බිටුව මගින් දත්ත තැන්පත් කිරීම සක්රිය කිරීම
5. WR bit මගින් දත්ත ලිවීම ආරම්බ කිරීම.
MikroC යොදාගෙන EEPROM මතකයට දත්ත read/write කිරීම
EEPROM මතකය හා සම්බන්ද රෙජිස්ටර වලට සුදුසු අගයන් යොදාගෙන දත්ත read/write කිරීමේදී, අනුගමණය කල යුතු පියවරවල් ඉහත පැහැදිලි කරන ලදී.එසේම MikroC හී Lanuage Libraries යෙහි ඇති fuction යොදාගෙන ඉහත කාර්යන් පහසුවෙන් සිදුකරගත හැක.ඒ අනුව පහත දැක්වෙන්නේ EEPROM මතකයට දත්ත read/write කිරීම සදහා යොදාගනු ලබන fuction වේ.
EEPROM_Read (unsigned int address) – මෙම fuction එක යොදාගනු ලබන්නේ EEPROM මතකයෙන් දත්ත කියවීම සදහා වේ.මෙහි වරහන් තුලට කියවීමට අවශ්ය දත්තයේ address එක යෙදිය යුතුය.
EEPROM _Write (unsigned int address, unsigned short data) - මෙම fuction එක යොදාගනු ලබන්නේ EEPROM මතකයට දත්ත ඇතුලත් කිරීම සදහා වේ.මේ සදහා දත්ත ඇතුලත් කල යුතු ස්ථානයේ address එක පළමුවද ඉන් අනතුරුව ඇතුලත් කල යුතු දත්තයද වරහන් තුල යෙදිය යුතුය.
PIC16F877A මයික්රෝකොන්ට්රෝලරයේ EEPROM මතකය යොදාගෙන වැඩසටහනක් ගොඩ නැගීම
මෙම වැඩසටහන මගින් කරනු ලබන්නේ, මයික්රෝකොන්ට්රෝලරයේ 33 වන පින් එකට සම්බන්ද සුවිචය එබීමේදී දත්ත තැන්පත් කිරීම සිදු කරනු ලබන අතර 34 වන පින් එකට සම්බන්ද සුවිචය එබීමේදී එම තැන්පත් කරනු ලැබු දත්ත කියවා ඒ අනුව portd හා සම්බන්ද කරනු ලැබු led දැල්වීම සිදු කරන ආකාරයේ වැඩසටහනකි.
පහත දැක්වෙන්නේ මීට අදාල පරිපථ සටහන සහ mikroC වැඩසටහන වේ.
MikroC code