Friday, November 25, 2011

එහෙනම් අපි පලවෙනි PIC Programme එක ලියමු



මම මුලින්ම ඔයාල කරන්න ඔනෙ අපිට ඔනෙ කරන PIC අයිසී එක අර ගන්න එක. සමාන්යෙන් නම් මුලින්ම පොඩි එකෙන් තමඉ පටන් ගන්න ඔනෙ. එත් ඔයලත් මම වගෙම එක පර ලොකු එකක්ට අත ගහන්න කම්ති ඈතිනෙ. එ නිස අපි චුට්ටක් විතර වඩ කලි තියෙන Microcontroller එකඉන් වෑඩෙ කරන්න පටන් ගමු. මම තෝර ගන්නෙ PIC 16F877A කියන පික් එක. ටිකක් විතර ලොකු වඩ ටිකක් මෙකෙන් ගොඩ ඩ ගන්න පුලුවන්. ඔක කඩෙ රුපියල් 250ක් විතර තමයි වෙන්නෙ. මම මෙ දල තියෙන මොඩල් නොම්බරෙන් ඉල්ලපුවම ඔයලට එක ගන්න පුලුවන්.


දෑන් ඊට පස්සෙ කරන්න ඔනෙ ඔයල ගත්ත පික් එක ගෑනයි එකෙ පින් තියෙන හටි ගෑනයි පොඩි අවබොදයක් ලබා ගන්න එක.






දැන් මේ පික් එකේ දටශීට් එක අරගෙන ඕනේ කරන දේවල් ටික පොඩ්ඩක් විතර බල ගන්න. එක කරන එක හොදි. නමුත් මම මෙතන දල තියෙන පින් සටහනත් මේ වැඩේ කරන්න නම හොඳටම ඇති. එත් data sheet එක තිය ගන්න එක ඉස්සරහට වටිනවා. මෙන්න ලින්ක් එක බා ගන්නකෝ. http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf


මෙන්න මේකයි අපි කරන්න හදන්නේ. පුෂ් බුට්ටෝන් එකක් ඔබපුවම light එකක් ඔන් ඔෆ්ෆ් වෙන විදිහට circuit එකක් තමි හදන්නේ. PIC එක්ක වැඩ කරනවා කියන්නේ නිකන් චොම්පුටෙර් එකේ ප්රෝචෙස්සොර් එකක් එක්ක වැඩක කරනවා වගේ තමයි . ඔයාල දන්නවා ඇතිනේ කොම්පුටෙරේ තියෙන registers ගැන. ඒ වගේ තමි පික් එකෙත් රෙගිස්ටෙර් තියෙනවා. අපි බලමු අපි මේ වැඩේ කරන්න හදන පික් එක ගැන. මේකේ output පොර්ට් 5 ක් තියෙනවා. ඒ කියන්නේ පින් 7 ගැනේ තියෙන පොර්ට් 3 ක් එක්ක පින් 5 ගානේ එකකුයි දෙක ගැනේ එකකුයි තියෙනවා. මේ පොර්ට් වල එක එක විශේෂත්ව තියෙන විදියට තමි මේවා වෙන කරලා තියෙන්න. කතන්දර කියන්නේ නැතුව අපි වැඩේ කරලා පස්සේ විස්තර බලමු නේද? නැත්නම් ඔයාලට දැන්ම එපා වෙයි.


මම කලින් පොස්ට් එකේ කිව්වා විදියට mikro C ඉන්ස්ටල්ල් කරගෙන ඉන්නේ කියල හිතනවා. දැන් mikroC එක ඔපෙන් කර ගන්නකෝ. දැන් File-> New -> New Project තෝරන්න. දැන් එන වින්ඩෝ එකේ next කරන්න. ඊ ලගට එන එකේ අපි වැඩේ කරන්න හදන පික් එකේ නම තෝරන්න. ඒ කියන්නේ PIC16F877A. අන්තිමට තියෙන A අකුර අනිවරෙන්ම තියෙන එක තෝරන්න. දැන් next කරලා clock එක තෝරන්න. clock එක කියන්නේ අපි මේ පික් එකට දාන programme එක තත්පර එකකට රන් වෙන වර ගණන. ඔයාල ගණිතය කරලා තියෙනවනේ. මේ වර ගණන වැඩි උනොත් අපේ ඔඋට් පුත එකේ තියෙන error එක අදුඉ කියල ඔයාලට පොඩ්ඩක් කල්පනා කලොත් තේරෙයි. ගොඩක් වෙලාවට මේ වගේ පොඩි ඒවාට 4MHz වගේ තමයි තෝරන්නේ. ඒ නිසා 4 තෝරලා next කරන්න. දැන් project එක save කරන තැන තෝරලා next කොරන්න. ඊ ලගට එකත next කරන්න මුකුට්‌ වෙනස් නොකර. ඒ වගේම ඒ ලග එකත. අන්තිමට finish ඔබන්න.


