Merhabalar arkadaşlar gün geçmiyor ki başka bi sorunla karsılaşmiyim.ADC modulunu ıncelerken hesapladıgım degerı lcd ye yazdırmayı denedım bir nevi yazdırdm fakat tam bir stabil kod cıkaramadım bende hesapladıgım volt degerıne göre ledlerı yakayım dedim ve basladım.Kodu dun yazıp derledıgımde potansiyometreden gelen degeri hesaplayıp o voltaj degerıne göre ledler yanıp sonuyordu bugun uzerınde biraz degısıklık yaptım tekrar debug ettim fakat istediğim degerde ledler yanmadı.Sorunum su;
Potansiyometreden degeri degiştiriyorum 0 ile 1 volt arasında led1 1 ile 2 arasında led 2 ... olarak led 4 e kadar bir sıralamam var.Ben potansiyometreden degerı degıstırıyorum fakat o degere göre led yanmıyor.Reset butonuna bastıgımdan sonra o degerın ledi yanıyor.Yani while(1){..}
içerisinde sonsuz döngü olmuyor 1 kere deger alıyor o degere göre ledi yakıp bırakıyor.Reset dıyorum tekrar o degeri hesaplayıp ılgılı ledleri yakıyor.Bu sorunu nasıl çözebilirim arkadaşalar kodlar asagıdaki gibidir.Atollic True studio kullanıyorum bununda bir etkisi olabilir mi ?
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_adc.h"
#include <stdio.h>
#include "misc.h"
uint8_t ADCoku()
{
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_56Cycles); //ADC KANAL 0 SECILDI VE 56 CYCLES KONUMUNDA
ADC_SoftwareStartConv(ADC1); //DONUSUME BASLA DEDİK
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET); //HER DÖNUSUM SONRASI BAYRAGI SIFIRLAYALIM
return ADC_GetConversionValue(ADC1);
}
int main(void)
{
uint8_t value=0; //8 bitlik bir degişken atadık gerilimin digital degerini saklamak ıcın
// port yönlendirmelerini yapalım
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
//SECTIGIMIZ BIRIMLERIN CLOCK PALSLERINI VERELIM
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOD,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
//A VE D PORTLARININ ÖZELLİKLERNİ BELIRLEYELIM
/*D PORTU*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&GPIO_InitStructure);
/*A PORTU ANALOG OKUMAYI BU PORTTAN YAPIYORUZ*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN; // ANALOG GİRİŞ MODU
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*ADC-1 AYARLARINI YAPALIM */
ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4;
ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_Resolution=ADC_Resolution_8b;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion=1;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
while(1)
{
value=ADCoku(); // deger dondur
double voltaj,voltaj1; //
voltaj=3*value; //bölücü köprü parametresi
voltaj1=voltaj/241;
/*LED DURUMLARININ KONTROLLERİ*/
if(voltaj1<1 && voltaj1>=0) /* 0 İLE 1 ARASINDA*/
{
GPIO_SetBits(GPIOD,GPIO_Pin_12);
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
}
else if(voltaj1>=1 && voltaj1<2) /*1 İLE 2 ARASINDA*/
{
GPIO_SetBits(GPIOD,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_13);
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
}
else if (voltaj1>=2 && voltaj1<3) /*2 İLE 3 ARASINDA*/
{
GPIO_SetBits(GPIOD,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_13);
GPIO_SetBits(GPIOD,GPIO_Pin_14);
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
}
else if(voltaj1>=3 && voltaj1<4) /* 3 İLE 4 ARASINDA*/
{
GPIO_SetBits(GPIOD,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_13);
GPIO_SetBits(GPIOD,GPIO_Pin_14);
GPIO_SetBits(GPIOD,GPIO_Pin_15);
}
}
}
uint16_t EVAL_AUDIO_GetSampleCallBack(void)
{
return 0; // ses çipini kullanıyorsanız tek sample veriyi burada return ile döndürün.
}
void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size)
{
return; // ses çipini kullanıyorsanız burada çipe veri aktarımı DMA sona ermiş
}
mesaj birleştirme:: 27 Mart 2013, 02:09:28
Sorun atolicten kaynaklıymıs sımdı Stlınk ten yukledım progarmı calıstı.
St linkten attgım kod çalıstı fakat Atollicten debug ettiğim kod çalısmıyor.Nedeni nedir bu konuda bilgisi olan var mı ?