forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Vícekanálově čtení ADC

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM
 
muliku
Anonymní





PříspěvekZaslal: 06 květen 2015, 18:11    Předmět: Vícekanálově čtení ADC Citovat

Ahoj, píšu program na STM32F0, kde obsluhuji dva senzory (konkrétně na plyny CO a CO2), tudíž potřebuji dva kanály ADC. Vybral jsem si kanál 1 a 4. V mainu mám pouze volání dvou funkcí v nekonečné smyčce:
kód:

while(1){
  ZmerCO();
  ZmerCO2();      
}   

void ZmerCO()
   {double ADC1ConvertedValue;
      ADC1->CHSELR |= ADC_CHSELR_CHSEL1;
//AD převod a posílání hodnoty na usart
}

void ZmerCO2()
{double ADC1ConvertedValue;
      ADC1->CHSELR |= ADC_CHSELR_CHSEL4;
//AD převod a posílání hodnoty na usart
}


Vždy na začátku funkce změním kanál pomocí ADC1->CHSELR |= ADC_CHSELR_CHSELx; a pak hodnotu z ADC1 pošlu na USART a na hyperterminal.
Když zakomentuju jednu z těchto dvou funkcí, program normálně běží (v pokojových podmínkách CO hází hodnotu okolo 800 a CO2 okolo 1000 a tyto hodnoty jsou konstatní pokud do senzoru nefouknu nebo něco.....).
Ovšem když nechám obě funkce nezakomentované a měřím oba plyny najednou, hyperterminal začne vypisovat nejpodivnější čísla. Například hodnota CO je v jednom měření 700 a hned v dalším 2500 a pak zase třeba 1400. To samé platí pro CO2.

Vím, že toto řešení je primitivní, že bych to měl dělat přes přerušení nebo DMA, ale když už to mám takle, nevíte někdo v čem by mohl být problém? Podle mě procesor nějak nezvládá přepínat kanály, ale proč?

Díky předem za případné odpovědi
Návrat nahoru
 

 
muliku
Anonymní





PříspěvekZaslal: 06 květen 2015, 18:22    Předmět: Citovat

Ještě pro doplnění, ADC1 konfigurace:

kód:
void ADC1_Configuration(void)
{
  ADC_InitTypeDef ADC_InitStructure;
 
  /* ADC1 DeInit */
  ADC_DeInit(ADC1);
 
  /* ADC1 Periph clock enable */
RCC->APB2ENR |= (1<<9);
 
  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);
 
  /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits  */
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  ADC_Init(ADC1, &ADC_InitStructure);
 

 
  /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
 
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);
 
  /* Wait the ADCEN falg */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
 
  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
}
Návrat nahoru
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 718

PříspěvekZaslal: 06 květen 2015, 19:35    Předmět: Citovat

Řekl bych, že je to proto, že :
kód:
while(1){
  ZmerCO(); // Nastavíš kanál 1 a měříš
  ZmerCO2(); // Nastavíš kanál 5 a měříš.
// Od této chvíle už měříš trvale na kanálu 5 ...
}   

void ZmerCO()
   {double ADC1ConvertedValue;
      ADC1->CHSELR |= ADC_CHSELR_CHSEL1;
//AD převod a posílání hodnoty na usart
}

void ZmerCO2()
{double ADC1ConvertedValue;
      ADC1->CHSELR |= ADC_CHSELR_CHSEL4;
//AD převod a posílání hodnoty na usart
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> ARM Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)