දැන් තියෙන්නේ කෝඩ් එක ලිය ගන්න එක.


void main() {

TRISA = 0b00011101;

PORTA.RA1 = 0;


while(1){

if (PORTA.RA0 == 1){

~PORTA.RA1;

}

}


}


මේක බලපුවම ඔයාලට තේරෙනවද? නැ නේද. ඉන්නකෝ අපි දැන් අපේ සර්කිට් එකත් හදා ගෙන ඉමු ඉක්මනට . ඕනෑම පික් එකක පොදු වයරින් එකක් තියෙනවා. ඔයාල මේක හරියට කර ගට්ටම අනික ඒවත් මේ වගේම තමයි. දැන් ඔයාල ගතට data sheet එකේ බලන්නකෝ පින් diagram එක.


මම දැන් කියන පින් වලට මේ විදියට supply දෙන්න.


මේක හදනකොට bread board(project board) එකක හදනවනම් හොදයි. පික් එක සරින් සැරේට ගලවන්න වෙන නිසා ප්‍රෝග්‍රෑම් කරනකොට. ඔයාල PCB එකක් හදනවනම් මතක කරලා පික් එකට ZIP සොකට් එකක් හයි කරන්න.


Vdd දෙකටම +5V දෙන්න 7805 රේගුලටෝර් IC eka haraha.


Vss දෙකම ground කරන්න.


OSC1 and OSC2 පින් දෙකට 4MHz Krystal එකේ පින් දෙක දෙන්න. ඒ පින් දෙක වෙන වෙනම 10pF,22pF වගේ cap එකක් හරහා ground කරන්න.


දැන් 1 වෙනිම පින් එක ඒ කියන්නේ MCLR බා කියල තියෙන එක. මේ පින් එකේ තේරුම එකේ logic අගය 0 උනොත් පික් එක මෙමරි clear වෙනවා කියන එක. මෙමරි ක්ලියර් උනොත් අපේ වැඩේ කර ගන්න බැනේ. ඒ නිසා ඒ පින් එක logic 1 අගයේ තිය ගන්න ඕනේ. එකට අපි කරන්නේ 1K resistor එකක් හරහා supply voltage එකෙන්ම දීල 47uF කපසිටර් එකකින් ground කරන එක. කියපු ටික මේකෙන්ම බල ගන්නකො.





දැන් තියෙන්නේ input/output ටික සෙට් කර ගන්න එක. මේකේ මම ලියපු code එකේ විදියට input එක අරන් තියෙන්නේ RA0 ඒ කියන්නේ 2 වෙනි පින් ඒකෙන. output එක අරන් තියෙන්නේ RA1,ඒ කියන්නේ 3 වෙනි පින් ඒකෙන්. මේ විදියට අපිට ඕන කරන ඉන්පුට් අවුට් පුට් සෙට් කර ගන්න.





දැන් අපි ලියපු code එකේ පාලියෙන් පලිය තේරුම


