16f877a ile adc sorunu.

bnmdmbrk

Üye
Katılım
20 Ağu 2008
Mesajlar
26
Puanları
1
Merhaba kontrolkalemi üyeleri. 16f877a ile adc uygulaması yapıyorum. Fakat adc ile okunan değer rasgele değişiyor. adc bacağına 0V versem hatta bacağı bağlamasam bile sürekli değişen değerler okuyorum. Yorumlarınız için şimdiden teşekkür ediyorum.

ADC(16f877a).c
Kod:
#include <ADC(16f877a).h>
#include <lcd.c>

//unsigned long int bilgi; 
float bilgi=0, V1=0, V2=0, I1=0, I2=0;     
byte activeadc=0xff;
void main()
{
   set_tris_a(0xff);
   set_tris_e(0xff);
 
   setup_timer_0(RTCC_INTERNAL | RTCC_8_BIT | RTCC_DIV_4);     
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
 
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
 
   setup_comparator(NC_NC_NC_NC);
 
   setup_vref(FALSE);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(ALL_ANALOG);
 
   disable_interrupts(GLOBAL);
 
   lcd_init();
   delay_ms(5);
 
   float Vcarpan=26.54;
   float Icarpan=204.8;
 
   while(true)
   {
      output_toggle(LED);
      delay_ms(500);
      output_toggle(LED);
      delay_ms(500);
      output_toggle(LED);
      ///V1///
      if(activeadc!=0x00){
         set_adc_channel(0);
         delay_us(100);
         activeadc=0x00;
      }
      bilgi=read_adc();
      V1=bilgi/Vcarpan;
      if(V1<0)V1=0;
     
      ///V2///
      if(activeadc!=0x01){
         set_adc_channel(1);
         delay_us(20);
         activeadc=0x01;
      }
      bilgi=read_adc();
      V2=(bilgi/Vcarpan);
      if(V2<0)V2=0;
      lcd_gotoxy(1,1);
      printf(lcd_putc,"\f1->%2.2fV-%fA",V1,I1);
      printf(lcd_putc,"\n2->%2.2fV-%fA",V2,I2);
   }
}

ADC(16f877a).h
Kod:
#include <16F877A.h>
#device ADC=10

#FUSES NOWDT           
#FUSES HS                  
#FUSES NOPUT                 
#FUSES NOPROTECT           
#FUSES NODEBUG              
#FUSES NOBROWNOUT         
#FUSES NOLVP              
#FUSES NOCPD                   
#FUSES NOWRT               

#use delay(clock=20000000)

#define LED PIN_D7
#define DELAY 1000

#define LCD_ENABLE_PIN PIN_C7
#define LCD_RS_PIN PIN_C5
#define LCD_RW_PIN PIN_C6
#define LCD_DATA4 PIN_C3
#define LCD_DATA5 PIN_C2
#define LCD_DATA6 PIN_C1
#define LCD_DATA7 PIN_C0
 
Simülasyonda mı, gerçek devrede mi
arıza?
Keşke Mplab ile yazsaydınız. [emoji54]
CCS C bilmiyorum.
 
Gerçek devrede. 0V için şöyle oluyor.

Devreyi breadboard üzerinde de kurdum sonuç aynı. Koddan olmalı diye düşünüyorum.
 
Moderatör tarafında düzenlendi:
Koddan değilmiş. Güç hattındaki dalgalanmalar nedeniyle oluyormuş. Birkaç kondansatörle halloldu.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…