Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: muhittin_kaplan - 06 Ocak 2017, 19:50:26

Başlık: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 06 Ocak 2017, 19:50:26
Cubemx kullanarak tek kanal okuma yaptim.
Dma kullanmadan  single conv, multichannel (cok kanal tek cevrim) yapamadim.

Nasil yapilir ?
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: fatal16 - 06 Ocak 2017, 21:22:00
Hocam Stm8'lerde aşağıdaki gibi. Stm32'lerde de bu şekilde olabilir.

Alıntı yapılan: fatal16 - 18 Aralık 2016, 16:08:46
channel1 seçin, adc açın, çevrimi başlatın, okuma yapın, adc kapatın,
channel2 seçin, adc açın, çevrimi başlatın, okuma yapın, adc kapatın.
.
.
.
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 06 Ocak 2017, 23:15:43
Çok kanallı okumada DMA kullanmayacaksan, çevrim hızını ve ADC saat hızını iyice düşürmen gerek. Aksi durumda üst üste yazma sorunu ortaya çıkıyor ve ADC hataya düşüyor.
STM32'de DMA'sız Çok kanal ADC okumayı önermem.
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 07 Ocak 2017, 00:56:46
Hocam, iki kanal okuyacagim. Ama yapamadim. Problem hiz felan degil. Birturlu okuyamadim
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 07 Ocak 2017, 01:18:28
Alıntı yapılan: muhittin_kaplan - 07 Ocak 2017, 00:56:46
Hocam, iki kanal okuyacagim. Ama yapamadim. Problem hiz felan degil. Birturlu okuyamadim
Hiç mi okuyamıyorsun?
ilk kanalı bir kez okuyup ondan sonra bir daha okuyamıyor musun?
Şimdi SR registerindeki bitin  adını hatırlamıyorum ama OV yada OVR isimli bir bit olacaktı. Onu bi kontrol et. Override biti.

Hal kütüphanesini pek tanımıyorum ama, init kodlarını yayımlarsan, atladığın bir şey olup olmadığını kontrol etmeye çalışırım.
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 07 Ocak 2017, 16:05:13
hallettim hocam. CubeMx ile hazırldıktan sonra aşağıdaki gibi çözdüm olayı.

  int readADC(char channel){
    int adcTemp=0;
ADC_ChannelConfTypeDef sConfig;
sConfig.Channel = channel;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_84CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
  Error_Handler();
}

HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,50);
adcTemp=(HAL_ADC_GetValue(&hadc1));
HAL_ADC_Stop(&hadc1);
return (adcTemp);


  }


  AdcValue1=readADC(ADC_CHANNEL_1);
  AdcValue2=readADC(ADC_CHANNEL_2);

[/code]
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 07 Ocak 2017, 16:46:34
Aslinda multichannel single conv. Olmuyor sanirim. Cunki her cevrimde tek kanal okuyorum.

Adc modlari nelerdir ? Nerelerde kullanirim ?
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 07 Ocak 2017, 17:58:41
Aslında çok kanalı okuyorsun. Tek tek ama çok kanal.
Yapmak istediğin single conversion, scan mode, multichannel şeklinde okuma mı?
Çevirimi bir kez başlatmak ve  tüm kanallar okunana kadar çevirimi durdurmamak mı istiyorsun?
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 07 Ocak 2017, 18:10:42
aynen hocam, ama bunu dma yada int kullanmadan yapmayı istedim (he mantıklımı belki değil)

http://www.st.com/content/ccc/resource/technical/document/application_note/c4/63/a9/f4/ae/f2/48/5d/CD00258017.pdf/files/CD00258017.pdf/jcr:content/translations/en.CD00258017.pdf

1.2 Multichannel (scan), single conversion mode vermiş. (muhtemelen EOC yi ayarlamam lazım. bunun içinde en iyi ihtimal int olur.)
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 07 Ocak 2017, 18:51:18
Scan modda DMA ya da Interrupt kullanmamanın akıllıca olmadığını söylemem gerek. Çok başını ağrıtır. DMA kanalını başka iş için kullanıyorsan sözüm yok. Ama başka işe kullanmıyorsan, DMA kullanımından kaçmak çok anlamlı değil. Daha önceki denemelerimde, bazı durumlarda kesmede dahi sorun yaşadığım oldu. DMA harici kullanımı önermem.  4 kanala kadar kullanımda , regular kanallar yerine injected kanalları kullanabilirsin. Hem DMA'ya hem de kesmeye ihtiyacın olmaz.
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 07 Ocak 2017, 22:56:08
https://www.picproje.org/index.php/topic,68158.msg523949.html#msg523949
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Cemre. - 07 Ocak 2017, 23:33:56
Alıntı yapılan: Klein - 07 Ocak 2017, 18:51:18
Scan modda DMA ya da Interrupt kullanmamanın akıllıca olmadığını söylemem gerek. Çok başını ağrıtır. DMA kanalını başka iş için kullanıyorsan sözüm yok. Ama başka işe kullanmıyorsan, DMA kullanımından kaçmak çok anlamlı değil. Daha önceki denemelerimde, bazı durumlarda kesmede dahi sorun yaşadığım oldu. DMA harici kullanımı önermem.  4 kanala kadar kullanımda , regular kanallar yerine injected kanalları kullanabilirsin. Hem DMA'ya hem de kesmeye ihtiyacın olmaz.

injected mode ile ilgili daha fazla bilgi verebilir misiniz hocam? @Klein
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 08 Ocak 2017, 10:14:08
Regular kanallarda ADC çevriminin sonucu hep aynı registere yazılır.
injected kanallarda ise her kanalın verisi kendi registerine yazılır. 4 kanal injected olarak kullanılabilir.
Ayarları regular kanal ayarlarından  çok farklı değil. 
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: muhittin_kaplan - 08 Ocak 2017, 14:51:36
Yukarda verdigim dokumanda hepsi geciyor @Cemre. Hocam
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Cemre. - 08 Ocak 2017, 23:05:16
@Klein @muhittin_kaplan ayri ayri teşekkürler.

Dokümanda injected için olay tetiklemeli çevrim şeklinde bahsedilmiş @Klein hocam, farkli bir şeyden mi bahsediyoruz yoksa ayrıca bu özellik de mi var.
Başlık: Ynt: STM32f4 Hal Adc Multichannel
Gönderen: Klein - 08 Ocak 2017, 23:11:35
ADC çevirimi bir çok şekilde tetiklenebiliyor. Injected kanalların çevirimi DMA ile tetiklenemiyor ( Emin değilim öyle hatırlıyorum). Olaylarla da tetikleniyor olabilir. Farklı şeylerden bahsettiğimiz sanmıyorum.