STM32CubeIDE - obsluha vice kanalu ADC

Marek Sembol hwm.land na gmail.com
Pondělí Listopad 1 17:34:29 CET 2021


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.
BR,
Marek

On Mon, Nov 1, 2021 at 4:51 PM Fanda Kopriva <info na elektronikavyvoj.cz>
wrote:

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


Další informace o konferenci Hw-list