{"id":645,"date":"2015-06-10T07:47:17","date_gmt":"2015-06-10T07:47:17","guid":{"rendered":"https:\/\/ibex.tech\/embedded\/?p=645"},"modified":"2022-02-18T15:37:48","modified_gmt":"2022-02-18T15:37:48","slug":"pic32-atod","status":"publish","type":"post","link":"https:\/\/ibex.tech\/embedded\/microchip\/pic32\/xc32-v2-old\/atod-xc32\/pic32-atod","title":{"rendered":"PIC32 AtoD"},"content":{"rendered":"<h4>\nAutomatically Read A Single Analog Input<br \/>\n<\/h4>\n<pre>\r\n<code>\r\n\tCloseADC10();\/\/ ensure the ADC is off before setting the configuration\r\n\tOpenADC10(\r\n\t\t\t(ADC_MODULE_ON | ADC_IDLE_STOP | ADC_FORMAT_INTG16 | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON | ADC_SAMP_ON), \/\/AD1CON1 register\r\n\t\t\t(ADC_VREF_AVDD_AVSS | ADC_SCAN_OFF | ADC_ALT_INPUT_OFF | ADC_SAMPLES_PER_INT_10),\t\t\t\t\t\t\/\/AD1CON2 register\r\n\t\t\t(ADC_SAMPLE_TIME_4 | ADC_CONV_CLK_PB | ADC_CONV_CLK_3Tcy),\t\t\t\t\t\t\t\t\t\t\t\t\/\/AD1CON3 register (SET THE SAMPLE TIME ETC)\r\n\t\t\t(ENABLE_AN0_ANA),\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/AD1PCFG register (SET THE ANALOG PINS)\r\n\t\t\t(0)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\/\/AD1CSSL register (SELECTS INPUTS TO BE SEQUENTIALLY SCANNED) (0 when ADC_SCAN_OFF)\r\n\t\t\t);\r\n\tEnableADC10();\r\n\t\/\/Read the voltage from ADC1BUF0\r\n<\/code><\/pre>\n<p>\nIf this doesn&#39;t work (seems to sometimes not) then simply use the Multiple Analog Inputs example below with just the one input defined in the last 2 arguments\n<\/p>\n<h4>\nAutomatically Read Multiple&nbsp;Analog Inputs<br \/>\n<\/h4>\n<pre>\r\n<code>\r\n\tCloseADC10();\/\/ ensure the ADC is off before setting the configuration\r\n\tOpenADC10(\r\n\t\t\t(ADC_MODULE_ON | ADC_IDLE_STOP | ADC_FORMAT_INTG16 | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON | ADC_SAMP_ON), \/\/AD1CON1 register\r\n\t\t\t(ADC_VREF_AVDD_AVSS | ADC_SCAN_ON | ADC_ALT_INPUT_OFF | ADC_SAMPLES_PER_INT_4),\t\t\t\t\t\t\t\/\/AD1CON2 register (ENSURE ADC_SAMPLES_PER_INT_ = NO OF INPUTS BEING SAMPLES)\r\n\t\t\t(ADC_SAMPLE_TIME_4 | ADC_CONV_CLK_PB | ADC_CONV_CLK_3Tcy),\t\t\t\t\t\t\t\t\t\t\t\t\/\/AD1CON3 register (SET THE SAMPLE TIME ETC)\r\n\t\t\t(ENABLE_AN3_ANA | ENABLE_AN2_ANA | ENABLE_AN1_ANA | ENABLE_AN0_ANA),\t\t\t\t\t\t\t\t\t\/\/AD1PCFG register (SET THE ANALOG PINS)\r\n\t\t\t(~(SKIP_SCAN_AN3 | SKIP_SCAN_AN2 | SKIP_SCAN_AN1 | SKIP_SCAN_AN0))\t\t\t\t\t\t\t\t\t\/\/AD1CSSL register (SELECTS INPUTS TO BE SEQUENTIALLY SCANNED)&nbsp;(looks like OpenADC10() inverts what we give it, hence the ~)\r\n\t\t\t);\r\n\tEnableADC10();\r\n\t\/\/Read the voltage from the corresponding ADC1BUF0, ADC1BUF1 etc (Starts filling from ADC1BUF0 regardless of actual AN# pin numbers being sampled)\r\n<\/code><\/pre>\n<h4>\nConverting Result To Voltage<br \/>\n<\/h4>\n<pre>\r\n<code>\r\n\t\/\/10 bit AtoD (0 - 1023)\r\n\t\/\/[Vsource] - 2K7 - [PIC] - 2K2 - [0V] Potential divider\r\n\t\/\/1024 = 3.3V = 7.35Vsource\r\n\t\/\/Result = (MaxReadingSource \/ MaxReading) * AtoD value\r\n\tUINT16 atod_vin_x100 = (UINT16)(((double)735 \/ 1024) * ADC1BUF0);\r\n<\/code><\/pre>\n<p>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Automatically Read A Single Analog Input CloseADC10();\/\/ ensure the ADC is off before setting the configuration OpenADC10( (ADC_MODULE_ON | ADC_IDLE_STOP | ADC_FORMAT_INTG16 | ADC_CLK_AUTO | ADC_AUTO_SAMPLING_ON | ADC_SAMP_ON), \/\/AD1CON1 register (ADC_VREF_AVDD_AVSS | ADC_SCAN_OFF | ADC_ALT_INPUT_OFF | ADC_SAMPLES_PER_INT_10), \/\/AD1CON2 register (ADC_SAMPLE_TIME_4 | ADC_CONV_CLK_PB | ADC_CONV_CLK_3Tcy), \/\/AD1CON3 register (SET THE SAMPLE TIME ETC) (ENABLE_AN0_ANA), \/\/AD1PCFG register (SET [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"class_list":["post-645","post","type-post","status-publish","format-standard","hentry","category-atod-xc32"],"_links":{"self":[{"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/posts\/645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/comments?post=645"}],"version-history":[{"count":6,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/posts\/645\/revisions"}],"predecessor-version":[{"id":847,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/posts\/645\/revisions\/847"}],"wp:attachment":[{"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/media?parent=645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/categories?post=645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ibex.tech\/embedded\/wp-json\/wp\/v2\/tags?post=645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}