{"id":659,"date":"2021-01-10T17:23:19","date_gmt":"2021-01-10T14:23:19","guid":{"rendered":"http:\/\/mikroislemciler.com\/?page_id=659"},"modified":"2021-01-10T17:39:02","modified_gmt":"2021-01-10T14:39:02","slug":"timer-ile-adc-kullanimi","status":"publish","type":"page","link":"https:\/\/mikroislemciler.com\/?page_id=659","title":{"rendered":"Timer ile ADC kullan\u0131m\u0131"},"content":{"rendered":"<p>Timer ile ADC kullan\u0131m\u0131 bu k\u0131s\u0131m<strong><em> <a href=\"https:\/\/www.youtube.com\/watch?v=zXAfJ_zZHXg\">ilgili video<\/a> <\/em><\/strong>yard\u0131m\u0131yla olu\u015fturulmu\u015ftur.<\/p>\n<p>STM32CubeIDE de yeni bir proje ba\u015flat\u0131n\u0131z.<\/p>\n<ol>\n<li>Bordunuzu se\u00e7iniz.<\/li>\n<li>Bordunuzun ayarlar\u0131ndan timer k\u0131sm\u0131nda timer periyodunu ADC nin \u00f6rnekleme frekans\u0131na g\u00f6re ayarlay\u0131n\u0131z.<\/li>\n<\/ol>\n<p>\u00d6rne\u011fin ADC \u00f6rnekleme h\u0131z\u0131n\u0131 4 kHz yapmak istiyorsunuz. CPU saati 168 MHz ise timer ayarlar\u0131nda <em><strong>Prescalar<\/strong><\/em> = 1680 oldu\u011funda (timer saati 100 kHz periyodu 10 mikrosaniye olur. bize 250 mikrosaniye laz\u0131m ki ADC \u00f6rnekleme h\u0131z\u0131 4 kHz ve \u00f6rnekleme periyodu 250 mikro saniye olsun)\u00a0 ve <em><strong>Counter Periyodu<\/strong><\/em> 25 oldu\u011funda\u00a0 timer periyodu ayarlanm\u0131\u015f demektir. ADC bu periyoda g\u00f6re ba\u015flat\u0131lacakt\u0131r. A\u015fa\u011f\u0131daki ayarlar\u0131 yap\u0131n\u0131z.<\/p>\n<p><strong>\u00a0Clock Source = Internal Clock <\/strong><\/p>\n<p><strong>\u00a0Channel 1=Output Compare No Output<\/strong><\/p>\n<p><strong>Trigger Event Selection=Update Event<\/strong><\/p>\n<p>Timer da DMA veya NVIC setlemesi yap\u0131lmayacakt\u0131r.<\/p>\n<p>ADC setlemeri:<\/p>\n<p>ADC de bir giri\u015fi onaylay\u0131n\u0131z.<\/p>\n<p>DMA settings de ADD ile kulland\u0131\u011f\u0131n\u0131z ADC yi setleyiniz.\u00a0 Se\u00e7ti\u011finiz DMA s\u00fcrekl olacak sa ADC DMA <em><strong>circular<\/strong><\/em> olmal\u0131d\u0131r.<\/p>\n<p>ADC nin ayarlar\u0131n\u0131 Parameter settings ten yap\u0131n\u0131z.<\/p>\n<p><strong>DMA Continous Requests =ENABLE<\/strong><\/p>\n<p><strong>External Trigger Conversion Source =Timer 3 Trigger Out even<\/strong>t (ben Timer 3 \u00fc kullan\u0131yorum.)<\/p>\n<p><strong>External Trigger Conversion EDGE=Trigger Detection On Rising Edge<\/strong><\/p>\n<p>NVIC sekmesinde hem DMA hemde ADC interruptlar\u0131 onayl\u0131 olmal\u0131d\u0131r.<\/p>\n<p>E\u011fer UART kullanacaksan\u0131z, UART h\u0131z\u0131n\u0131 en h\u0131zl\u0131 konuma 256000 bits\/s a getiriniz.<\/p>\n<p>UART \u0131 DMA ile kullanacaksan\u0131z. UART sekmesinde Add ile UART DMA y\u0131 ekleyip, NVIC de de interruptlar\u0131n\u0131n onayl\u0131 olmas\u0131 gerekir.<\/p>\n<pre><span style=\"color: #008000;\">Yukar\u0131daki ayarda ADC DMA ile bellekteki bir dizine s\u00fcrekli veri yazacak, UART DMA iste\u011fi ile DMA g\u00f6ndercek, timer kendi ba\u015f\u0131na \u00e7al\u0131\u015facak \u015fekilde bir ayar yap\u0131lm\u0131\u015ft\u0131r.<\/span>\r\n\r\nProjeyi olu\u015fturunuz (Generate Code IDE de project setlemesi alt\u0131ndad\u0131r.)\r\nBir uzun veri dizisini 16 bitlik veri olarak tan\u0131mlay\u0131n\u0131z.\r\n\r\n<span style=\"color: #008000;\">\/* USER CODE BEGIN 0 *\/<\/span>\r\nuint16_t adc_veri[512];unint8_t\u00a0 mode=0,mode_ex=1;\r\n<span style=\"color: #008000;\">\/* USER CODE END 0 *\/<\/span><\/pre>\n<pre><span style=\"color: #008000;\">\/* USER CODE BEGIN 2 *\/<\/span>\r\nHAL_TIM_Base_Start(&amp;htim3);\r\nHAL_ADC_Start_DMA(&amp;hadc1,(uint32_t *) &amp;adc_veri[0],512);\r\n<span style=\"color: #008000;\">\/* USER CODE END 2 *\/<\/span><\/pre>\n<p><span style=\"color: #008000;\">\/* USER CODE BEGIN 4 *\/<\/span><br \/>\nvoid HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc){<br \/>\nmode=1;<br \/>\n}<\/p>\n<p>void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){<br \/>\nmode=0;<br \/>\n}<br \/>\n<span style=\"color: #008000;\">\/* USER CODE END 4 *\/<\/span><\/p>\n<pre><span style=\"color: #008000;\">\/* USER CODE BEGIN WHILE *\/<\/span>\r\nwhile (1)\r\n{\r\nif((mode == 1) &amp;&amp; (mode_ex == 1)) {\r\nmode_ex=0;\r\n HAL_UART_Transmit_DMA(&amp;huart3,(uint8_t *) &amp;adc_veri[0],512);\r\n\/\/ilk 256 kelime yada 512 byte seri porttan g\u00f6nderilecektir.\r\n}\r\nif((mode == 0) &amp;&amp; (mode_ex == 0)) {\r\nmode_ex=1;\r\nHAL_UART_Transmit_DMA(&amp;huart3,(uint8_t *) &amp;adc_veri[256],512);\r\n\/\/ikinci 256 kelime yada 512 byte seri porttan g\u00f6nderilecektir.\r\n}\r\n<span style=\"color: #008000;\"> \/* USER CODE END WHILE *\/<\/span>\r\n\r\nyukar\u0131daki kod dizinin her bir yar\u0131s\u0131n\u0131n dolmas\u0131 ile UART dan veri transferi ger\u00e7ekle\u015ftirecek ve daha sonra bekleyecektir.\r\n\r\n<span style=\"color: #0000ff;\"><em><strong>\u00d6NEML\u0130 NOTLAR\r\n1. E\u011fer bir DMA transferinde 8 bit, 16 veya 32 bit tan\u0131mlanm\u0131\u015fssa bu boyutta bir de\u011fi\u015fken dizisi transferi ger\u00e7ekleyiniz. \r\n2. DMA Transferinin ba\u015flat\u0131lmas\u0131 o DMA ile ilgili callback fonksiyonu i\u00e7inde yap\u0131lmamal\u0131d\u0131r.\r\n3. K\u00fct\u00fcphanelerin kullan\u0131m\u0131nda bord \u00fczerinde olan i\u015flemci tipi bilinmeli o i\u015flemci tipine g\u00f6re k\u00fct\u00fcphane kullan\u0131lmal\u0131d\u0131r.\r\n4. K\u00fct\u00fcphane ilavesinde Project &gt;Properties &gt; C\/C++ Build &gt; Settings opsiyonunda Tool Setting Sekmesinde Libraries k\u0131sm\u0131nda \r\nllibrary search path da k\u00fct\u00fcphanenin bulundu\u011fu klas\u00f6r ve Libraries de k\u00fct\u00fcphane ad\u0131 (\u0130\u015flemciye g\u00f6re Do\u011fru ad) verilmelidir.\r\n\u00d6rne\u011fin libarm_cortexM0l_math.a  k\u00fct\u00fcphanesi i\u00e7in <\/strong>arm_cortexM0l_math<strong> ismi verilmelidir.\r\n#include \"arm_math.h\"\r\n#include \"arm_const_structs.h\"\r\n#include \"arm_common_tables.h\"\r\ntan\u0131mlamalar\u0131 yap\u0131lmal\u0131 ve projenin Inc dosyalar\u0131n\u0131n oldu\u011fu yere bu dosyalar kopyalanmal\u0131d\u0131r.\r\n<\/strong><\/em><\/span><\/pre>\n<p>&nbsp;<\/p>\n<pre><span style=\"color: #008000;\">\u00a0<\/span><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Timer ile ADC kullan\u0131m\u0131 bu k\u0131s\u0131m ilgili video yard\u0131m\u0131yla olu\u015fturulmu\u015ftur. STM32CubeIDE de yeni bir proje ba\u015flat\u0131n\u0131z. Bordunuzu se\u00e7iniz. Bordunuzun ayarlar\u0131ndan timer k\u0131sm\u0131nda timer periyodunu ADC nin \u00f6rnekleme frekans\u0131na g\u00f6re ayarlay\u0131n\u0131z. \u00d6rne\u011fin ADC \u00f6rnekleme h\u0131z\u0131n\u0131 4 kHz yapmak istiyorsunuz. CPU saati 168 MHz ise timer ayarlar\u0131nda Prescalar = 1680 oldu\u011funda (timer saati 100 kHz periyodu 10 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":548,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-659","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/pages\/659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=659"}],"version-history":[{"count":6,"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/pages\/659\/revisions"}],"predecessor-version":[{"id":666,"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/pages\/659\/revisions\/666"}],"up":[{"embeddable":true,"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=\/wp\/v2\/pages\/548"}],"wp:attachment":[{"href":"https:\/\/mikroislemciler.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}