STM8 ADC Çoklu kanal Rank Ayarı nasıl?

Başlatan Mucit23, 07 Eylül 2019, 19:12:41

Mucit23

Selamlar

STM8S103F3 çipiyle 2 kanal ADC okumam lazım. D2 ve D3 yani Channel3 ve Channel4 pin olarak müsait. Bu iki girişten   Continious modda örnek almak istiyorum. Hazır birkaç örnek buldum.

Bulduğum örnekleri denedim.
void ADC1_Extinit(void){

  GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
  GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT); 


ADC1_DeInit();

// Single conversion mode, up to channel 7 (see scan mode below)

 ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, 

ADC1_CHANNEL_7, ADC1_PRESSEL_FCPU_D2, 

ADC1_EXTTRIG_TIM, DISABLE, 

ADC1_ALIGN_RIGHT, 

ADC1_SCHMITTTRIG_ALL, DISABLE);

// Scan mode from channel 0 to 7 (as defined in ADC1_Init)

ADC1_ScanModeCmd(ENABLE);

// Enable the ADC: 1 -> ADON for the first time it just wakes the ADC up

ADC1_Cmd(ENABLE);
}

ADC ayarlarını biraz anladım gibi Fakat rank ve kanal ayarlarını nasıl yapacağımı çözemedim. Bu örnekte Single modda 8 kanal taranıyor. GPIO lardan ben sadece D2 ve D3'ü kullanacağım için bu iki girişi analog moda aldım.

Okurken aşağıdaki gibi okuyorum

      ADC1_StartConversion();
      while ( ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET );

      for (i=0; i<8; i++)
         adcval = (unsigned int)ADC1_GetBufferValue(i); // 10 bit
      ADC1_ClearFlag(ADC1_FLAG_EOC);

Kodu çalıştırdığımda adcval[3] ve adcval[4] değerleri benim girişlerime ait ADC değerlerinden oluşuyor. Debugda bunu görebiliyorum. Fakat diğer değerler float yani rastgele değişiyor. Bana lazım değil zaten ama Kanal 3 ve Kanal 4'ü nasıl Buffer 0 ve Buffer 1'e ayarlayacağım çözemedim. Manual'de çoklu kanal anlatılmış ama şu rank olayını anlayamadım.

Daha önce deneyen oldumu bunu?

devrecii

İlgili kanalın ilgili hafızası var oraya yazıyor, değişmiyor yani. Bir de  çoklu adc okumasında eğer adc reg 5 ayarlarsan mecburren 0 dan 5 e kadar tarıyor sadece 3..5 kanal olsun diyemiyorsun.
Tabi manuel olarak mümkün kendin tek tek istediğin kanalı okuyabilirsin.