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.
2018-04-30.png

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.
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,880
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst