Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ugurer - 08 Ağustos 2017, 09:00:25

Başlık: CCS C Değişken Problemi
Gönderen: ugurer - 08 Ağustos 2017, 09:00:25
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");
   }

}
Başlık: Ynt: CCS C Değişken Problemi
Gönderen: ugurer - 08 Ağustos 2017, 09:58:54
Gereksiz bir başlık olmuş şimdi fark ettim hatamı
(https://s2.postimg.cc/9bmh5ev11/Ads_z.png) (https://postimg.cc/image/9bmh5ev11/)