<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>nrfx_saadc library simple mode and advanced mode</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/102873/nrfx_saadc-library-simple-mode-and-advanced-mode</link><description>Hi 
 I have questions on adc multichannel and multichannel configuration. 
 I want to setup two adc channels, One with timely accurate sampling, for example, 5ms. Another one that doesn&amp;#39;t need accurate timing, e.g 30s, if the sampling period is 29s or</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 17 Aug 2023 08:14:17 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/102873/nrfx_saadc-library-simple-mode-and-advanced-mode" /><item><title>RE: nrfx_saadc library simple mode and advanced mode</title><link>https://devzone.nordicsemi.com/thread/441778?ContentTypeID=1</link><pubDate>Thu, 17 Aug 2023 08:14:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e6bc571d-fc82-45bc-b2b9-6df0990a81fa</guid><dc:creator>Jared</dc:creator><description>[quote user="szhaulai"]How do I know which adc channel is connected to ppi_channel1? Or, all adc channels are connected to all ppi channels.&amp;nbsp;[/quote]
&lt;p&gt;No SAADC channel is connected directly to PPI. But every &lt;strong&gt;enabled&lt;/strong&gt; SAADC channel will be sampled when you trigger the task SAMPLE as specified in the &lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf52840/saadc.html?cp=5_0_0_5_22"&gt;product specification:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sampling of all enabled channels is started by triggering the SAMPLE task, and the sample results are automatically written to memory using EasyDMA.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;When multiple channels are enabled, they are sampled successively in a sequence starting with the lowest channel number. The time it takes to sample all enabled channels is given as follows:&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;em&gt;&lt;code&gt;Total time &amp;lt; Sum(CH[x].t&lt;sub&gt;ACQ&lt;/sub&gt;+t&lt;sub&gt;CONV&lt;/sub&gt;), x is the number of enabled channels&lt;/code&gt;&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;A DONE event is generated for every single completed conversion, and an END event is generated when multiple samples, as specified in&amp;nbsp;&lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf52840/saadc.html?cp=5_0_0_5_22#register.RESULT.MAXCNT"&gt;RESULT.MAXCNT&lt;/a&gt;, have been written to memory.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Thus, you never &amp;quot;trigger two adc channels&amp;quot;, but you trigger the task SAMPLE through PPI when the COMPARE event is generated, if a SAADC channel has been enabled at that point, then it will be sampled.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;regards&lt;/p&gt;
&lt;p&gt;Jared&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrfx_saadc library simple mode and advanced mode</title><link>https://devzone.nordicsemi.com/thread/441670?ContentTypeID=1</link><pubDate>Wed, 16 Aug 2023 14:31:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:50637a44-7bf9-4f48-8a5b-c693dab6da5a</guid><dc:creator>szhaulai</dc:creator><description>&lt;p&gt;Hi Jared&lt;/p&gt;
&lt;p&gt;Thanks for the answer, but I am still not clear about triggering a sample task.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If I trigger two adc channels with two different ppi channels. In the following code snippets (please check if I have channel compare mask number correct, I haven&amp;#39;t fully understand the purpose of clear mask)&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;//init adc&lt;/div&gt;
&lt;div&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nrfx_saadc_channel_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;saadc_channel&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;NRFX_SAADC_DEFAULT_CHANNEL_DIFFERENTIAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NRF_SAADC_INPUT_AIN0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;NRF_SAADC_INPUT_AIN1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;SAADC_CHANNEL_NUM&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nrfx_saadc_channel_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;saadc_battery_channel&lt;/span&gt;&lt;span&gt; &amp;nbsp;= &lt;/span&gt;&lt;span&gt;NRFX_SAADC_DEFAULT_CHANNEL_SE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NRF_SAADC_INPUT_AIN3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;SAADC_BAT_CHANNEL_NUM&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nrfx_saadc_channel_t&lt;/span&gt;&lt;span&gt; * &lt;/span&gt;&lt;span&gt;p_channels&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;] = {&amp;amp;&lt;/span&gt;&lt;span&gt;saadc_channel&lt;/span&gt;&lt;span&gt;, &amp;amp;&lt;/span&gt;&lt;span&gt;saadc_battery_channel&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;nrfx_saadc_channels_config&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;p_channels&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;nrfx_saadc_advanced_mode_set&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &amp;lt;&amp;lt; &lt;/span&gt;&lt;span&gt;SAADC_CHANNEL_NUM&lt;/span&gt;&lt;span&gt;)&amp;nbsp; | (1&amp;nbsp;&amp;lt;&amp;lt; SAADC_BAT_CHANNEL_NUM), &lt;/span&gt;&lt;span&gt;NRF_SAADC_RESOLUTION_14BIT&lt;/span&gt;&lt;span&gt;, &amp;amp;&lt;/span&gt;&lt;span&gt;saadc_adv_cfg&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;saadc_evt_handler&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;nrfx_saadc_mode_trigger&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;//init timer&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;nrfx_timer_extended_compare&lt;/span&gt;&lt;span&gt;(&amp;amp;&lt;/span&gt;&lt;span&gt;timer1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_TIMER_CC_CHANNEL0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5ms_ticks&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;nrfx_gppi_channel_endpoints_setup&lt;/span&gt;&lt;span&gt;(ppi_&lt;/span&gt;&lt;span&gt;channel1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;nrfx_timer_event_address_get&lt;/span&gt;&lt;span&gt;(&amp;amp;&lt;/span&gt;&lt;span&gt;timer1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_TIMER_EVENT_COMPARE0&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;nrf_saadc_task_address_get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NRF_SAADC&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_SAADC_TASK_SAMPLE&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;and second channel&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;nrfx_timer_extended_compare(&amp;amp;timer2,&amp;nbsp;NRF_TIMER_CC_CHANNEL1,&amp;nbsp;1min_ticks,&amp;nbsp;NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK,&amp;nbsp;true);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;nrfx_gppi_channel_endpoints_setup&lt;/span&gt;&lt;span&gt;(ppi_&lt;/span&gt;&lt;span&gt;channel2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;nrfx_timer_event_address_get&lt;/span&gt;&lt;span&gt;(&amp;amp;&lt;/span&gt;&lt;span&gt;timer2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_TIMER_EVENT_COMPARE1&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;nrf_saadc_task_address_get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NRF_SAADC&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;NRF_SAADC_TASK_SAMPLE&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;How do I know which adc channel is connected to ppi_channel1? Or, all adc channels are connected to all ppi channels.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrfx_saadc library simple mode and advanced mode</title><link>https://devzone.nordicsemi.com/thread/441664?ContentTypeID=1</link><pubDate>Wed, 16 Aug 2023 14:10:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:aac45cea-a268-489d-8c06-b63587802873</guid><dc:creator>Jared</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user=""]Can I setup a second adc channel with a different timer?&amp;nbsp;[/quote]
&lt;p&gt;Yes, just initialize a new timer and setup PPI on a new channel for that timer. Note that triggering a SAMPLE task will sample all enabled channels.&lt;/p&gt;
[quote user=""]In the first channel I use &amp;quot;nrfx_saadc_advanced_mode_set&amp;quot;, can I use&amp;nbsp;nrfx_saadc_simple_mode_set for the second channel?&amp;nbsp;[/quote]
&lt;p&gt;No, you can only use one mode each time you initialize driver,&lt;/p&gt;
&lt;p&gt;regards&lt;/p&gt;
&lt;p&gt;Jared&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>