<div dir="ltr">DD, <div>dekuji ze jste me na to se donutil podivat:-)<br><div>hodnota je vicemene spravna ;-)  ADC_Channel_2, ADC_Channel_3 atp....  ALE:</div><div>knihovni fce ADC_ChannelConfig() dela s tim registrem OR a nikde jej nenuluje, takze vy vysledku jsou tam v mem pripade nastaveny 4 bity. Nevite nekdo proc? </div><div>(kdyz tam dam proste prirazeni, tak (se zda) vse funguje jak ma)</div><div><br></div><div>Zde ta fce:</div><div><br></div><div><div>void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime)</div><div>{</div><div>  uint32_t tmpreg = 0;</div><div><br></div><div>  /* Check the parameters */</div><div>  assert_param(IS_ADC_ALL_PERIPH(ADCx));</div><div>  assert_param(IS_ADC_CHANNEL(ADC_Channel));</div><div>  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));</div><div><br></div><div>  /* Configure the ADC Channel */</div><div>  ADCx->CHSELR |= (uint32_t)ADC_Channel;  //this seems to be inccorrect for multiple channel single conversion reading</div><div>//ADCx->CHSELR = (uint32_t)ADC_Channel;   //this seems to be correct (!?)</div><div><br></div><div>  /* Clear the Sampling time Selection bits */</div><div>  tmpreg &= ~ADC_SMPR1_SMPR;   </div><div><br></div><div>  /* Set the ADC Sampling Time register */</div><div>  tmpreg |= (uint32_t)ADC_SampleTime;</div><div><br></div><div>  /* Configure the ADC Sample time register */</div><div>  ADCx->SMPR = tmpreg ;</div><div>}</div></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-12-08 7:48 GMT+01:00 Jan Waclawek <span dir="ltr"><<a href="mailto:konfera@efton.sk" target="_blank">konfera@efton.sk</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Aka je hodnota ADC_CHSELR?<br>
<br>
wek<br>
<div><div class="h5"><br>
----- Original Message ---------------<br>
>DD,<br>
>mam potize ze zprovoznenim ADC na STM32f042. Postupne ctu 4 vstupy<br>
>(2*Externi vstup, 2*Interni). Zrejme je nejaka potiz v casovani nebo<br>
>kontroluji spatne bity pro konec konverze(?) nebot pri cteni kanaly<br>
>vzajemne obcas "preskakuji" (tj. co mam na jednom vstupu ctu najednou na<br>
>jinem).<br>
>Nize prikladam kod, jestli by si nekdo nevsiml kde je chyba.<br>
>(pozn: vsechny priklady pro single conversion od ST (pro std lib) ctou<br>
>opakovane jen jeden vstup)<br>
>Dekuji, T.M.<br>
><br>
>//*** ADC initialisaion ****************<br>
>static void ADC_Config(void)<br>
>{<br>
>  ADC_InitTypeDef     ADC_InitStructure;<br>
>  GPIO_InitTypeDef    GPIO_InitStructure;<br>
><br>
>  /* GPIOC Periph clock enable */<br>
>  RCC_AHBPeriphClockCmd(RCC_<wbr>AHBPeriph_GPIOA, ENABLE);<br>
><br>
>  /* ADC1 Periph clock enable */<br>
>  RCC_APB2PeriphClockCmd(RCC_<wbr>APB2Periph_ADC1, ENABLE);<br>
><br>
>  /* Configure ADC Channels as analog input */<br>
>  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;<br>
>  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;<br>
>  GPIO_InitStructure.GPIO_Pin = SIGN_EA;  //PA3, GPIO_Pin_3, ADC_Channel_3<br>
>  GPIO_Init(SIGP_EA, &GPIO_InitStructure);<br>
>  /* Configure ADC Channels as analog input */<br>
>  GPIO_InitStructure.GPIO_Pin = SIGN_EB;  //PA2, GPIO_Pin_2, ADC_Channel_2<br>
>  GPIO_Init(SIGP_EB, &GPIO_InitStructure);<br>
>  /* Configure ADC Channels as analog input */<br>
>  GPIO_InitStructure.GPIO_Pin = SIGN_AI0;  //PB0, Nastavo jako AI, neni<br>
>cteno<br>
>  GPIO_Init(SIGP_AI0, &GPIO_InitStructure);<br>
>  /* Configure ADC Channels as analog input */<br>
>  GPIO_InitStructure.GPIO_Pin = SIGN_AI1;  //PB1, Nastavo jako AI, neni<br>
>cteno<br>
>  GPIO_Init(SIGP_AI1, &GPIO_InitStructure);<br>
><br>
>  /* ADCs DeInit */<br>
>  ADC_DeInit(ADC1);<br>
><br>
>  /* Initialize ADC structure */<br>
>  ADC_StructInit(&ADC_<wbr>InitStructure);<br>
>  ADC_ClockModeConfig(ADC1,ADC_<wbr>ClockMode_AsynClk);<br>
>  ADC_AutoPowerOffCmd(ADC1,<wbr>DISABLE);<br>
>  /* Configure the ADC1 in continuous mode with a resolution equal to 12<br>
>bits  */<br>
>  ADC_InitStructure.ADC_<wbr>Resolution = ADC_Resolution_12b;<br>
>  ADC_InitStructure.ADC_<wbr>ContinuousConvMode = DISABLE;<br>
>  ADC_InitStructure.ADC_<wbr>ExternalTrigConvEdge =<br>
>ADC_ExternalTrigConvEdge_<wbr>None;<br>
>  ADC_InitStructure.ADC_<wbr>DataAlign = ADC_DataAlign_Right;<br>
>  ADC_InitStructure.ADC_<wbr>ScanDirection = ADC_ScanDirection_Upward;<br>
>  ADC_Init(ADC1, &ADC_InitStructure);<br>
><br>
>  /* ADC Calibration */<br>
>  ADC_GetCalibrationFactor(ADC1)<wbr>;<br>
><br>
>  /* Enable the ADC peripheral */<br>
>  ADC_Cmd(ADC1, ENABLE);<br>
><br>
>  /* Wait the ADRDY flag */<br>
>  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));<br>
><br>
><br>
>  /* Enable VREF_INT & Temperature channel */<br>
>  ADC_ChannelConfig(ADC1, ADC_Channel_TempSensor ,<br>
>ADC_SampleTime_55_5Cycles);<br>
>  ADC_TempSensorCmd(ENABLE);<br>
>  ADC_ChannelConfig(ADC1, ADC_Channel_Vrefint , ADC_SampleTime_55_5Cycles);<br>
>  ADC_VrefintCmd(ENABLE);<br>
>}<br>
><br>
>//*** read ADCinput <channel>  ***********<br>
>uint16_t adc_read(ADC_TypeDef* ADCx, uint32_t channel, uint32_t<br>
>ADC_SampleTime) {<br>
><br>
> /* Configure Channel */<br>
> ADC_ChannelConfig(ADCx, channel, ADC_SampleTime);<br>
><br>
> /* check if conversion was started, if not start */<br>
> ADC_StartOfConversion(ADCx);<br>
><br>
> /* wait for end of conversion */<br>
> while((ADC_GetFlagStatus(ADCx, ADC_FLAG_EOC) == RESET));<br>
><br>
> return ADC_GetConversionValue(ADCx);<br>
><br>
>}<br>
><br>
><br>
>#define ADCSAMPLETIME ADC_SampleTime_28_5Cycles<br>
><br>
>//****** ....main loop:  ****************************<br>
>....<br>
>a = adc_read(ADC1, ADC_Channel_17, ADCSAMPLETIME); //vref voltage<br>
>b = adc_read(ADC1,ADC_Channel_16,<wbr>ADCSAMPLETIME); //internal temperature<br>
>c = adc_read(ADC1,SIGA_EB,<wbr>ADCSAMPLETIME); //analog in, ADC_Channel_2<br>
>d = adc_read(ADC1,SIGA_EA,<wbr>ADCSAMPLETIME); //analog in, ADC_Channel_3<br>
>.....<br>
<br>
</div></div>______________________________<wbr>_________________<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">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/<wbr>listinfo/hw-list</a><br>
</blockquote></div><br></div>