Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

ADC uygulama hatası

Başlatan Analog, 06 Mart 2018, 00:14:44

Analog

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);
}
}
}

dumansiz

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.

halil82ist

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 .


dumansiz

@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.