void main() {


මේක ඇතුලේ ලියන්න තියෙන්නේ අපේ main code එක.


TRISA = 0b00011101; මේකෙන් වෙන්නේ A කියන port එකේ තියෙන පින් 5 න් 2 වෙනි එක output pin එකක් බවටත් අනික පින් 4 ම input බවටත් පික් එකට හඳුන්වල දෙන එකයි. input දැක්වීම ට 1 හා output දැක්වීමට 0 ත තමයි මෙතැනදී යොදා ගන්නේ. මේ පියවර අත්‍යවශ්‍යම දෙයක්. අපි පින් වලින් කරන දේ අඳුර ගන්න පික් එකට බැරි නිසා අපි මේ විදියට කියන්න ඕනේ අපි මේ මේ පින් පාවිච්චි කරන්නේ මේ මේ දේවල් වලටි කියන එක.


PORTA.RA1 = 0;මේකෙන් කරලා තියෙන්නේ අපි output එක ගන්න RA1 පින් ක පික් එක පටන් ගන්න අවස්ථාවේදී ම logic 0 කරලා තියන එකයි . හරියට preset value එකක් දෙනවා වගේ දෙයක්.


while(1){ මේ පටන් ගන්නේ ඉවරයක්‌ නැති ලූප් එකක්. ඔයාල ලූප් ගැන දන්නවා ඇති කියල හිතනවා. එහෙම නැත්නම් C programmin ගැනත් ලිපියක් ඉස්සහරහට පල කරන්නත් බලාපොරොත්තු වෙනවා. මේකෙන් වෙන්නේ මේ while එක තුලෙ තියෙන කමාන්ඩ් ටික එක දිගටම සිද්ද වෙන එක. ඒ කියන්නේ නැවතීමක් නැ. මතකද මම මුල් හරියේ කිව්වා clock එකක් ගැන. අන්න ඒ clok ඒකෙන තමි මේක එක දිගට repeat වෙන speend එක පාලනය කරන්නේ.


if (PORTA.RA0 == 1){ මේ ලිනේ එකන් පරික්ෂ කරලා බලනවා RA0 කියන පින් එක තියෙන logic state එක. එක 1 උනොත් ඇතුලේ තියෙන ලයින් රන් වෙනවා. නැත්නම් එලාග ලූප් එකේදී අයෙ චෙක කරනවා.


~PORTA.RA1; මේකෙන් වෙන්නේ තියෙන ලොගික් state එකේ පරස්පරය දෙන එක. එක තිබ්බොත් 0 යි. 0 තිබ්බොත්1 යි .


}

}


}


ටිකක් ටිකක් චොදේ එක තේරෙන්න ඇති කියල හිතනවා. දන තියෙන්නේ මේ චොදේ එක ඔයාලගේ microchip එකට burn කර ගන්න එක. දැන් microC වල ටයිප් කරපු එක ඕපන් කරගෙන, build -> build ඔබන්න. එතකොට compile වෙයි. ඔයාලගේ අතින් වැරද්දක් වෙලා තිබුනොත් රතු පාටින් errors එයි. එහෙම උනොත් ලයින් නොම්බරේ බලල වැරැද්ද හද ගන්න. ඕක build කලාම හැදෙන්නේ .hex කියල ෆිලේ එකක. එක සවේ වෙන්නේ ඔයාල project එක හදනකොට දුන්න folder එකේම තමයි. build කලට පස්සේ ඒ ෆෝල්දෙරේට ගිහින් බලන්න හදපු hex ෆයිල් එක. දැන් burn කරන්න.


මුලින්ම කියන්නම් pickit2 තියෙන අයට කරන විදිහ. pic kit 2 එක ඔපෙන් කරන්න. ඔයාලගේ device එකත ප්ලග කරන්න. දැන් file-> import hex file clik කරලා ලොඅඩ් කරගෙන write බට්ටන් එක ක්ලික් කරන්න.


බර්න් උනාට පස්සේ පික් එක පික් කිට් එකෙන් ගලෝල අරගෙන ඔයාල මුලින් හදා ගතට සර්කිට් එකට සෙට් කරන්න. දැන් පවර් සප්ලයි එක දීල පුෂ් බට්න් එක ඔබ ඔබ බලන්න ලයිට් එකට මොකද වෙන්නේ කියල. මේ විදියට ඔයාලට බුදුරැස් මාලාවක්, නයිට් රයිඩර් එකක් එහෙම හදා ගන්න පුළුවන්. මගේ ඊ ලග ල්යිපියෙන් නයිටේ රයිඩර් එකක් හදන්න කියල දෙන්නම්කො. ප්‍රශ්න තියෙනවනම් කොමෙන්ටුවක් දාන්න. ඔයාලට වැදගත් කියල හිතුනොත් එකත කියල යන්න අමතක කරන්න එපා යාලුවනේ. එහෙනම් අදට නවතින්නම්.

No comments:

Post a Comment