<div dir="ltr">BEZ ZARUKY: muslim, ze to funguje tak, ze po Start musite dat postupne (tolik krat kolik mate tech kanalu) Pool a GetValue. Ony budou vracet postupne z jednotlivych kanalu.<div>BR,</div><div>Marek</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 1, 2021 at 4:51 PM Fanda Kopriva <<a href="mailto:info@elektronikavyvoj.cz">info@elektronikavyvoj.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">dobry den<br>
nevim jestli Vam to pomuze ,ale tady mam treba obsluhu ADC ze starsiho <br>
projektu s stm32l162<br>
nastavi se az 4 kanaly pro konverze ADC_JSQR =<br>
a vysledky jsou v ADC_JDR1 - 4<br>
<br>
void ADCfce (void)<br>
{<br>
unsigned int timout;<br>
ADerror = 0;<br>
RCC_APB2ENR |= 0x200; //ad<br>
RCC_CR |= 0x1;<br>
timout = 0;<br>
while (!((RCC_CR & 0x2) || (timout>1000))){timout++;};<br>
if (timout>1000) ADerror |= 1;<br>
ADC_CCR = 0x820000; //hsi/4<br>
ADC_CR2 &= ~0x1; // zakaz adc<br>
ADC_CR1 = 0x30100;// scan<br>
ADC_JSQR = 0x381508; // 3kanaly temp16 5vin 8vin <br>
8vin1 10000 00101 01000 01000<br>
ADC_SMPR2 = 0x100000;<br>
ADC_CR2 |= 0x1; // zapni adc<br>
while (!(((ADC_SR & 0x240) == 0x40 ) || <br>
(timout>1000))){timout++;};<br>
if (timout>1000) ADerror |= 4;<br>
timout = 0;<br>
ADC_CR2 |= 0x400000; //start converze inject vysledek v <br>
ADC_JDR3 2 1<br>
while (!((ADC_SR & 0x4) || (timout>1000))){timout++;};<br>
if (timout>1000) ADerror |= 2;<br>
vpom = ADC_JDR4; vpom = ((vpom * 50) / 141) - 173 ;<br>
vtep = vpom ; //<br>
vpom = ADC_JDR3; battest=vpom;vpom = (vpom * 424) / 234; <br>
//191mV = 234 U = (4.24 / 234) * x<br>
vbat = vpom ; //2680 324 > 420<br>
vpom = ADC_JDR2; vintest=vpom;vpom = (vpom * 237) >> 8; <br>
//vpom = (vpom * 22) / 25; //*92/100 925/1000 947/1024<br>
vin = vpom ; //660 362 > 500 <br>
480 na 4.8V >> 1000 na 10V<br>
vpom = ADC_JDR1; vpom = (vpom * 22) / 25;<br>
vin1 = vpom ; //660 362 > 500<br>
}<br>
<br>
fanda<br>
<br>
<br>
Dne 01.11.2021 v 15:57 Pavel Kutina napsal(a):<br>
> Zdravím,<br>
><br>
> tak pořád nějak válčím s Cube a teď jsem se zaseknul zase trochu <br>
> hlouběji:<br>
><br>
> Potřebuji měři na čtyřech kanálech ADC.<br>
> V klikátoru je mám nastavené na ADC1 (je to STM32L471VGT) jako <br>
> ADC1_IN1 na PC0 až ADC1_4 na PC4.<br>
><br>
> Rád bych vyčítal každý kanál "ručně", zatím nechci DMA, snažím se to <br>
> rozbíhat po kouskách a vzhledem k mým (ne)vědomostem začátečníka to <br>
> chci řešit postupně. Ale jak to nakonfigurovat?<br>
><br>
> V předgenerovaném kódu mám teď tohle, ale jak na jednotlivé kanály <br>
> přistupovat, resp. jak z nich číst? V DMA režimu to snad napadá do <br>
> pole, do kterého to vyčítám, ale bez DMA? Zjevně mi někde něco uniká, <br>
> googlováním jsem strávil podstatnou část odpoledne, buď nevím, co <br>
> hledám, nebo to bez DMA nejde?<br>
><br>
> V hlavní smyčce mám teď jenom tohle, ale rád bych nějaké hodnoty i do <br>
> ADCval2 ... 4<br>
><br>
> Díky za každé nasměrování.<br>
><br>
> Pavel Kutina<br>
><br>
><br>
><br>
> //------------------------------------------------------------------<br>
> HAL_ADC_Start(&hadc1);<br>
> HAL_ADC_PollForConversion(&hadc1, 0xFFFFFFFF);<br>
><br>
> ADCval1 = HAL_ADC_GetValue(&hadc1);<br>
> ADCval2 = ?<br>
><br>
><br>
> V inicializaci:<br>
> //------------------------------------------------------------------<br>
><br>
> /** Configure Regular Channel<br>
> */<br>
> sConfig.Channel = ADC_CHANNEL_1;<br>
> sConfig.Rank = ADC_REGULAR_RANK_1;<br>
> sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;<br>
> sConfig.SingleDiff = ADC_SINGLE_ENDED;<br>
> sConfig.OffsetNumber = ADC_OFFSET_NONE;<br>
> sConfig.Offset = 0;<br>
> if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)<br>
> {<br>
> Error_Handler();<br>
> }<br>
><br>
> sConfig.Channel = ADC_CHANNEL_2;<br>
> if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)<br>
> {<br>
> Error_Handler();<br>
> }<br>
><br>
> sConfig.Channel = ADC_CHANNEL_3;<br>
> if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)<br>
> {<br>
> Error_Handler();<br>
> }<br>
><br>
> sConfig.Channel = ADC_CHANNEL_4;<br>
> if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)<br>
> {<br>
> Error_Handler();<br>
> }<br>
><br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
> <a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
> <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
<br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" rel="noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote></div>