Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: Analog - 06 Mart 2018, 00:14:44

Başlık: ADC uygulama hatası
Gönderen: Analog - 06 Mart 2018, 00:14:44
Herkese merhaba
Paylaştığım kodda ADC uygulamasını gerçekleştirmek istedim ama kullandığım kartta (stm32f429) çıkış alamıyorum. İnceleyip hatamı gösterirseniz sevinirim. Şimdiden teşekkürler
#include "stm32f4xx.h"                  // Device header

uint16_t Read_ADC(void)
{
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_56Cycles);
ADC_SoftwareStartConv(ADC1);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
return ADC_GetConversionValue(ADC1);
}

long map( long x, long in_min, long in_max, long out_min, long out_max)
{
return (x-in_min)*(out_max-out_min)/(in_max-in_min)+out_min;
}

int main(void)
{
uint16_t adc_data;
uint16_t adc_data2;
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
DAC_InitTypeDef DAC_InitStructure;

RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE); //to use DAC
RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOD, ENABLE); //LEDLER
RCC_AHB2PeriphClockCmd (RCC_APB2Periph_ADC1, ENABLE); //ADC
RCC_AHB1PeriphClockCmd (RCC_APB1Periph_DAC, ENABLE); //DAC

//DAC CHANNEL 1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//LEDLER
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);

//ADC CHANNEL
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//ADC CONFIGURATIONS
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
ADC_CommonInit(&ADC_CommonInitStructure);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);

//DAC CONFIGURATIONS
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);

while(1)
{
  adc_data=Read_ADC();
adc_data2=map(adc_data,0,255,0,4095);
DAC_SetChannel1Data(DAC_Align_12b_R, adc_data);

if(adc_data<51)
{
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOD, GPIO_Pin_13);
    GPIO_ResetBits(GPIOD, GPIO_Pin_14);
}

if(50<adc_data &&adc_data<101)
{
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOD, GPIO_Pin_13);
    GPIO_ResetBits(GPIOD, GPIO_Pin_14);
}

if(100<adc_data &&adc_data<151)
{
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOD, GPIO_Pin_13);
    GPIO_ResetBits(GPIOD, GPIO_Pin_14);
}

if(150<adc_data &&adc_data<255)
{
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOD, GPIO_Pin_13);
    GPIO_SetBits(GPIOD, GPIO_Pin_14);
}

}

}
Başlık: Ynt: ADC uygulama hatası
Gönderen: dumansiz - 06 Mart 2018, 15:16:43
ADC girişine ne bağlı?
D portunun 12,13,14 çıkışlarına ne bağlı? Çıkış alamadım derken neyi kastediyorsunuz?
Şema verirseniz daha iyi olur?
Hem DAC çıkışı, hemde D portunun pinleri adc girişine uygulanan gerilimi gösteriyor galiba.
While'ın içinde bekleme olmadığı için D portunun 12,13,14 pinleri çok hızlı bir şekilde değişebilir.
Eğer bu pinlere led bağlıysa, ledlere bakarak anlayamazsınız.
ADC'nin çözünürlüğünü biraz karıştırmışsınız. 8 bit ayarlamışsınız ama 0..4096 olarak çevirmeye çalışmışsınız.
Başlık: Ynt: ADC uygulama hatası
Gönderen: halil82ist - 06 Mart 2018, 17:10:43
if(150<adc_data &&adc_data<255)

150 den küçük ve 255 den küçükse yazıyor . sanırım şöyle olacak

if(150>adc_data &&adc_data<255) 150 ile 255 arasında ise .

adc'nin düzgün çalışıp çalışmadığına st'nin  STMstudio programı ile bakabilirsin . Eklediğin registerlerin değerini pc ekranında anlık gösteriyor .

Başlık: Ynt: ADC uygulama hatası
Gönderen: dumansiz - 06 Mart 2018, 17:57:18
@halil82ist
Kodun bahsettiğiniz kısmında yanlışlık yok.
150 "adc_data"dan küçükse ve "adc_data" 255'den küçükse, şeklinde yazıyor orada.
Yani "adc_data"150 ile 255 arasında. Ve bu doğru.