<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=8&amp;t=4691&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-07T10:30:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=4691&amp;mode</id>
<entry>
<author><name><![CDATA[beret82]]></name></author>
<updated>2013-11-07T10:30:24+01:00</updated>
<published>2013-11-07T10:30:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55703#p55703</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55703#p55703"/>
<title type="html"><![CDATA[Re: Xmega128A3U]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55703#p55703"><![CDATA[
Kodu dokładnie nie sprawdzałem, ale w Xmegach trzeba załadować wartość &quot;kalibracyjną&quot; przed startem ADC. Tego w kodzie nie widzę.<br />Jest to opisane w dokumencie AVR1300.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=733">beret82</a> — 7 lis 2013, o 10:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grabki]]></name></author>
<updated>2013-11-06T19:13:04+01:00</updated>
<published>2013-11-06T19:13:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55655#p55655</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55655#p55655"/>
<title type="html"><![CDATA[Xmega128A3U]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4691&amp;p=55655#p55655"><![CDATA[
Witajcie,<br />bardzo Was proszę o pomoc. Mam problem z ADC w mikrokontrolerze Xmega. Muszę co 5ms dokonać pomiaru wszystkich 16 wejść. Niestety nie ogarniam jeszcze Xmeg, ale jakoś cały program sobie napisałem, poza właśnie ADC. Z tego co udało mi się zrozumieć, to chcę użyć trybu single ended. Jednak mam problem z inicjalizacją. O to co udało mi się stworzyć:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADCA.CTRLB=ADC_RESOLUTION_8BIT_gc; //tryb 8 bit</div> (analogicznie dla ADCB)<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADCA.REFCTRL=ADC_REFSEL_VCC_gc;   //napięcie odniesienia to VCC/1,6</div><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADCA.PRESCALER=ADC_PRESCALER_DIV256_gc;   //prescaler 256</div>co przy taktowaniu 32MHz powinno mi dać 125kHz<br /><br />Niestety nie wiem co dalej...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 32 minutach ]</span></strong><br /><br />Udało mi się na podstawie zebranych informacji napisać taką funkcję inicjalizacyjną:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">void ADC_init(void)<br />{<br />   ADCA.CTRLB = ADC_RESOLUTION_8BIT_gc;   //tryb 8 bit<br />   ADCA.REFCTRL = ADC_REFSEL_VCC_gc | 0x02;   /* Internal VCC / 1.6 */   //| 0x02;<br />   ADCA.PRESCALER = ADC_PRESCALER_DIV256_gc;   //prescaler 256, f=125kHz<br />   ADCA.CTRLA |= ADC_ENABLE_bm;   //enable ADC<br />   <br />   ADCB.CTRLB = ADC_RESOLUTION_8BIT_gc;   //tryb 8 bit<br />   ADCB.REFCTRL = ADC_REFSEL_VCC_gc | 0x02;   /* Internal VCC / 1.6 */   //| 0x02;<br />   ADCB.PRESCALER = ADC_PRESCALER_DIV256_gc;   //prescaler 256, f=125kHz<br />   ADCB.CTRLA |= ADC_ENABLE_bm;   //enable ADC<br />}</div><br /><br />Oraz taką funkcję odczytu(trzeba będzie zrobić drugą identyczną, tylko, że dla pinów 4-7 oraz 12-15):<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">void ADC_odczyt1(void)<br />{<br />   ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;    // single ended<br />   ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;    // PORTA:0<br />   <br />   ADCA.CH1.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCA.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc;<br />   <br />   ADCA.CH2.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCA.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN2_gc;<br />   <br />   ADCA.CH3.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCA.CH3.MUXCTRL = ADC_CH_MUXPOS_PIN3_gc;   <br />   <br />   ADCA.CH0.CTRL |= ADC_CH_START_bm; // start conversion on channel 0<br />   ADCA.CH1.CTRL |= ADC_CH_START_bm;<br />   ADCA.CH2.CTRL |= ADC_CH_START_bm;<br />   ADCA.CH3.CTRL |= ADC_CH_START_bm;<br />   <br />   <br />   ADCB.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;    // single ended<br />   ADCB.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN8_gc;    // PORTA:0<br />   <br />   ADCB.CH1.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCB.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN9_gc;<br />   <br />   ADCB.CH2.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCB.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN10_gc;<br />   <br />   ADCB.CH3.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;<br />   ADCB.CH3.MUXCTRL = ADC_CH_MUXPOS_PIN11_gc;<br />   <br />   ADCB.CH0.CTRL |= ADC_CH_START_bm; // start conversion on channel 0<br />   ADCB.CH1.CTRL |= ADC_CH_START_bm;<br />   ADCB.CH2.CTRL |= ADC_CH_START_bm;<br />   ADCB.CH3.CTRL |= ADC_CH_START_bm;<br />   <br />   while((!ADCA.CH0.INTFLAGS) &amp;&amp; (!ADCA.CH1.INTFLAGS) &amp;&amp; (!ADCA.CH2.INTFLAGS) &amp;&amp; (!ADCA.CH3.INTFLAGS));<br />   while((!ADCB.CH0.INTFLAGS) &amp;&amp; (!ADCB.CH1.INTFLAGS) &amp;&amp; (!ADCB.CH2.INTFLAGS) &amp;&amp; (!ADCB.CH3.INTFLAGS));<br /><br />//odczytanie wartości: Result = ADCA.CH0RES; i analogicznie dla kanału 1,2 i 3 oraz z ADCB<br />   <br />}</div><br />Bardzo proszę o sprawdzenie kodu, przez kogoś kto już maił styczność z Xmegami. Czy dobrze rozumiem, że mogę jednocześnie dokonywać pomiaru na 4 kanałach ADCA i 4 kanałach ADCB?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=439">Grabki</a> — 6 lis 2013, o 19:13</p><hr />
]]></content>
</entry>
</feed>