<?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=11345&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-10T17:02:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=11345&amp;mode</id>
<entry>
<author><name><![CDATA[m@ciej]]></name></author>
<updated>2015-04-10T17:02:37+01:00</updated>
<published>2015-04-10T17:02:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11345&amp;p=126155#p126155</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11345&amp;p=126155#p126155"/>
<title type="html"><![CDATA[Xmega ADC nie działa bez trybu FreeRun]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11345&amp;p=126155#p126155"><![CDATA[
Witam.<br /><br />Po uruchomieniu z powodzeniem wielokanałowego odczytu na Atmegach, spróbowałem swoich sił na Xmega. Napisałem taki oto kod:<br />[syntax=c]//Program dla układu: Test dla wielokanałowego ADC<br />//Procesor: AtXmega128A4U-U<br />//Częstotliwośc zegara: 32MHz (16MHZ Xtal, x2PLL)<br />//Autor: MaS<br />//Data ostatniej kompilacji: 10 kwi 2015<br /><br />#include &lt;avr/io.h&gt;<br /><br />uint16_t bufor&#91;9&#93;;<br />uint8_t adclicz;<br /><br />void ustaw_zegar(void) // Konfiguracja zegara systemowego<br />{<br />OSC.XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_256CLK_gc; //zakres częstotliwości i wybór źródła jako kwarc<br />OSC.CTRL |= OSC_XOSCEN_bm; //włącz kwarc<br />while (!(OSC.STATUS &amp; OSC_XOSCRDY_bm))<br />; //czekaj dopóki kwarc nie wystartuje<br />OSC.PLLCTRL |= OSC_PLLSRC_XOSC_gc | (OSC_PLLFAC_gm &amp; 2); //pll taktowany z układu XOSC, ustawiamy mnożnik<br />OSC.CTRL |= OSC_PLLEN_bm; //włącz PLL<br />while (!(OSC.STATUS &amp; OSC_PLLRDY_bm))<br />; //czekaj dopóki PLL nie wystartuje<br />CCP = CCP_IOREG_gc; //zezwól na modyfikację rejestrów chronionych i potem wybierz PLL<br />CLK.CTRL = CLK_SCLKSEL_PLL_gc; //wybierz PLL<br />}<br /><br />void ustaw_porty(void) //konfiguracja portów<br />{<br />PORTA.DIRCLR = PIN0_bm; //PA.0 jako wejście dla P7<br />PORTA.DIRCLR = PIN1_bm; //PA.1 jako wejście dla P8<br />PORTA.DIRCLR = PIN2_bm; //PA.2 jako wejście dla P9<br />PORTA.DIRCLR = PIN3_bm; //PA.3 jako wejście dla P6<br />PORTA.DIRCLR = PIN4_bm; //PA.4 jako wejście dla P5<br />PORTA.DIRCLR = PIN5_bm; //PA.5 jako wejście dla P4<br />PORTA.DIRCLR = PIN6_bm; //PA.6 jako wejście dla P3<br />PORTA.DIRCLR = PIN7_bm; //PA.7 jako wejście dla P2<br />PORTB.DIRCLR = PIN0_bm; //PB.0 jako wejście dla P1<br />}<br /><br />void ustaw_ADC(void) {<br />    ADCA.CTRLA = ADC_ENABLE_bm;//enable ADC<br /> ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;//tryb 12 bit<br />    ADCA.REFCTRL = ADC_REFSEL_VCC_gc | 0x02;// Internal VCC / 1.6<br /> ADCA.PRESCALER = ADC_PRESCALER_DIV256_gc;//prescaler 256, f=125kH z<br />// ADCA.CTRLB = ADC_FREERUN_bm;<br />    ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN8_gc; // PORTB.0 (n.4)<br /> ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc; // single ended<br /> ADCA.CH0.CTRL |= ADC_CH_START_bm; // start conversion on channel x<br />}<br /><br />int main(void)<br />{<br />ustaw_zegar();<br />ustaw_porty();<br />ustaw_ADC();<br />while(1)<br />{<br />if(bit_is_set(ADCA.CH0.INTFLAGS,0))<br />{<br />bufor&#91;adclicz&#93;=ADCA.CH0RES; //odczyt danych z rejestru do bufora<br />adclicz +=1; //zwiekszenie licznika o 1<br />if(adclicz==7) adclicz=0; //blokada przekroczenia zakresu<br />ADCA.CH0.MUXCTRL=(ADCA.CH0.MUXCTRL &amp; 0b10000111)|adclicz; //przestawienie multipleksera na następną pozycję<br />ADCA.CH0.INTFLAGS = 0; //zerowanie flagę, by dokonać następnego pomiaru<br />}<br />}<br />}[/syntax]<br /><br />lecz nie działa mi po wyłączeniu trybu FreeRun (tak jak w kodzie, linijka &quot;zaremowana&quot;), a pod FreeRun odczyty są niestabilne, gdyż przełączanie kanałów w tym trybie kiepsko wychodzi, stąd chcę zastosować tryb &quot;ręcznego&quot; uruchamiania, ale nie chce to działać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7141">m@ciej</a> — 10 kwi 2015, o 17:02</p><hr />
]]></content>
</entry>
</feed>