Haberler:

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

Ana Menü

CCS C Değişken Problemi

Başlatan ugurer, 08 Ağustos 2017, 09:00:25

ugurer

Arkadaşlar merhaba, bir proje de ADC'den veri okuyup bu bilgiye göre işlem yapmam gerekiyor. Bu iş için HX710 ADC ve 12f1822 denetleyici kullanıyorum. Biraz denemeden sonra ADC'yi okumayı başardım fakat kontrol kısmında problem oluyordu, seri port'a yansıttığım zaman değişken olarak long veya int32 belirlememe rağmen signed olursa 32767, unsigned olursa da 65535'ten fazla olduğunda değer negatife dönüyor ve sistem karışıyor haliyle.
Kodlar bu şekildedir:
#include <Deneme.h>

//long ZERO=0;
long OUTPUT=0;
unsigned long ADC_DATA=0;
//unsigned long ADC_READ(void);
signed int32 ADC_READ(void);


//!
//!unsigned long ADC_READ(void) // ADC okuma fonnksiyonum
//!{
//!unsigned long ADC_BIT;
//!
//!output_low(CLOCK);
//!ADC_BIT=0;
//!while(input(DOUT));
//!
//!   for(int i=0;i<24;i++)
//!   {
//!     output_high(CLOCK); 
//!     ADC_BIT=ADC_BIT<<1;
//!     output_low(CLOCK);
//!     if(input(DOUT)) ADC_BIT++;
//!   }
//!output_high(CLOCK);
//!ADC_BIT=ADC_BIT ^ 0x800000;   
//!output_low(CLOCK);
//!output_high(CLOCK);
//!output_low(CLOCK);
//!output_high(CLOCK);
//!output_low(CLOCK);
//!return(ADC_BIT);
//!}

signed int32 ADC_READ(void) // ADC okuma fonksiyonum       
   { 
      signed int32 adc_bit;
      unsigned char i;     
      output_high(DOUT);           
      output_low(CLOCK);
      adc_bit=0;  
      while(input(DOUT)); 
      for (i=0;i<22;i++)
         {                                              
            output_high(CLOCK);
            adc_bit=adc_bit<<1;                                  
            output_low(CLOCK);                                                          
            if(input(DOUT)) adc_bit++;
         }  
      for (i=0;i<3;i++)
        {                                                                                       
            output_high(CLOCK); 
            output_low(CLOCK);                                                                           
        }                                                                                                                
      return(adc_bit);                                                                                      
}                               


void main()
{
   setup_timer_2(T2_DIV_BY_16,255,16);
   setup_ccp1(CCP_PWM);
//   OUTPUT_HIGH(BUTTON_ARTI);
  //  ADC_READ();
    delay_ms(100);
  // ZERO=ADC_READ();
   ADC_DATA=ADC_READ();
//   ZERO=ADC_DATA;
   delay_ms(100);
   while(TRUE)
   {  

         ADC_DATA=ADC_READ(); // Değişkene atıp değişkeni yazdırıyorum direk
         printf("ADC Data=\t");
         printf("%Ld",ADC_DATA);
         printf("\n");
   }

}

ugurer

Gereksiz bir başlık olmuş şimdi fark ettim hatamı