{"id":378,"date":"2015-03-08T23:56:43","date_gmt":"2015-03-08T21:56:43","guid":{"rendered":"http:\/\/ozenozkaya.com\/blog\/?p=378"},"modified":"2015-03-08T23:56:43","modified_gmt":"2015-03-08T21:56:43","slug":"pic-programlama-2-merhaba-pic16","status":"publish","type":"post","link":"http:\/\/ozenozkaya.com\/blog\/?p=378","title":{"rendered":"PIC Programlama &#8211; 2: Merhaba PIC16"},"content":{"rendered":"<p>Selamlar \ud83d\ude42 Bu g\u00fcn nihayetinde Merhaba PIC16 yaz\u0131m\u0131 ekleme niyetindeyim. Esasen yazd\u0131\u011f\u0131m sayfalarca yaz\u0131y\u0131 browser&#8217;\u0131n azizli\u011finden dolay\u0131 kaybettim. Ancak y\u0131lmak yok \ud83d\ude42 Tekrardan yazmaya devam. Sizlerle 07.03.2015 tarihinde payla\u015fmay\u0131 planlad\u0131\u011f\u0131m bu yaz\u0131m\u0131 ne yaz\u0131k ki ancak payla\u015fabiliyorum. Bu gecikme i\u00e7in aff\u0131n\u0131za s\u0131\u011f\u0131n\u0131yorum ve y\u0131lmadan yazmaya devam diyorum.<\/p>\n<p>Bu yaz\u0131\u00a0dizisinde, sevgili dostum <a href=\"http:\/\/www.birolcapa.com\/\" target=\"_blank\">Birol \u00c7apa<\/a> ile \u00fcniversite y\u0131llar\u0131nda birlikte olu\u015fturdu\u011fumuz kaynaklardan da faydalanaca\u011f\u0131m. Bu vesileyle sevgili dostum <a href=\"http:\/\/www.birolcapa.com\/\" target=\"_blank\">Birol<\/a>&#8216;a da te\u015fekk\u00fcrlerimi iletiyorum.<\/p>\n<p>Efendim bu yaz\u0131 dizisinin temel amac\u0131, devasa bir okyanus olan g\u00f6m\u00fcl\u00fc sistemlere, okyanusun ortas\u0131ndan dalmak yerine g\u00fczel bir sahilden dalmak. Yani ne demek istiyorum? Derya deniz diye \u00f6zetleyebilece\u011fimiz bu konuda, uygulama yapabilece\u011fimiz g\u00fczel bir ba\u015flang\u0131\u00e7 noktas\u0131ndan bal\u0131klama konuya dalmak. Yine \u00e7ok say\u0131da ibretlik noktaya de\u011finece\u011fimizi d\u00fc\u015f\u00fcn\u00fcyorum. Yaz\u0131lar da yine her zamanki usl\u00fcpla olaca\u011f\u0131ndan, sizleri de s\u0131kmadan e\u011flenceli bir yaz\u0131 dizisi ge\u00e7irece\u011fimize inan\u0131yorum.<\/p>\n<p>Neden PIC16 sorusunun cevab\u0131n\u0131 esasen bir \u00f6nceki yaz\u0131m\u0131zda bir miktar vermi\u015ftik. \u015eimdi ba\u015fka sorular\u0131n pe\u015finde ko\u015fal\u0131m!<\/p>\n<p><strong>Neden Mikrokontrol\u00f6rler?<\/strong><\/p>\n<p>Efendim g\u00f6m\u00fcl\u00fc sistemler derya deniz demi\u015ftik. G\u00f6m\u00fcl\u00fc sistemlerin en yayg\u0131n kullan\u0131m alanl\u0131 alt dal\u0131, mikrokontrol\u00f6r tabanl\u0131 sistemlerdir. Bu dal \u00f6yle bir dald\u0131r ki, \u00e7o\u011fu a\u011fa\u00e7tan \u00e7ok daha okkal\u0131d\u0131r. Burada edinece\u011fimiz bilgileri, joker gibi di\u011fer t\u00fcm g\u00f6m\u00fcl\u00fc sistem uygulamalar\u0131nda uygulayabilece\u011fimizden dolay\u0131, mikrokontrol\u00f6rleri iyi bilmek, iyi kullanmak \u00e7ok \u00e7ok \u00f6nemlidir. Buna istinaden bu yaz\u0131 dizisi vesilesiyle h\u0131zl\u0131ca mevzuya dalman\u0131n faydal\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum.<\/p>\n<p>PIC de, g\u00f6m\u00fcl\u00fc sistemlerin temel mant\u0131\u011f\u0131n\u0131 \u00e7ok \u00e7ok g\u00fczel \u015fekilde anlayabilece\u011fimiz bir ba\u015flang\u0131\u00e7 noktas\u0131. Be\u011fenirsiniz be\u011fenmezsiniz, Arduino var olana kadar en \u00f6nemli hobi elektroni\u011fi arg\u00fcmanlar\u0131ndan birisi PIC idi. Halen daha kullan\u0131m\u0131 \u00e7ok yayg\u0131n. Ve dostlar bence buradan da \u00f6\u011frenebilece\u011fimiz \u00e7ok \u00f6nemli noktalar olabilir. O sebeple hakir g\u00f6rmeyelim \ud83d\ude42<\/p>\n<p><strong>Neden C?<\/strong><\/p>\n<p>C dili ile ilgili tonlarca \u015feyi, <a href=\"http:\/\/ozenozkaya.com\/blog\/?p=172\" target=\"_blank\">G\u00f6m\u00fcl\u00fc C <\/a>yaz\u0131 dizisinde konu\u015fmu\u015ftuk. Mikrokontrol\u00f6r programlama i\u015flerinde, C\/C++&#8217;\u0131n yan\u0131 s\u0131ra, Assembler, basic ve hatta yer yer java dilleri bile kullan\u0131l\u0131r. C dili bunlar\u0131n hepsinin a\u011fz\u0131n\u0131 burnunu k\u0131rar diyece\u011fimi l\u00fctfen d\u00fc\u015f\u00fcnmeyiniz bile. C dilini bir kenara at\u0131p di\u011fer dillere \u00e7amur atmaya da niyetli de\u011filim.<\/p>\n<p>Yaz\u0131l\u0131mda programlama dilleri ama\u00e7 de\u011fil ara\u00e7t\u0131r. Programc\u0131 bir nevi ninja ise, programlama dili de ninjan\u0131n silah\u0131d\u0131r. Bazen kocaman bir k\u0131l\u0131\u00e7 kar\u015f\u0131s\u0131nda, minik bir han\u00e7er ya da m\u0131n\u00e7\u0131ka galip gelebilir. Zira k\u0131l\u0131\u00e7 ile bir hareket yap\u0131ncaya kadar, bu ufakl\u0131klar\u0131 8. hamlesini tamamlayabilir \ud83d\ude42 Keza sava\u015f uzaktan yap\u0131l\u0131yorsa, belki ok ve yay kullanmak daha ye\u011fdir. Neyse, Age of Empires ya da Hitman oynam\u0131yoruz. A\u011fz\u0131mdaki baklay\u0131 \u00e7\u0131karay\u0131m; bu dillerin her birinin muhakkak ki birtak\u0131m avantajlar\u0131 ve dezavantajlar\u0131 bulunmaktad\u0131r. Bu diller i\u00e7erisinden C dilini se\u00e7memizin nedeni, bu dilin en yayg\u0131n kullan\u0131lan programlama dili olmas\u0131, g\u00f6m\u00fcl\u00fc sistemlerin her alan\u0131nda g\u00fcc\u00fcnden pek de bir \u015fey kaybetmeden kullan\u0131labilmesi gibi \u00e7ok g\u00fczel sebepler yatar. Ancak g\u00f6receksiniz ki yeri gelecek birden fazla dili beraber de kullanaca\u011f\u0131z. Benim <a href=\"http:\/\/en.wikipedia.org\/wiki\/Assembly_language\" target=\"_blank\">Assembly <\/a>karde\u015fimi hakir g\u00f6rmek, \u015f\u00fcphesiz ki davaya ihanet olacakt\u0131r \ud83d\ude1b<\/p>\n<p><strong>Temel Kaynaklar<\/strong><\/p>\n<p>Bir mikrokontrol\u00f6r programlama mevzusu varsa en birinci kaynak, \u015f\u00fcphesiz ki o mikrokontrol\u00f6r\u00fcn datasheet&#8217;i (veri ka\u011f\u0131d\u0131) olacakt\u0131r. G\u00f6m\u00fcl\u00fc sistemlerde bir \u015feyler yapmay\u0131 \u00f6\u011frenmenin b\u00fcy\u00fck bir k\u0131sm\u0131 veri ka\u011f\u0131d\u0131 okuyup anlayabilmekten ge\u00e7er. Bizim PIC16&#8217;n\u0131n da \u00e7e\u015fitlerinin g\u00fczel g\u00fczel veri ka\u011f\u0131tlar\u0131 mevcut. Asl\u0131nda daha geli\u015fmi\u015f mikrokontrol\u00f6rlerin datasheet&#8217;inde genellikle donan\u0131msal \u00f6zelliklere yer veriliyor. Bu tip donan\u0131mlar\u0131 kullanabilmek i\u00e7in &#8220;user guide&#8221; olarak da bilinen kullan\u0131m k\u0131lavuzlar\u0131n\u0131 okumak gerekiyor. Neyseki PIC16F serisi, g\u00f6rece basit bir seri oldu\u011fundan veri ka\u011f\u0131d\u0131 ile pa\u00e7ay\u0131 s\u0131y\u0131r\u0131yor olaca\u011f\u0131z. Hemen \u00e7ok kullanaca\u011f\u0131m\u0131z baz\u0131 PIC&#8217;lerin veri ka\u011f\u0131tlar\u0131n\u0131 payla\u015fal\u0131m.<\/p>\n<ul>\n<li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/35007b.pdf\" target=\"_blank\">PIC16F84A<\/a><\/li>\n<li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/40044G.pdf\" target=\"_blank\">PIC16F628A<\/a><\/li>\n<li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/39582b.pdf\" target=\"_blank\">PIC16F877A<\/a><\/li>\n<\/ul>\n<p>Efendim, g\u00f6m\u00fcl\u00fc sistemci olacaksak ne yap\u0131p edip bu dok\u00fcmanlar\u0131 okuyabilir hale gelmemiz gerekiyor. \u0130ngilizce bilmeyen arkada\u015flar\u0131m da l\u00fctfen bu sorunun \u00fcstesinden gelmek i\u00e7in <a href=\"https:\/\/translate.google.com\/\" target=\"_blank\">Google Translate<\/a> gibi ara\u00e7lar\u0131 kullans\u0131nlar. Zira bir yerden sonra hep ayn\u0131 terimler ge\u00e7ti\u011fi i\u00e7in d\u00f6k\u00fcmanlar\u0131 anlamak \u00e7ok \u00e7ok kolay oluyor.<\/p>\n<p>Veri ka\u011f\u0131tlar\u0131na ek olarak \u00f6nemli bir kaynak da, geli\u015ftirme ortam\u0131n\u0131n ya da derleyicinin d\u00f6k\u00fcmanasyonu oluyor. Ben derleyici dedim ama asl\u0131nda demek istedi\u011fim <a href=\"http:\/\/en.wikipedia.org\/wiki\/Toolchain\" target=\"_blank\">toolchain<\/a>. Yani i\u00e7inde derleyici, ba\u011flay\u0131c\u0131 (linker day\u0131), assembler, t\u00fcrl\u00fc t\u00fcrl\u00fc k\u00fct\u00fcphaneler filan bulunan yaz\u0131l\u0131m paketi. Bunun d\u00f6k\u00fcmantasyonunu da incelemekte faideler mevcut. Bizimkine, s\u0131ras\u0131 gelince de\u011finece\u011fim.<\/p>\n<p><strong>Kullan\u0131lacak Programlar (Kurulumlar)<\/strong><\/p>\n<p>Yolculu\u011fu kafam\u0131zda \u015f\u00f6yle k\u0131saca bir \u00e7izelim ki, ihtiyac\u0131 listeleyebilelim. Bizim \u00f6ncelikle kodumuzu yazabilece\u011fimiz bir ortama ihtiyac\u0131m\u0131z var. Bunun ad\u0131 geli\u015ftirme ortam\u0131 (IDE). Ard\u0131ndan kodlar\u0131m\u0131z\u0131 anlayacak, derleyecek, link edecek bir yaz\u0131l\u0131m setine ihtiyac\u0131m\u0131z var. Sonra diyelim ki yaz\u0131l\u0131m\u0131m\u0131z\u0131 yazd\u0131k ve executable dosyam\u0131z\u0131 elde ettik. Bunu PIC&#8217;e yazacak bir programlay\u0131c\u0131ya, ve programlayabilece\u011fimiz bir donan\u0131ma ihtiyac\u0131m\u0131z var. Veya, programlay\u0131c\u0131 + programlanacak donan\u0131m yerine sim\u00fclat\u00f6r kullanabiliriz \ud83d\ude42 \u00d6zellikle h\u0131zl\u0131 uygulama ve \u00f6\u011frenme a\u00e7\u0131s\u0131ndan sim\u00fclat\u00f6r kullanmak \u00e7ok mant\u0131kl\u0131 olabiliyor. Ancak ger\u00e7ekleme yapmak da \u015fart. Biz t\u00fcm bu a\u015famalara de\u011finece\u011fiz ancak \u00f6nce kurulumlar\u0131m\u0131z\u0131 tamamlayal\u0131m.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/family\/mplabx\/home.html\" target=\"_blank\"> MPLAB X IDE<\/a>: PIC i\u00e7in \u00a0diye gayet ho\u015f bir IDE mevcut. Ard\u0131ndan bir toolchain&#8217;e ihtiyac\u0131m\u0131z var. Baz\u0131 IDE&#8217;lerin i\u00e7inde toolchain haz\u0131r olarak geliyor ancak MPLAB s\u00f6z konusu olunca bu kadar \u015fansl\u0131 de\u011filiz. Ger\u00e7i MPLAB X, t\u00fcm seriler i\u00e7in genelge\u00e7er bir IDE oldu\u011fundan, toolchain&#8217;in sonradan kurulmas\u0131 da mant\u0131kl\u0131 \ud83d\ude42 Ben MPLAB X versiyonu olarak 3.0 beta kurdum. Normal \u015fartlar alt\u0131nda, bir g\u00f6m\u00fcl\u00fc sistemci asla ama asla beta yaz\u0131l\u0131m kullanmaz. Sa\u011flamcl\u0131\u011f\u0131a \u00e7ok ayk\u0131r\u0131d\u0131r. Ancak bu, bilgi payla\u015f\u0131m\u0131 ama\u00e7l\u0131 bir yaz\u0131l\u0131m oldu\u011fundan, siz bu yaz\u0131y\u0131 okuyuncaya kadar 3.0 stabil versiyon da \u00e7\u0131kar diyerekten 3.0 beta kurdum. Siz de \u00fccretsiz olarak kurulumu yapabilirsiniz.<\/li>\n<li><a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/devtools\/mplabxc\/home.html\" target=\"_blank\">MPLAB XC8<\/a>. Neyse bir sonraki a\u015fama olarak 8 bit&#8217;lik PIC&#8217;ler i\u00e7in olan<a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/devtools\/mplabxc\/home.html\" target=\"_blank\"> XC8 <\/a>toolchain&#8217;i kuruyoruz. Efendim e\u011fer 16 bit&#8217;lik bir PIC i\u00e7in yaz\u0131l\u0131m geli\u015ftirecek olsayd\u0131k XC16,\u00a032\u00a0bit&#8217;lik bir PIC i\u00e7in yaz\u0131l\u0131m geli\u015ftirecek olsayd\u0131k XC32 kuracakt\u0131k ancak suyu buland\u0131rmayal\u0131m ve MPLAB X&#8217;in \u00fczerine <a href=\"http:\/\/www.microchip.com\/mplabxc8windows\" target=\"_blank\">XC8 <\/a>kural\u0131m. Son versiyon olan,\u00a0<a href=\"http:\/\/www.microchip.com\/mplabxc8windows\">MPLAB<sup>\u00ae<\/sup> XC8 Compiler v1.34<\/a>\u00a0kurulumunu tamamlad\u0131m. Siz de en son versiyon hangisi ise, onu kurabilirsiniz. Evaluation s\u00fcr\u00fcm\u00fc \u00fccretsiz! PRO versiyonu da 60 g\u00fcn i\u00e7in yine \u00fccretsiz \ud83d\ude42 XC8&#8217;in \u00e7i\u00e7ek gibi de bir <a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/50002053E.pdf\" target=\"_blank\">d\u00f6k\u00fcmantasyonu <\/a>var. Mutlaka feyizlenelim. Kurulumu yaparken, MPLAB X IDE&#8217;yi XC8&#8217;i kullanacak \u015fekilde g\u00fcncelleyin se\u00e7ene\u011fini i\u015faretlemeyi unutmayal\u0131m \ud83d\ude42 Esasen ben eskiden toolchain olarak <a href=\"http:\/\/www.htsoft.com\/\" target=\"_blank\">Hitech PIC C<\/a> kullan\u0131rd\u0131m. Ama Microchip <a href=\"http:\/\/www.microchip.com\/Developmenttools\/ProductDetails.aspx?PartNO=SW500010\" target=\"_blank\">\u015furada<\/a>, art\u0131k kullanmay\u0131n demi\u015f. Zaten hi\u00e7 bir \u015feyin fark etmeyece\u011fini, bunlara ihtiyac\u0131m\u0131z bile pek olmad\u0131\u011f\u0131n\u0131 anlataca\u011f\u0131m. Ama \u015fimdilik \u00f6nerilen ile devam edip XC8&#8217;i kural\u0131m.<\/li>\n<li><a href=\"http:\/\/www.labcenter.com\/index.cfm\" target=\"_blank\">Proteus ISE<\/a>: \u00a0Bu yaz\u0131l\u0131m da g\u00fczel bir sim\u00fclasyon ortam\u0131. Asl\u0131nda Proteus&#8217;a sim\u00fclasyon ortam\u0131 demek biraz vicdans\u0131zl\u0131k olur. Zira Proteus ile, devre tasar\u0131m\u0131, devre sim\u00fclasyonu, \u015fematik ve PCB tasar\u0131m\u0131 da yap\u0131labiliyor. Kendisi \u00e7ok \u00e7ok ba\u015far\u0131l\u0131 bir yaz\u0131l\u0131m. Ancak ne yaz\u0131k ki \u00fccretli. Yine de evaluation versiyonunu kullanabilirsiniz. Ya da internetten proteus kurulumu ile ilgili detayl\u0131 bilgileri bulabilirsiniz. Ben 8.10 SP1 versiyonunu kullan\u0131yorum, \u00e7ok da memnunum \ud83d\ude00 Proteus kurulumunu yapt\u0131ktan sonra, e\u011fer proteus kullanmay\u0131 bilmiyorsan\u0131z google \u00fczerinde <a href=\"https:\/\/www.google.com.tr\/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=proteus%20dersleri\" target=\"_blank\">proteus derslerine<\/a> bak\u0131p, proteus kullan\u0131m\u0131n\u0131 kabaca \u00f6\u011frenmeniz gerekiyor.<\/li>\n<\/ul>\n<p>Bunlara ek olarak, donan\u0131m ba\u011f\u0131ms\u0131z algoritmalar\u0131 test etmek amac\u0131yla bir C\/C++\u00a0IDE&#8217;si\u00a0\u00a0kurmakta fayda var. <a href=\"http:\/\/sourceforge.net\/projects\/orwelldevcpp\/\" target=\"_blank\">Orwell Dev C++ <\/a>gayet ufac\u0131k tefecik ama i\u015fe yarar bir ara\u00e7.<\/p>\n<p>Kurulumlar\u0131 tamamlad\u0131ktan sonra, mevzuya dalal\u0131m \ud83d\ude42 \u00d6ncelikle, proteus \u00fczerinde programlayabilece\u011fimiz bir PIC ortam\u0131 olu\u015fturmam\u0131z gerekiyor. \u0130lk \u00f6rne\u011fimizi PIC16F84A ile yapal\u0131m. Proteus&#8217;ta &#8220;P&#8221; tu\u015funa bast\u0131\u011f\u0131m\u0131zda, place part yani devre eleman\u0131 ekleme ekran\u0131 a\u00e7\u0131l\u0131yor. Buraya PIC16F84A yazd\u0131\u011f\u0131n\u0131zda, ilgili sembol \u00e7\u0131kacak ve \u00e7ift t\u0131klad\u0131\u011f\u0131n\u0131zda soldaki listeye eklenecektir. Ard\u0131ndan PIC mikrokontrol\u00f6r\u00fc ve di\u011fer gerekli devre elemanlar\u0131n\u0131 eklemeniz m\u00fcmk\u00fcn olacak. Proteus derslerini inceledi\u011finiz i\u00e7in buray\u0131 k\u0131sa kesiyorum ve kurman\u0131z gereken basit devreyi a\u015fa\u011f\u0131da sizlerle payla\u015f\u0131yorum.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_1.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-379\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_1.png?resize=447%2C302\" alt=\"PIC16F84A_1\" width=\"447\" height=\"302\" \/><\/a><\/p>\n<p>\u015eimdi ak\u0131llara hakl\u0131 baz\u0131 sorular gelebilir. En birincisi, bu devrenin beslemeleri nerede? PIC16F84A \u00fczerine \u00e7ift\u00a0t\u0131klad\u0131\u011f\u0131m\u0131zda bir pencere a\u00e7\u0131l\u0131r. O penecede sol k\u0131s\u0131mda &#8220;hidden pins&#8221; yani gizli pinler yazar. Burada VDD ve VCC pinlerinin gizli oldu\u011funu ve otomatik olarak PIC&#8217;in beslendi\u011fini g\u00f6r\u00fcr\u00fcz. \u015eimdilik bu konu \u00fczerinde \u00e7ok durmayaca\u011f\u0131m ancak ileride bunu da a\u00e7\u0131klayaca\u011f\u0131m. \u015eimdilik merak edenler <a href=\"http:\/\/electronics.stackexchange.com\/questions\/110444\/connecting-switches-to-hidden-supply-pins-in-proteus-isis\">buraya <\/a>bakabilirler. Proteus burada bizim i\u015fimizi kolayla\u015ft\u0131rm\u0131\u015f ancak ger\u00e7ek hayatta beslemeyi ba\u011flamazsan\u0131z hi\u00e7 bir \u015fey \u00e7al\u0131\u015fmayacakt\u0131r. Buna ithafen VCC ve GND bacaklar\u0131n\u0131n aras\u0131nda\u00a02.0V &#8211; 5.5V aras\u0131 bir gerilim olmas\u0131 gerekiyor. Bu bilgiyi nereden \u00f6\u011frendim? Tabi ki <a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/35007b.pdf\">datasheet&#8217;ten <\/a>\ud83d\ude42<\/p>\n<p>Neyse \u015fimdi devam edelim, i\u015flemcinin beslemeleri otomatik yap\u0131ld\u0131. PIC16F84A&#8217;n\u0131n dahili osilat\u00f6r\u00fc olmad\u0131\u011f\u0131ndan d\u0131\u015far\u0131dan OSC1 ve OSC2 pinlerine bir XTAL (crystal) <a href=\"https:\/\/www.google.com.tr\/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=osilat%C3%B6r%20nedir\" target=\"_blank\">osilat\u00f6r <\/a>ba\u011flam\u0131\u015f\u0131z. Buradaki kapasitelerin de\u011ferine kadar datasheet&#8217;te yaz\u0131yor. 22pF da ba\u011flasak olurdu \ud83d\ude42 Esasen bu pinlerin aras\u0131nda bir ring osilat\u00f6r var, XTAL ve kapasit\u00f6rler bu devreyi tamaml\u0131yor ve osilasyon ba\u015fl\u0131yor. Burada \u015fimdilik \u00e7ok detaya girmeyece\u011fim. Osilat\u00f6r bir anlamda kalp at\u0131\u015f\u0131 gibi sinyaller \u00fcretir ve mikrodenetleyicinin, bu i\u015farete (saat i\u015fareti, clock cycle) senkronize \u015fekilde i\u015flem yapmas\u0131n\u0131 sa\u011flar. Bu k\u0131sma parantez de\u011fil paragraflar a\u00e7mak gerekiyor. Onu da ileride a\u00e7aca\u011f\u0131m. Ancak \u015fimdi\u00a0neyse diyelim ve devam edelim.<\/p>\n<p>MCLR diye bir pin var \u00fczerinde de bir \u00e7izgi var. Bu pin Reset pini ve \u00fczerindeki \u00e7izgi bize, bu pinin &#8220;active low&#8221; yani &#8220;d\u00fc\u015f\u00fck seviyede aktif&#8221; olacak \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlat\u0131yor. Bu durumun T\u00fcrk\u00e7e&#8217;si \u015fu ki, o pini lojik 0 seviyesine \u00e7ekerseniz mikrokontrol\u00f6r reset durumunda kalacakt\u0131r. Biz de ne yapm\u0131\u015f\u0131z, butona bas\u0131lmad\u0131\u011f\u0131nda o pin lojik 1&#8217;de kalacak \u015fekilde yapm\u0131\u015f\u0131z. Buton&#8217;a bas\u0131ld\u0131\u011f\u0131nda ise mikrokontrol\u00f6r reset&#8217;e \u00e7ekilecek.<\/p>\n<p>Bizim PIC16F84A yerine PIC16F877A kullanmak istesek ba\u011flant\u0131lar nas\u0131l olacakt\u0131? A\u015fa\u011f\u0131daki gibi, yani ayn\u0131 olacakt\u0131.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_1.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-385\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_1.png?resize=635%2C455\" alt=\"PIC16F877A_1\" width=\"635\" height=\"455\" \/><\/a><\/p>\n<p>Neyse biz hemen mevzumuza yani PIC16F84A&#8217;ya geri d\u00f6nelim. Proteus&#8217;ta mikrokontrol\u00f6re hi\u00e7 bir \u015fey ba\u011flamasak da mikrokontrol\u00f6r \u00e7al\u0131\u015f\u0131yor \ud83d\ude00 Bu sebeple, h\u0131zl\u0131ca bir led ba\u011flay\u0131p, a\u015fa\u011f\u0131daki devreyi kural\u0131m.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_2.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-387\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_2.png?resize=534%2C319\" alt=\"PIC16F84A_2\" width=\"534\" height=\"319\" \/><\/a><\/p>\n<p>Hemen ilk kodumuzu da yazal\u0131m \ud83d\ude42 Bunun i\u00e7in MPLAB X&#8217;de bir PIC16F84A projesi olu\u015fturmak ve a\u015fa\u011f\u0131daki kodu eklemek gerekiyor.<\/p>\n<pre class=\"lang:c decode:true\">#include &lt;xc.h&gt;\n\nvoid main(void)\n{\n TRISB=0;\n PORTB=1;\n while(1);\n}<\/pre>\n<p>Bu kodu projemizde derledi\u011fimizde, derleyici .hex uzant\u0131l\u0131 bir dosya olu\u015fturacak. \u015eimdi proteus isis&#8217;te kurdu\u011fumuz devreye\u00a0d\u00f6nelim, ve PIC \u00fczerine \u00e7\u0131ft t\u0131klay\u0131p &#8220;Program File&#8221; yazan k\u0131sma \u00e7ift t\u0131klayarak, \u00fcretilen .hex uzant\u0131l\u0131 dosyam\u0131z\u0131 se\u00e7elim. &#8220;OK&#8221; tu\u015funa\u00a0basarak \u00e7\u0131kal\u0131m ve &#8220;play&#8221; butonuna basarak sim\u00fclasyonu ba\u015flatal\u0131m. Led, a\u015fa\u011f\u0131daki gibi yanacak.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_3.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-388\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_3.png?resize=400%2C192\" alt=\"PIC16F84A_3\" width=\"400\" height=\"192\" \/><\/a><\/p>\n<p>De\u011ferli dostlar\u0131m, burada PIC d\u00fcnyas\u0131na merhaba demi\u015f olduk. Mutlaka ki buraya kadar olan k\u0131s\u0131mda konu\u015fabilece\u011fimiz \u00e7ok \u015fey var. Ancak t\u00fcm bunlar\u0131 di\u011fer yaz\u0131ya b\u0131rak\u0131yorum \ud83d\ude42 Zira bu yaz\u0131y\u0131 bu g\u00fcn bitmeden yay\u0131nlamak niyetindeyim. Bir sonraki yaz\u0131da bu yapt\u0131klar\u0131m\u0131z\u0131n suyunu \u00e7\u0131karaca\u011f\u0131z ve ibretler \u00fczerinden gidece\u011fiz \ud83d\ude42<\/p>\n<p>Buraya kadar okudu\u011funuz i\u00e7in te\u015fekk\u00fcrler. Yaz\u0131y\u0131 be\u011fendiyseniz, faydalanabilecek tan\u0131d\u0131klar\u0131n\u0131z ile payla\u015fabilirseniz sevinirim.<\/p>\n<p>\u015eimdi devam!<\/p>\n<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=369\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-o-left\" style=\"font-size:13px;color:#FFFFFF\"><\/i> \u00d6nceki Sayfa<\/span><\/a> \u00a0<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=403\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-right\" style=\"font-size:13px;color:#FFFFFF\"><\/i> Sonraki Sayfa<\/span><\/a>\n","protected":false},"excerpt":{"rendered":"<p>Selamlar \ud83d\ude42 Bu g\u00fcn nihayetinde Merhaba PIC16 yaz\u0131m\u0131 ekleme niyetindeyim. Esasen yazd\u0131\u011f\u0131m sayfalarca yaz\u0131y\u0131 browser&#8217;\u0131n azizli\u011finden dolay\u0131 kaybettim. Ancak y\u0131lmak yok \ud83d\ude42 Tekrardan yazmaya devam. Sizlerle 07.03.2015 tarihinde payla\u015fmay\u0131 planlad\u0131\u011f\u0131m bu yaz\u0131m\u0131 ne yaz\u0131k ki ancak payla\u015fabiliyorum. Bu gecikme i\u00e7in aff\u0131n\u0131za s\u0131\u011f\u0131n\u0131yorum ve y\u0131lmadan yazmaya devam diyorum. Bu yaz\u0131\u00a0dizisinde, sevgili dostum Birol \u00c7apa ile \u00fcniversite <a class=\"read-more\" href=\"http:\/\/ozenozkaya.com\/blog\/?p=378\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_tr_post_content":"Selamlar :) Bu g\u00fcn nihayetinde Merhaba PIC16 yaz\u0131m\u0131 ekleme niyetindeyim. Esasen yazd\u0131\u011f\u0131m sayfalarca yaz\u0131y\u0131 browser'\u0131n azizli\u011finden dolay\u0131 kaybettim. Ancak y\u0131lmak yok :) Tekrardan yazmaya devam. Sizlerle 07.03.2015 tarihinde payla\u015fmay\u0131 planlad\u0131\u011f\u0131m bu yaz\u0131m\u0131 ne yaz\u0131k ki ancak payla\u015fabiliyorum. Bu gecikme i\u00e7in aff\u0131n\u0131za s\u0131\u011f\u0131n\u0131yorum ve y\u0131lmadan yazmaya devam diyorum.\n\nBu yaz\u0131\u00a0dizisinde, sevgili dostum <a href=\"http:\/\/www.birolcapa.com\/\" target=\"_blank\">Birol \u00c7apa<\/a> ile \u00fcniversite y\u0131llar\u0131nda birlikte olu\u015fturdu\u011fumuz kaynaklardan da faydalanaca\u011f\u0131m. Bu vesileyle sevgili dostum <a href=\"http:\/\/www.birolcapa.com\/\" target=\"_blank\">Birol<\/a>'a da te\u015fekk\u00fcrlerimi iletiyorum.\n\nEfendim bu yaz\u0131 dizisinin temel amac\u0131, devasa bir okyanus olan g\u00f6m\u00fcl\u00fc sistemlere, okyanusun ortas\u0131ndan dalmak yerine g\u00fczel bir sahilden dalmak. Yani ne demek istiyorum? Derya deniz diye \u00f6zetleyebilece\u011fimiz bu konuda, uygulama yapabilece\u011fimiz g\u00fczel bir ba\u015flang\u0131\u00e7 noktas\u0131ndan bal\u0131klama konuya dalmak. Yine \u00e7ok say\u0131da ibretlik noktaya de\u011finece\u011fimizi d\u00fc\u015f\u00fcn\u00fcyorum. Yaz\u0131lar da yine her zamanki usl\u00fcpla olaca\u011f\u0131ndan, sizleri de s\u0131kmadan e\u011flenceli bir yaz\u0131 dizisi ge\u00e7irece\u011fimize inan\u0131yorum.\n\nNeden PIC16 sorusunun cevab\u0131n\u0131 esasen bir \u00f6nceki yaz\u0131m\u0131zda bir miktar vermi\u015ftik. \u015eimdi ba\u015fka sorular\u0131n pe\u015finde ko\u015fal\u0131m!\n\n<strong>Neden Mikrokontrol\u00f6rler?<\/strong>\n\nEfendim g\u00f6m\u00fcl\u00fc sistemler derya deniz demi\u015ftik. G\u00f6m\u00fcl\u00fc sistemlerin en yayg\u0131n kullan\u0131m alanl\u0131 alt dal\u0131, mikrokontrol\u00f6r tabanl\u0131 sistemlerdir. Bu dal \u00f6yle bir dald\u0131r ki, \u00e7o\u011fu a\u011fa\u00e7tan \u00e7ok daha okkal\u0131d\u0131r. Burada edinece\u011fimiz bilgileri, joker gibi di\u011fer t\u00fcm g\u00f6m\u00fcl\u00fc sistem uygulamalar\u0131nda uygulayabilece\u011fimizden dolay\u0131, mikrokontrol\u00f6rleri iyi bilmek, iyi kullanmak \u00e7ok \u00e7ok \u00f6nemlidir. Buna istinaden bu yaz\u0131 dizisi vesilesiyle h\u0131zl\u0131ca mevzuya dalman\u0131n faydal\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum.\n\nPIC de, g\u00f6m\u00fcl\u00fc sistemlerin temel mant\u0131\u011f\u0131n\u0131 \u00e7ok \u00e7ok g\u00fczel \u015fekilde anlayabilece\u011fimiz bir ba\u015flang\u0131\u00e7 noktas\u0131. Be\u011fenirsiniz be\u011fenmezsiniz, Arduino var olana kadar en \u00f6nemli hobi elektroni\u011fi arg\u00fcmanlar\u0131ndan birisi PIC idi. Halen daha kullan\u0131m\u0131 \u00e7ok yayg\u0131n. Ve dostlar bence buradan da \u00f6\u011frenebilece\u011fimiz \u00e7ok \u00f6nemli noktalar olabilir. O sebeple hakir g\u00f6rmeyelim :)\n\n<strong>Neden C?<\/strong>\n\nC dili ile ilgili tonlarca \u015feyi, <a href=\"http:\/\/ozenozkaya.com\/blog\/?p=172\" target=\"_blank\">G\u00f6m\u00fcl\u00fc C <\/a>yaz\u0131 dizisinde konu\u015fmu\u015ftuk. Mikrokontrol\u00f6r programlama i\u015flerinde, C\/C++'\u0131n yan\u0131 s\u0131ra, Assembler, basic ve hatta yer yer java dilleri bile kullan\u0131l\u0131r. C dili bunlar\u0131n hepsinin a\u011fz\u0131n\u0131 burnunu k\u0131rar diyece\u011fimi l\u00fctfen d\u00fc\u015f\u00fcnmeyiniz bile. C dilini bir kenara at\u0131p di\u011fer dillere \u00e7amur atmaya da niyetli de\u011filim.\n\nYaz\u0131l\u0131mda programlama dilleri ama\u00e7 de\u011fil ara\u00e7t\u0131r. Programc\u0131 bir nevi ninja ise, programlama dili de ninjan\u0131n silah\u0131d\u0131r. Bazen kocaman bir k\u0131l\u0131\u00e7 kar\u015f\u0131s\u0131nda, minik bir han\u00e7er ya da m\u0131n\u00e7\u0131ka galip gelebilir. Zira k\u0131l\u0131\u00e7 ile bir hareket yap\u0131ncaya kadar, bu ufakl\u0131klar\u0131 8. hamlesini tamamlayabilir :) Keza sava\u015f uzaktan yap\u0131l\u0131yorsa, belki ok ve yay kullanmak daha ye\u011fdir. Neyse, Age of Empires ya da Hitman oynam\u0131yoruz. A\u011fz\u0131mdaki baklay\u0131 \u00e7\u0131karay\u0131m; bu dillerin her birinin muhakkak ki birtak\u0131m avantajlar\u0131 ve dezavantajlar\u0131 bulunmaktad\u0131r. Bu diller i\u00e7erisinden C dilini se\u00e7memizin nedeni, bu dilin en yayg\u0131n kullan\u0131lan programlama dili olmas\u0131, g\u00f6m\u00fcl\u00fc sistemlerin her alan\u0131nda g\u00fcc\u00fcnden pek de bir \u015fey kaybetmeden kullan\u0131labilmesi gibi \u00e7ok g\u00fczel sebepler yatar. Ancak g\u00f6receksiniz ki yeri gelecek birden fazla dili beraber de kullanaca\u011f\u0131z. Benim <a href=\"http:\/\/en.wikipedia.org\/wiki\/Assembly_language\" target=\"_blank\">Assembly <\/a>karde\u015fimi hakir g\u00f6rmek, \u015f\u00fcphesiz ki davaya ihanet olacakt\u0131r :P\n\n<strong>Temel Kaynaklar<\/strong>\n\nBir mikrokontrol\u00f6r programlama mevzusu varsa en birinci kaynak, \u015f\u00fcphesiz ki o mikrokontrol\u00f6r\u00fcn datasheet'i (veri ka\u011f\u0131d\u0131) olacakt\u0131r. G\u00f6m\u00fcl\u00fc sistemlerde bir \u015feyler yapmay\u0131 \u00f6\u011frenmenin b\u00fcy\u00fck bir k\u0131sm\u0131 veri ka\u011f\u0131d\u0131 okuyup anlayabilmekten ge\u00e7er. Bizim PIC16'n\u0131n da \u00e7e\u015fitlerinin g\u00fczel g\u00fczel veri ka\u011f\u0131tlar\u0131 mevcut. Asl\u0131nda daha geli\u015fmi\u015f mikrokontrol\u00f6rlerin datasheet'inde genellikle donan\u0131msal \u00f6zelliklere yer veriliyor. Bu tip donan\u0131mlar\u0131 kullanabilmek i\u00e7in \"user guide\" olarak da bilinen kullan\u0131m k\u0131lavuzlar\u0131n\u0131 okumak gerekiyor. Neyseki PIC16F serisi, g\u00f6rece basit bir seri oldu\u011fundan veri ka\u011f\u0131d\u0131 ile pa\u00e7ay\u0131 s\u0131y\u0131r\u0131yor olaca\u011f\u0131z. Hemen \u00e7ok kullanaca\u011f\u0131m\u0131z baz\u0131 PIC'lerin veri ka\u011f\u0131tlar\u0131n\u0131 payla\u015fal\u0131m.\n\n<ul>\n    <li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/35007b.pdf\" target=\"_blank\">PIC16F84A<\/a><\/li>\n    <li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/40044G.pdf\" target=\"_blank\">PIC16F628A<\/a><\/li>\n    <li><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/39582b.pdf\" target=\"_blank\">PIC16F877A<\/a><\/li>\n<\/ul>\n\nEfendim, g\u00f6m\u00fcl\u00fc sistemci olacaksak ne yap\u0131p edip bu dok\u00fcmanlar\u0131 okuyabilir hale gelmemiz gerekiyor. \u0130ngilizce bilmeyen arkada\u015flar\u0131m da l\u00fctfen bu sorunun \u00fcstesinden gelmek i\u00e7in <a href=\"https:\/\/translate.google.com\/\" target=\"_blank\">Google Translate<\/a> gibi ara\u00e7lar\u0131 kullans\u0131nlar. Zira bir yerden sonra hep ayn\u0131 terimler ge\u00e7ti\u011fi i\u00e7in d\u00f6k\u00fcmanlar\u0131 anlamak \u00e7ok \u00e7ok kolay oluyor.\n\nVeri ka\u011f\u0131tlar\u0131na ek olarak \u00f6nemli bir kaynak da, geli\u015ftirme ortam\u0131n\u0131n ya da derleyicinin d\u00f6k\u00fcmanasyonu oluyor. Ben derleyici dedim ama asl\u0131nda demek istedi\u011fim <a href=\"http:\/\/en.wikipedia.org\/wiki\/Toolchain\" target=\"_blank\">toolchain<\/a>. Yani i\u00e7inde derleyici, ba\u011flay\u0131c\u0131 (linker day\u0131), assembler, t\u00fcrl\u00fc t\u00fcrl\u00fc k\u00fct\u00fcphaneler filan bulunan yaz\u0131l\u0131m paketi. Bunun d\u00f6k\u00fcmantasyonunu da incelemekte faideler mevcut. Bizimkine, s\u0131ras\u0131 gelince de\u011finece\u011fim.\n\n<strong>Kullan\u0131lacak Programlar (Kurulumlar)<\/strong>\n\nYolculu\u011fu kafam\u0131zda \u015f\u00f6yle k\u0131saca bir \u00e7izelim ki, ihtiyac\u0131 listeleyebilelim. Bizim \u00f6ncelikle kodumuzu yazabilece\u011fimiz bir ortama ihtiyac\u0131m\u0131z var. Bunun ad\u0131 geli\u015ftirme ortam\u0131 (IDE). Ard\u0131ndan kodlar\u0131m\u0131z\u0131 anlayacak, derleyecek, link edecek bir yaz\u0131l\u0131m setine ihtiyac\u0131m\u0131z var. Sonra diyelim ki yaz\u0131l\u0131m\u0131m\u0131z\u0131 yazd\u0131k ve executable dosyam\u0131z\u0131 elde ettik. Bunu PIC'e yazacak bir programlay\u0131c\u0131ya, ve programlayabilece\u011fimiz bir donan\u0131ma ihtiyac\u0131m\u0131z var. Veya, programlay\u0131c\u0131 + programlanacak donan\u0131m yerine sim\u00fclat\u00f6r kullanabiliriz :) \u00d6zellikle h\u0131zl\u0131 uygulama ve \u00f6\u011frenme a\u00e7\u0131s\u0131ndan sim\u00fclat\u00f6r kullanmak \u00e7ok mant\u0131kl\u0131 olabiliyor. Ancak ger\u00e7ekleme yapmak da \u015fart. Biz t\u00fcm bu a\u015famalara de\u011finece\u011fiz ancak \u00f6nce kurulumlar\u0131m\u0131z\u0131 tamamlayal\u0131m.\n\n<ul>\n    <li><a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/family\/mplabx\/home.html\" target=\"_blank\"> MPLAB X IDE<\/a>: PIC i\u00e7in \u00a0diye gayet ho\u015f bir IDE mevcut. Ard\u0131ndan bir toolchain'e ihtiyac\u0131m\u0131z var. Baz\u0131 IDE'lerin i\u00e7inde toolchain haz\u0131r olarak geliyor ancak MPLAB s\u00f6z konusu olunca bu kadar \u015fansl\u0131 de\u011filiz. Ger\u00e7i MPLAB X, t\u00fcm seriler i\u00e7in genelge\u00e7er bir IDE oldu\u011fundan, toolchain'in sonradan kurulmas\u0131 da mant\u0131kl\u0131 :) Ben MPLAB X versiyonu olarak 3.0 beta kurdum. Normal \u015fartlar alt\u0131nda, bir g\u00f6m\u00fcl\u00fc sistemci asla ama asla beta yaz\u0131l\u0131m kullanmaz. Sa\u011flamcl\u0131\u011f\u0131a \u00e7ok ayk\u0131r\u0131d\u0131r. Ancak bu, bilgi payla\u015f\u0131m\u0131 ama\u00e7l\u0131 bir yaz\u0131l\u0131m oldu\u011fundan, siz bu yaz\u0131y\u0131 okuyuncaya kadar 3.0 stabil versiyon da \u00e7\u0131kar diyerekten 3.0 beta kurdum. Siz de \u00fccretsiz olarak kurulumu yapabilirsiniz.<\/li>\n    <li><a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/devtools\/mplabxc\/home.html\" target=\"_blank\">MPLAB XC8<\/a>. Neyse bir sonraki a\u015fama olarak 8 bit'lik PIC'ler i\u00e7in olan<a href=\"http:\/\/www.microchip.com\/pagehandler\/en-us\/devtools\/mplabxc\/home.html\" target=\"_blank\"> XC8 <\/a>toolchain'i kuruyoruz. Efendim e\u011fer 16 bit'lik bir PIC i\u00e7in yaz\u0131l\u0131m geli\u015ftirecek olsayd\u0131k XC16,\u00a032\u00a0bit'lik bir PIC i\u00e7in yaz\u0131l\u0131m geli\u015ftirecek olsayd\u0131k XC32 kuracakt\u0131k ancak suyu buland\u0131rmayal\u0131m ve MPLAB X'in \u00fczerine <a href=\"http:\/\/www.microchip.com\/mplabxc8windows\" target=\"_blank\">XC8 <\/a>kural\u0131m. Son versiyon olan,\u00a0<a href=\"http:\/\/www.microchip.com\/mplabxc8windows\">MPLAB<sup>\u00ae<\/sup> XC8 Compiler v1.34<\/a>\u00a0kurulumunu tamamlad\u0131m. Siz de en son versiyon hangisi ise, onu kurabilirsiniz. Evaluation s\u00fcr\u00fcm\u00fc \u00fccretsiz! PRO versiyonu da 60 g\u00fcn i\u00e7in yine \u00fccretsiz :) XC8'in \u00e7i\u00e7ek gibi de bir <a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/50002053E.pdf\" target=\"_blank\">d\u00f6k\u00fcmantasyonu <\/a>var. Mutlaka feyizlenelim. Kurulumu yaparken, MPLAB X IDE'yi XC8'i kullanacak \u015fekilde g\u00fcncelleyin se\u00e7ene\u011fini i\u015faretlemeyi unutmayal\u0131m :) Esasen ben eskiden toolchain olarak <a href=\"http:\/\/www.htsoft.com\/\" target=\"_blank\">Hitech PIC C<\/a> kullan\u0131rd\u0131m. Ama Microchip <a href=\"http:\/\/www.microchip.com\/Developmenttools\/ProductDetails.aspx?PartNO=SW500010\" target=\"_blank\">\u015furada<\/a>, art\u0131k kullanmay\u0131n demi\u015f. Zaten hi\u00e7 bir \u015feyin fark etmeyece\u011fini, bunlara ihtiyac\u0131m\u0131z bile pek olmad\u0131\u011f\u0131n\u0131 anlataca\u011f\u0131m. Ama \u015fimdilik \u00f6nerilen ile devam edip XC8'i kural\u0131m.<\/li>\n    <li><a href=\"http:\/\/www.labcenter.com\/index.cfm\" target=\"_blank\">Proteus ISE<\/a>: \u00a0Bu yaz\u0131l\u0131m da g\u00fczel bir sim\u00fclasyon ortam\u0131. Asl\u0131nda Proteus'a sim\u00fclasyon ortam\u0131 demek biraz vicdans\u0131zl\u0131k olur. Zira Proteus ile, devre tasar\u0131m\u0131, devre sim\u00fclasyonu, \u015fematik ve PCB tasar\u0131m\u0131 da yap\u0131labiliyor. Kendisi \u00e7ok \u00e7ok ba\u015far\u0131l\u0131 bir yaz\u0131l\u0131m. Ancak ne yaz\u0131k ki \u00fccretli. Yine de evaluation versiyonunu kullanabilirsiniz. Ya da internetten proteus kurulumu ile ilgili detayl\u0131 bilgileri bulabilirsiniz. Ben 8.10 SP1 versiyonunu kullan\u0131yorum, \u00e7ok da memnunum :D Proteus kurulumunu yapt\u0131ktan sonra, e\u011fer proteus kullanmay\u0131 bilmiyorsan\u0131z google \u00fczerinde <a href=\"https:\/\/www.google.com.tr\/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=proteus%20dersleri\" target=\"_blank\">proteus derslerine<\/a> bak\u0131p, proteus kullan\u0131m\u0131n\u0131 kabaca \u00f6\u011frenmeniz gerekiyor.<\/li>\n<\/ul>\n\nBunlara ek olarak, donan\u0131m ba\u011f\u0131ms\u0131z algoritmalar\u0131 test etmek amac\u0131yla bir C\/C++\u00a0IDE'si\u00a0\u00a0kurmakta fayda var. <a href=\"http:\/\/sourceforge.net\/projects\/orwelldevcpp\/\" target=\"_blank\">Orwell Dev C++ <\/a>gayet ufac\u0131k tefecik ama i\u015fe yarar bir ara\u00e7.\n\nKurulumlar\u0131 tamamlad\u0131ktan sonra, mevzuya dalal\u0131m :) \u00d6ncelikle, proteus \u00fczerinde programlayabilece\u011fimiz bir PIC ortam\u0131 olu\u015fturmam\u0131z gerekiyor. \u0130lk \u00f6rne\u011fimizi PIC16F84A ile yapal\u0131m. Proteus'ta \"P\" tu\u015funa bast\u0131\u011f\u0131m\u0131zda, place part yani devre eleman\u0131 ekleme ekran\u0131 a\u00e7\u0131l\u0131yor. Buraya PIC16F84A yazd\u0131\u011f\u0131n\u0131zda, ilgili sembol \u00e7\u0131kacak ve \u00e7ift t\u0131klad\u0131\u011f\u0131n\u0131zda soldaki listeye eklenecektir. Ard\u0131ndan PIC mikrokontrol\u00f6r\u00fc ve di\u011fer gerekli devre elemanlar\u0131n\u0131 eklemeniz m\u00fcmk\u00fcn olacak. Proteus derslerini inceledi\u011finiz i\u00e7in buray\u0131 k\u0131sa kesiyorum ve kurman\u0131z gereken basit devreyi a\u015fa\u011f\u0131da sizlerle payla\u015f\u0131yorum.\n\n<a href=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_1.png\"><img class=\"alignnone size-full wp-image-379\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_1.png\" alt=\"PIC16F84A_1\" width=\"447\" height=\"302\" \/><\/a>\n\n\u015eimdi ak\u0131llara hakl\u0131 baz\u0131 sorular gelebilir. En birincisi, bu devrenin beslemeleri nerede? PIC16F84A \u00fczerine \u00e7ift\u00a0t\u0131klad\u0131\u011f\u0131m\u0131zda bir pencere a\u00e7\u0131l\u0131r. O penecede sol k\u0131s\u0131mda \"hidden pins\" yani gizli pinler yazar. Burada VDD ve VCC pinlerinin gizli oldu\u011funu ve otomatik olarak PIC'in beslendi\u011fini g\u00f6r\u00fcr\u00fcz. \u015eimdilik bu konu \u00fczerinde \u00e7ok durmayaca\u011f\u0131m ancak ileride bunu da a\u00e7\u0131klayaca\u011f\u0131m. \u015eimdilik merak edenler <a href=\"http:\/\/electronics.stackexchange.com\/questions\/110444\/connecting-switches-to-hidden-supply-pins-in-proteus-isis\">buraya <\/a>bakabilirler. Proteus burada bizim i\u015fimizi kolayla\u015ft\u0131rm\u0131\u015f ancak ger\u00e7ek hayatta beslemeyi ba\u011flamazsan\u0131z hi\u00e7 bir \u015fey \u00e7al\u0131\u015fmayacakt\u0131r. Buna ithafen VCC ve GND bacaklar\u0131n\u0131n aras\u0131nda\u00a02.0V - 5.5V aras\u0131 bir gerilim olmas\u0131 gerekiyor. Bu bilgiyi nereden \u00f6\u011frendim? Tabi ki <a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/35007b.pdf\">datasheet'ten <\/a>:)\n\nNeyse \u015fimdi devam edelim, i\u015flemcinin beslemeleri otomatik yap\u0131ld\u0131. PIC16F84A'n\u0131n dahili osilat\u00f6r\u00fc olmad\u0131\u011f\u0131ndan d\u0131\u015far\u0131dan OSC1 ve OSC2 pinlerine bir XTAL (crystal) <a href=\"https:\/\/www.google.com.tr\/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=osilat%C3%B6r%20nedir\" target=\"_blank\">osilat\u00f6r <\/a>ba\u011flam\u0131\u015f\u0131z. Buradaki kapasitelerin de\u011ferine kadar datasheet'te yaz\u0131yor. 22pF da ba\u011flasak olurdu :) Esasen bu pinlerin aras\u0131nda bir ring osilat\u00f6r var, XTAL ve kapasit\u00f6rler bu devreyi tamaml\u0131yor ve osilasyon ba\u015fl\u0131yor. Burada \u015fimdilik \u00e7ok detaya girmeyece\u011fim. Osilat\u00f6r bir anlamda kalp at\u0131\u015f\u0131 gibi sinyaller \u00fcretir ve mikrodenetleyicinin, bu i\u015farete (saat i\u015fareti, clock cycle) senkronize \u015fekilde i\u015flem yapmas\u0131n\u0131 sa\u011flar. Bu k\u0131sma parantez de\u011fil paragraflar a\u00e7mak gerekiyor. Onu da ileride a\u00e7aca\u011f\u0131m. Ancak \u015fimdi\u00a0neyse diyelim ve devam edelim.\n\nMCLR diye bir pin var \u00fczerinde de bir \u00e7izgi var. Bu pin Reset pini ve \u00fczerindeki \u00e7izgi bize, bu pinin \"active low\" yani \"d\u00fc\u015f\u00fck seviyede aktif\" olacak \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlat\u0131yor. Bu durumun T\u00fcrk\u00e7e'si \u015fu ki, o pini lojik 0 seviyesine \u00e7ekerseniz mikrokontrol\u00f6r reset durumunda kalacakt\u0131r. Biz de ne yapm\u0131\u015f\u0131z, butona bas\u0131lmad\u0131\u011f\u0131nda o pin lojik 1'de kalacak \u015fekilde yapm\u0131\u015f\u0131z. Buton'a bas\u0131ld\u0131\u011f\u0131nda ise mikrokontrol\u00f6r reset'e \u00e7ekilecek.\n\nBizim PIC16F84A yerine PIC16F877A kullanmak istesek ba\u011flant\u0131lar nas\u0131l olacakt\u0131? A\u015fa\u011f\u0131daki gibi, yani ayn\u0131 olacakt\u0131.\n\n<a href=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_1.png\"><img class=\"alignnone size-full wp-image-385\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_1.png\" alt=\"PIC16F877A_1\" width=\"635\" height=\"455\" \/><\/a>\n\nNeyse biz hemen mevzumuza yani PIC16F84A'ya geri d\u00f6nelim. Proteus'ta mikrokontrol\u00f6re hi\u00e7 bir \u015fey ba\u011flamasak da mikrokontrol\u00f6r \u00e7al\u0131\u015f\u0131yor :D Bu sebeple, h\u0131zl\u0131ca bir led ba\u011flay\u0131p, a\u015fa\u011f\u0131daki devreyi kural\u0131m.\n\n<a href=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_2.png\"><img class=\"alignnone size-full wp-image-387\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_2.png\" alt=\"PIC16F84A_2\" width=\"534\" height=\"319\" \/><\/a>\n\nHemen ilk kodumuzu da yazal\u0131m :) Bunun i\u00e7in MPLAB X'de bir PIC16F84A projesi olu\u015fturmak ve a\u015fa\u011f\u0131daki kodu eklemek gerekiyor.\n\n<pre class=\"lang:c decode:true\">#include &lt;xc.h&gt;\n\nvoid main(void)\n{\n TRISB=0;\n PORTB=1;\n while(1);\n}<\/pre>\n\nBu kodu projemizde derledi\u011fimizde, derleyici .hex uzant\u0131l\u0131 bir dosya olu\u015fturacak. \u015eimdi proteus isis'te kurdu\u011fumuz devreye\u00a0d\u00f6nelim, ve PIC \u00fczerine \u00e7\u0131ft t\u0131klay\u0131p \"Program File\" yazan k\u0131sma \u00e7ift t\u0131klayarak, \u00fcretilen .hex uzant\u0131l\u0131 dosyam\u0131z\u0131 se\u00e7elim. \"OK\" tu\u015funa\u00a0basarak \u00e7\u0131kal\u0131m ve \"play\" butonuna basarak sim\u00fclasyonu ba\u015flatal\u0131m. Led, a\u015fa\u011f\u0131daki gibi yanacak.\n\n<a href=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_3.png\"><img class=\"alignnone size-full wp-image-388\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F84A_3.png\" alt=\"PIC16F84A_3\" width=\"400\" height=\"192\" \/><\/a>\n\nDe\u011ferli dostlar\u0131m, burada PIC d\u00fcnyas\u0131na merhaba demi\u015f olduk. Mutlaka ki buraya kadar olan k\u0131s\u0131mda konu\u015fabilece\u011fimiz \u00e7ok \u015fey var. Ancak t\u00fcm bunlar\u0131 di\u011fer yaz\u0131ya b\u0131rak\u0131yorum :) Zira bu yaz\u0131y\u0131 bu g\u00fcn bitmeden yay\u0131nlamak niyetindeyim. Bir sonraki yaz\u0131da bu yapt\u0131klar\u0131m\u0131z\u0131n suyunu \u00e7\u0131karaca\u011f\u0131z ve ibretler \u00fczerinden gidece\u011fiz :)\n\nBuraya kadar okudu\u011funuz i\u00e7in te\u015fekk\u00fcrler. Yaz\u0131y\u0131 be\u011fendiyseniz, faydalanabilecek tan\u0131d\u0131klar\u0131n\u0131z ile payla\u015fabilirseniz sevinirim.\n\n\u015eimdi devam!\n\n[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=369\" style=\"3d\"\u00a0icon=\"icon: arrow-circle-o-left\"]\u00d6nceki Sayfa[\/su_button] \u00a0[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=403\" style=\"3d\" icon=\"icon: arrow-circle-right\"]Sonraki Sayfa[\/su_button]","_tr_post_name":"pic-programlama-2-merhaba-pic16","_tr_post_excerpt":"","_tr_post_title":"PIC Programlama - 2: Merhaba PIC16","_en_post_content":"","_en_post_name":"","_en_post_excerpt":"","_en_post_title":"","edit_language":"tr","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[2,3],"tags":[],"class_list":["post-378","post","type-post","status-publish","format-standard","hentry","category-elektronik","category-gomulu-sistemler"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5gWM6-66","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=378"}],"version-history":[{"count":0,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/378\/revisions"}],"wp:attachment":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=378"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}