{"id":1833,"date":"2020-09-06T22:50:38","date_gmt":"2020-09-06T19:50:38","guid":{"rendered":"https:\/\/www.mikrobotik.com\/wp2\/?p=1833"},"modified":"2020-09-06T22:50:38","modified_gmt":"2020-09-06T19:50:38","slug":"arduino-pwm-kullanimi","status":"publish","type":"post","link":"https:\/\/www.mikrobotik.com\/wp2\/2020\/09\/06\/arduino-pwm-kullanimi\/","title":{"rendered":"Arduino PWM Kullan\u0131m\u0131."},"content":{"rendered":"<p>Arduinoda PWM kullan\u0131m\u0131n\u0131 \u00f6\u011frenmeden \u00f6nce PWM konusuna bir giri\u015f yapmak istiyorum. Bir \u00e7ok yerde \u00f6rnekler ve anlat\u0131mlar var. Ben bu anlat\u0131mlardan farkl\u0131 olarak sade ve prati\u011fe y\u00f6nelik anlatmak istiyorum.<br \/>\n\u00d6ncelikle PWM nedir ve nerelerde kullan\u0131l\u0131r diye ba\u015fl\u0131yoruz. Fakat kullan\u0131m yerleri saymakla bitmeyece\u011fi i\u00e7in genel anlamda \u015f\u00f6yle bir tan\u0131m yapabiliriz. Belirli bir frekansta olu\u015fturulan kare dalgan\u0131n 1 periyot i\u00e7erisinde 1 ve 0 lar\u0131n ba\u015flang\u0131\u00e7 pozisyonunu de\u011fi\u015ftirerek, kare dalga sinyalinin HIGH seviyesi ve LOW seviyesinde kalma zaman\u0131n\u0131 ayarlam\u0131\u015f oluyoruz. Bu \u015fekilde elde etti\u011fimiz sinyale PWM sinyali deriz.<br \/>\nPeriod( periyot ) = Bir sinyalin tekrar etti\u011fi noktalar\u0131n\u0131n aras\u0131d\u0131r. <span style=\"color: #ff6600;\">T<\/span>=1\/frekans olarak hesaplan\u0131r. Birimi saniyedir.<br \/>\nFrekans=1\/T (periyot)\u00a0 olarak hesaplan\u0131r.\u00a0 Resimdeki <span style=\"color: #ff6600;\">A (amplitude)<\/span> gerilimi ifade eder.Birimi Hz. dir<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-medium wp-image-1835 lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PeriodicSignals_2c-300x149.png\" alt=\"\" width=\"300\" height=\"149\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PeriodicSignals_2c-300x149.png 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PeriodicSignals_2c.png 415w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/149;\" \/><br \/>\nBu zaman\u0131 ayarlayarak biz ne yapm\u0131\u015f oluyoruz derseniz, kullan\u0131ld\u0131\u011f\u0131 yerdeki olu\u015fan gerilimi azalt\u0131p \u00e7o\u011falt\u0131r\u0131z. PWM ile kullan\u0131lan ledlerin yava\u015f yava\u015f yan\u0131p s\u00f6nd\u00fc\u011f\u00fcn\u00fc g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr. Bu hareketin sebebi 1 ve 0 zamanlar\u0131n\u0131 ayarlad\u0131\u011f\u0131m\u0131z pwm sinyalinin olu\u015fturdu\u011fu gerilimi ayarlamam\u0131zd\u0131r.<br \/>\nMesela bir motorun h\u0131z\u0131n\u0131 ayarlayacaks\u0131n\u0131z. Bunun i\u00e7in Potansiyometre kullanabilirsiniz. Bunun yerine pwm sinyali kulland\u0131\u011f\u0131n\u0131zda mikroi\u015flemci ile motor h\u0131z\u0131n\u0131 ayarlars\u0131n\u0131z.<br \/>\nBu 1 ve 0 zamanlar\u0131na duty denir. 1 ve 0 zamanlar\u0131 e\u015fitse %50 duty denir. a\u015fa\u011f\u0131daki resimde duty oranlar\u0131n\u0131n sinyalde nas\u0131l de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyorsunuz. %0 ile %100 aras\u0131nda ayarlan\u0131r.<\/p>\n<p><a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/servopi-pwmduty.png\" rel=\"lightbox[1833]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1834 lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/servopi-pwmduty-267x300.png\" alt=\"\" width=\"361\" height=\"405\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/servopi-pwmduty-267x300.png 267w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/servopi-pwmduty.png 430w\" data-sizes=\"(max-width: 361px) 100vw, 361px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 361px; --smush-placeholder-aspect-ratio: 361\/405;\" \/><\/a><\/p>\n<p>Buraya kadar PWM nedir, cevaplamaya \u00e7al\u0131\u015ft\u0131k. Her mikrokontrolc\u00fc ile yaz\u0131l\u0131msal olarak PWM elde edilebilir. Fakat donan\u0131msal PWM her mikrokontrolc\u00fcde yoktur. Arduinoda 6 adet donan\u0131msal PWM \u00e7\u0131k\u0131\u015f\u0131 vard\u0131r.\u00a0 Alt\u0131s\u0131n\u0131da ayn\u0131 anda kullanabilirsiniz. Bazen birbiriyle senkron olabilir bazen de farkl\u0131 zamanlarda ba\u015flay\u0131p farkl\u0131 frekanslarda olabilirler. Sizin ayarlar\u0131n\u0131za ba\u011fl\u0131 olarak bir \u00e7ok konfig\u00fcrasyon yap\u0131labilir.<br \/>\n<strong><span style=\"color: #ff0000;\">En sade \u00f6rnek: Fakat bunun kullan\u0131lmas\u0131n\u0131 tavsiye etmiyorum.\u00a0<\/span><br \/>\n<span class=\"kw1\">void<\/span>\u00a0<span class=\"kw3\">setup<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><br \/>\n<span class=\"br0\">{<\/span><\/strong><br \/>\n<span class=\"kw1\">pinMode<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">13<\/span><span class=\"sy0\">,<\/span>\u00a0<span class=\"kw2\">OUTPUT<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br \/>\n<strong><span class=\"br0\">}<\/span><\/strong><\/p>\n<p><strong><span class=\"kw1\">void<\/span>\u00a0<span class=\"kw3\">loop<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/strong><br \/>\n<strong><span class=\"br0\">{<\/span><\/strong><br \/>\n<span class=\"kw1\">digitalWrite<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">13<\/span><span class=\"sy0\">,<\/span>\u00a0<span class=\"kw2\">HIGH<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">delayMicroseconds<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\u00a0<span class=\"co1\">\/\/ yakla\u015f\u0131k 10% duty cycle = 1KHz<\/span><br \/>\n<span class=\"kw1\">digitalWrite<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">13<\/span><span class=\"sy0\">,<\/span>\u00a0<span class=\"kw2\">LOW<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw1\">delayMicroseconds<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">1000<\/span>\u00a0<span class=\"sy0\">&#8211;<\/span>\u00a0<span class=\"nu0\">100<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\"><strong>}<\/strong><br \/>\n<\/span>Bunun gibi bir mant\u0131kla kolayl\u0131kla pwm \u00fcretilebilir. <span style=\"color: #ff6600;\">Bunun dezavantaj\u0131 ise<\/span> bu i\u015flemin yan\u0131nda ba\u015fka program sat\u0131rlar\u0131 da varsa, hele bir de<span style=\"color: #ff6600;\"> delay\u00a0 komutu<\/span> varsa, pwm frekans\u0131 devaml\u0131 farkl\u0131 olacakt\u0131r.<\/p>\n<p>Bu durumu engellemek i\u00e7in <span style=\"color: #ff6600;\">zaman kesmesi kullan\u0131l\u0131r<\/span>. Bu zaman kesmesi s\u00fcresince arduino ba\u015fka program sat\u0131rlar\u0131n\u0131 i\u015fletebilir. <span style=\"color: #ff0000;\"><strong>Zaman kesmesi,<\/strong><\/span> arka planda bulunan zaman sayac\u0131n\u0131n son noktaya gelip s\u0131f\u0131rland\u0131\u011f\u0131 anda olu\u015fan bir kesmedir. Bu sayede kesme gelesiye kadar arduino bizim program\u0131m\u0131z\u0131 i\u015fletecek zaman bulur ve kesme geldi\u011finde bizim program\u0131m\u0131za ara verip kesme program\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. Sonras\u0131nda kald\u0131\u011f\u0131 yerden program\u0131m\u0131z\u0131 i\u015fletmeye devam eder.<br \/>\nBununla ilgili bir \u00f6rnek program,<strong><span style=\"color: #ff6600;\"> \u00f6rnek programlar\u0131n aras\u0131nda yer almaktad\u0131r. Videoda da \u00e7al\u0131\u015fmas\u0131n\u0131 g\u00f6rebilirsiniz.<\/span><\/strong><\/p>\n<p><span style=\"color: #ff0000;\"><strong>Donan\u0131msal PWM :<\/strong><\/span> Bu tip pwm kulland\u0131\u011f\u0131n\u0131zda Arduino program\u0131n\u0131z ba\u015fka i\u015f yapsa da arka planda bu PWM sinyalini kendisi \u00fcretir. Tabii ki sizin verdi\u011finiz ayarlarla bu \u00fcretilir.<br \/>\nGelelim PWM\u00a0 i\u00e7in Arduinoda kullan\u0131lan komuta. [ analogWrite(3, 125); ] komutu kullan\u0131l\u0131r.<br \/>\nBu komutta 3 hangi pwm pini oldu\u011funu g\u00f6sterir. 125 ise duty miktar\u0131n\u0131 g\u00f6sterir.<br \/>\nBurada \u015funu vurgulamakta fayda var. Timer1 dedi\u011fimiz zaman sayac\u0131, 16 bitlik bir saya\u00e7t\u0131r. Normalde saya\u00e7 65536 ya kadar sayar. Fakat PWM dedi\u011fimizde en fazla 10 bit ayar\u0131 var. yani 1024e kadar sayar. %50 duty dedi\u011finizde bunun yar\u0131s\u0131, analog write komutunda 125 yaz\u0131lan yere yaz\u0131l\u0131r. \u015eayet Timer0 veya Timer 2 kullan\u0131lacaksa, bunlar 8 bitlik zaman say\u0131c\u0131s\u0131d\u0131r. Bunlarda 255 e kadar sayar. Bundan dolay\u0131 %50 duty dedi\u011fimizde 128 say\u0131s\u0131n\u0131 veririz.<br \/>\n<strong><span style=\"color: #ff6600;\">\u015eunu da unutmamak gerekir.<\/span><\/strong> Analogwrite komutunu kullanacaksan\u0131z sadece atmega entegresinin PWM \u00e7\u0131k\u0131\u015f pimlerinde kullanabilirsiniz. Ayr\u0131ca bu komutu kullanmak i\u00e7in <span style=\"color: #ff6600;\">PWM k\u00fct\u00fcphanesine<\/span> ihtiyac\u0131n\u0131z olmayacakt\u0131r.\u00a0 <span style=\"color: #ff6600;\">Bu tip bir \u00e7al\u0131\u015fma ise \u00f6rnek programlar aras\u0131ndad\u0131r.<\/span><\/p>\n<figure id=\"attachment_1836\" aria-describedby=\"caption-attachment-1836\" style=\"width: 377px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PWM_pin.png\" rel=\"lightbox[1833]\"><img decoding=\"async\" class=\"lightbox wp-image-1836 lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PWM_pin-300x141.png\" alt=\"\" width=\"377\" height=\"177\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PWM_pin-300x141.png 300w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/PWM_pin.png 690w\" data-sizes=\"(max-width: 377px) 100vw, 377px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 377px; --smush-placeholder-aspect-ratio: 377\/177;\" \/><\/a><figcaption id=\"caption-attachment-1836\" class=\"wp-caption-text\"><span style=\"color: #ff6600;\">Arduino mega da daha fazla timer bulunmaktad\u0131r. Bunlar atmega328 entegresini kullanan arduino kartlar\u0131 i\u00e7in ge\u00e7erlidir. <\/span><\/figcaption><\/figure>\n<p>Burada \u015fu soru akla geliyor. Hangi pwm \u00e7\u0131k\u0131\u015f\u0131 hangi ismi al\u0131r ve hangi zaman say\u0131c\u0131s\u0131yla tetiklenir.<br \/>\nBuraya kadar basit olarak Anlog write komutuyla yapabilece\u011fimizi g\u00f6rd\u00fck. Bu \u015fekilde bir \u00e7al\u0131\u015fmay\u0131 se\u00e7tiyseniz OC0A ve OC0B pimlerinden 1Khz lik PWM alabilirsiniz. Di\u011fer pimlerden ise 500hz lik bir sinyal alabilirsiniz.<br \/>\nBu frekans\u0131 ayarlamak istesem ayarlayamaz m\u0131y\u0131m, diyorsunuz. Tabii ki ayarlayabilirsiniz. Ekteki \u00f6rnek programlardan biri, bunu g\u00f6stermektedir. Program ile 1-255 hz aras\u0131nda bir se\u00e7im yapabilirsiniz.<br \/>\nTabii ki bu ayar\u0131 yaparken \u00f6rnek programda sadece timer1 kullan\u0131ld\u0131. sizler ise timer0 ve timer2 yi de kullanabilirsiniz. \u00d6rnek programda frekans de\u011fi\u015ftirmek i\u00e7in PWM.H k\u00fct\u00fcphanesi kullan\u0131lmaktad\u0131r.<br \/>\n<span style=\"color: #ff0000;\"><strong>Problem sadece TIMER0 da olacakt\u0131r.<\/strong><\/span> \u00c7\u00fcnk\u00fc bu zaman sayac\u0131n\u0131 <span style=\"color: #ff6600;\">Delay, millis<\/span> gibi zaman fonksiyonlar\u0131 da kulland\u0131\u011f\u0131ndan, bu frekans\u0131 de\u011fi\u015ftirmek i\u00e7in zaman sayac\u0131n\u0131 de\u011fi\u015ftirirseniz bu zaman komutlar\u0131 etkilenebilir.\u00a0 Di\u011fer zaman saya\u00e7lar\u0131n\u0131 rahatl\u0131kla kullanabilirsiniz.<\/p>\n<p>Buraya kadar ise <strong>kolay pwm<\/strong> komutu g\u00f6rd\u00fck. Fakat<span style=\"color: #ff6600;\"> donan\u0131msal bir PWM olu\u015fturman\u0131n biraz daha ayr\u0131nt\u0131l\u0131 y\u00f6n\u00fc var.<\/span> Mesela frekans\u0131 de\u011fi\u015ftirmek ya da 2 \u00e7\u0131k\u0131\u015ftan birini invert etmek ve bir \u00e7ok parametre. Bunlar\u0131 \u00f6\u011frendi\u011finizde ise kolayl\u0131kla istedi\u011finiz \u00f6zellikte PWM sinyalini \u00fcretebilirsiniz. Sonu\u00e7ta elinizde Analog write komutu var. Bununla sadece pim se\u00e7imi ve duty ayar\u0131 yapabiliyorsunuz. \u0130stedi\u011finiz frekanslara \u00e7\u0131kman\u0131z ya da inmeniz gerekti\u011finde bunlar\u0131 yapmak i\u00e7in standart ba\u015fka komut yok. Haz\u0131r k\u00fct\u00fcphaneler var ama onlarda tam \u00e7\u00f6z\u00fcm olmayabiliyor. Yine de k\u00fct\u00fcphane, yetene\u011fi kadar yard\u0131mc\u0131 olacakt\u0131r.<br \/>\n<span style=\"color: #ff6600;\">Bunun yerine art\u0131k biraz derine gideyim, t\u00fcm kontrol bende olsun diyebilirsiniz.<\/span><br \/>\nZaman saya\u00e7lar\u0131n\u0131 ayarlayarak, baz\u0131 yazma\u00e7 ( register) lar\u0131 ayarlayarak \u00e7ok \u00e7e\u015fitli uygulamalar yapabilirsiniz. Mesela 10 bit lik bir pwm \u00fcretmek ya da saat frekans\u0131n\u0131 b\u00f6lerek istedi\u011fimiz frekansa yak\u0131n frekanslar elde etmek bunlardan baz\u0131lar\u0131d\u0131r.<br \/>\nBunlar i\u00e7in a\u015fa\u011f\u0131da baz\u0131 tablolar g\u00f6receksiniz Bu tablolar\u0131n mant\u0131\u011f\u0131n\u0131 anlad\u0131\u011f\u0131n\u0131zda sizler ayarlamalar\u0131 <span style=\"color: #ff6600;\">kolayl\u0131kla yapabileceksiniz.<\/span><\/p>\n<p>Uygulaman\u0131z gereken sat\u0131r \u00f6rne\u011fi budur. Tabii ki ayarlar gerekti\u011finde artabilir.<br \/>\nTCNT1=0;<br \/>\nTCCR1A=0b11110001; \/\/TCCR1A= COM1A1 COM1A0 COM1B1 COM1B0 &#8211; &#8211; WGM11 WGM10<br \/>\nTCCR1B=0b00001001; \/\/ TCCR1B= ICNC1 ICES1 &#8211; WGM13 WGM12 CS12 CS11 CS10<br \/>\nOCR1A = 128;<br \/>\nOCR1B =180;<\/p>\n<p>Yukar\u0131daki sat\u0131rlarda 2 adet register i\u00e7eri\u011fi de\u011fi\u015ftirildi\u011finde OCR1A ve OCR1B duty miktarlar\u0131 yaz\u0131ld\u0131\u011f\u0131nda PWM sinyaliniz haz\u0131r oluyor. Tabii ki, hangi pimden \u00e7\u0131kacaksa yukar\u0131daki tablodan g\u00f6rebilirsiniz.<\/p>\n<p>\u015eimdi de bu registerleri ( yazma\u00e7 )ayarlamak i\u00e7in gereken tablolara bakal\u0131m.\u00a0 3 Ayr\u0131 tablo ufak farkl\u0131l\u0131klarla benzerdir. Kar\u0131\u015ft\u0131rmay\u0131n. <span style=\"color: #ff6600;\">Mesela timer 0 zaman sayac\u0131 ve timer 2 zaman sayac\u0131n\u0131 kullanan PWM de 7 mode vard\u0131r. timer1 zaman sayac\u0131nda ise 15 mode vard\u0131r.\u00a0<\/span><br \/>\n<a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler.png\" rel=\"lightbox[1833]\"><img decoding=\"async\" class=\"lightbox wp-image-1839 alignleft lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler-210x300.png\" alt=\"\" width=\"234\" height=\"334\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler-210x300.png 210w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler.png 607w\" data-sizes=\"(max-width: 234px) 100vw, 234px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 234px; --smush-placeholder-aspect-ratio: 234\/334;\" \/><\/a><a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler1.png\" rel=\"lightbox[1833]\"><img decoding=\"async\" class=\"lightbox wp-image-1840 size-medium alignright lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler1-240x300.png\" alt=\"\" width=\"240\" height=\"300\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler1-240x300.png 240w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler1.png 708w\" data-sizes=\"(max-width: 240px) 100vw, 240px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 240px; --smush-placeholder-aspect-ratio: 240\/300;\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler2.png\" rel=\"lightbox[1833]\"><img decoding=\"async\" class=\"lightbox aligncenter wp-image-1841 size-medium lazyload\" data-src=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler2-205x300.png\" alt=\"\" width=\"205\" height=\"300\" data-srcset=\"https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler2-205x300.png 205w, https:\/\/www.mikrobotik.com\/wp2\/wp-content\/uploads\/2020\/09\/registerler2.png 612w\" data-sizes=\"(max-width: 205px) 100vw, 205px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 205px; --smush-placeholder-aspect-ratio: 205\/300;\" \/><\/a><\/p>\n<p><strong><span style=\"color: #ff6600;\">Yukar\u0131daki tablolarda register ( yazma\u00e7 ) i\u00e7erikleri mevcuttur. Program yazma \u015fekli 2 \u00e7e\u015fittir.\u00a0<\/span><\/strong><br \/>\n<span style=\"color: #ff0000;\">Birincisi :<\/span><br \/>\nTCCR1A=0b11110001; \/\/TCCR1A= COM1A1 COM1A0 COM1B1 COM1B0 &#8211; &#8211; WGM11 WGM10\u00a0 \u015feklinde binary olarak kullanmak istedi\u011fimiz parametreler i\u00e7in 1 veririz istemediklerimize 0 veririz.<br \/>\nYa da a\u015fa\u011f\u0131daki \u015fekilde bit i\u015flemleriyle istediklerimizi y\u00fckleriz.<br \/>\n<span style=\"color: #ff0000;\">\u0130kincisi : <\/span>TCCR1B |= (1 &lt;&lt; CS12) | (1 &lt;&lt; CS10);\u00a0 \/\/\u00a0<span style=\"color: #ff6600;\"> | i\u015fareti bit i\u015flemini ifade eder.\u00a0<\/span><br \/>\nBu \u015fekilde de bit i\u015flemi ile 1 yapmak istediklerimiz direkt olarak yazar\u0131z. Se\u00e7mek istemediklerimizi ise hi\u00e7 yazmay\u0131z. Burada \u015funa dikkat edilmeli. Buradaki gibi CS12 gibi isimler register i\u00e7indeki isimle ayn\u0131 olmal\u0131. CSS12 yazsan\u0131z, bu anla\u015f\u0131lmayaca\u011f\u0131 i\u00e7in hata verecektir. Bundan dolay\u0131 binary \u015feklinde yazmak kolay olacakt\u0131r. Fakat 2. \u015fekilde yaz\u0131l\u0131m ise, program\u0131n okunmas\u0131 a\u00e7\u0131s\u0131ndan da kolay olacakt\u0131r. Hangi register bitleri kullan\u0131lm\u0131\u015f, isme bak\u0131p g\u00f6rebileceksiniz.<\/p>\n<p>Verilen \u00f6rnek programlar\u0131 inceleyip, parametreleri de\u011fi\u015ftirerek \u00e7\u0131kan PWM sinyalini inceleyebilirsiniz. <span style=\"color: #ff6600;\">Bunu videoda oldu\u011fu gibi<\/span> PROTEUS kullanarak \u00e7abuk bir \u015fekilde test edebilirsiniz. Proteus program\u0131 yoksa eski versiyon ki ben bunu kullan\u0131yorum. <a href=\"https:\/\/drive.google.com\/drive\/folders\/0B8X5XBNzNHFnUWJydGNsSlYxV28?usp=sharing\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Bu linkte bulabilirsiniz.<\/strong><\/a> Kurup programlar\u0131n\u0131z\u0131 Arduino olmadan deneyebileceksiniz.<\/p>\n<p>Bunun yan\u0131 s\u0131ra proteusta arduino uno resminin bulundu\u011fu k\u00fct\u00fcphaneyi kullanabilirsiniz. Fakat bu tip \u00f6zel k\u00fct\u00fcphanelerde baz\u0131 \u00f6zellikler \u00e7al\u0131\u015fmad\u0131\u011f\u0131 i\u00e7in sorun ya\u015fayabilirsiniz. Bundan dolay\u0131 Proteus program\u0131na ait atmega328 entegresini\u00a0 kulland\u0131m.\u00a0 <span style=\"color: #ff0000;\"><strong>Bu tip sonradan yap\u0131lan k\u00fct\u00fcphanenin problemleri i\u00e7in en alttaki\u00a0 videoya bakabilirsiniz. <\/strong><\/span><\/p>\n<p><span style=\"color: #ff6600;\">PWM tablolar\u0131n\u0131n<\/span> <a href=\"https:\/\/sites.google.com\/site\/qeewiki\/books\/avr-guide\/pwm-on-the-atmega328\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>kaynak sitesi buras\u0131d\u0131r<\/strong><\/a>.<\/p>\n<p><strong><span style=\"color: #ff6600;\">T\u00fcm programlar dok\u00fcmanlar<\/span><a href=\"https:\/\/drive.google.com\/drive\/folders\/1VhK3kRlPHHw13XgFqtMkIqn5-6UBZZYh?usp=sharing\" target=\"_blank\" rel=\"noopener noreferrer\"> buradad\u0131r.<\/a>\u00a0<\/strong><\/p>\n<p><strong>ATMEGA328 entegresinin<a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf\" target=\"_blank\" rel=\"noopener noreferrer\"> DATASHEET&#8217;i ( Teknik dok\u00fcman\u0131 )<\/a><\/strong><\/p>\n<p><strong>PWM k\u00fct\u00fcphanesini <a href=\"https:\/\/github.com\/terryjmyers\/PWM\" target=\"_blank\" rel=\"noopener noreferrer\">buradan alabilirsiniz.\u00a0<\/a><\/strong><\/p>\n<p><iframe data-src=\"https:\/\/www.youtube.com\/embed\/XqhWHbeL36o\" width=\"900\" height=\"506\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><br \/>\n<span style=\"color: #ff6600;\">A\u015fa\u011f\u0131daki video<\/span>, sadece proteustaki sonradan yap\u0131lan k\u00fct\u00fcphanelerin sorunlar\u0131 olabilece\u011fini g\u00f6sterir. <span style=\"color: #ff6600;\"><strong>PWM kullan\u0131m\u0131 ile ilgisi yoktur.\u00a0<\/strong><\/span><\/p>\n<p><iframe data-src=\"https:\/\/www.youtube.com\/embed\/8iC3N9opk_g\" width=\"900\" height=\"506\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><\/p>\n<p>L\u00fctfen bu konu hakk\u0131nda eksiklik ya da yanl\u0131\u015fl\u0131k oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorsan\u0131z yorum b\u0131rakman\u0131z\u0131 rica ediyorum. Ba\u015fka ki\u015filer de bu hatalar\u0131 ya da eksiklikleri g\u00f6rebilsin.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arduinoda PWM kullan\u0131m\u0131n\u0131 \u00f6\u011frenmeden \u00f6nce PWM konusuna bir giri\u015f yapmak istiyorum. Bir \u00e7ok yerde \u00f6rnekler ve anlat\u0131mlar var. Ben bu anlat\u0131mlardan farkl\u0131 olarak sade ve prati\u011fe y\u00f6nelik anlatmak istiyorum. \u00d6ncelikle&#8230; <\/p>\n","protected":false},"author":1,"featured_media":1834,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,19],"tags":[],"class_list":["post-1833","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-aydinlatma"],"_links":{"self":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/comments?post=1833"}],"version-history":[{"count":7,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1833\/revisions"}],"predecessor-version":[{"id":1846,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/posts\/1833\/revisions\/1846"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media\/1834"}],"wp:attachment":[{"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/media?parent=1833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/categories?post=1833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mikrobotik.com\/wp2\/wp-json\/wp\/v2\/tags?post=1833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}