10 bit adc okuma yardım

Başlatan burctankal, 17 Ocak 2015, 00:55:24

burctankal

Arkadaşlar pic 16f684 ile microC kullanarak yazdığım bir programda takıldım. Gerçek çalışmamda adc okuma sonuçları istediğim gibi çalışmayınca ben de değerleri lcd'ye yazdırıp kontrol etmek istedim. Deneme programı proteus'ta düzgün çalışmaktayken bread board üzerinde şöyle bir sorun çıkıyor: değerleri pot'la değiştirirken 512'ye kadar düzgün gösterilmekteyken 512'nin üzerindeki değerler lcd'de saçma sapan karakterlerle gösteriliyor. sanırım gerçek projemde de sorun burada. Ancak neden böyle olduğunu bilemiyorum. Sanırım bu pic'te standart 10 bit adc bulunmakta. yani değerlerin 1023'e kadar gösterilmesi gerekmekte. Acaba yapılandırma ayarlarımda mı bir sorum var.
yapmaya çalıştığım şuydu:
-comparator kapalı
-bit 0-1 analog gerisi digital
-internal pull-up kapalı
-timer0 prescaler 256
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D4 at RC0_bit;

sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D7_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
char *adc_yazi ="0000";

signed int adc_deger = 0;


void main()
{
porta       = 0x00;
trisa       = 0b111111;
portc       = 0x00;
trisc       = 0b000000;

cmcon0      = 0x7;             // turn comparator off
ansel       = 0b00000011;      // analog digital pin settings
option_reg  = 0b10000111;      // bit 7=internal pull-ups off, bit 2-0= tmr0 prescaler 256 ( prescaler*256*(osc/4) = 256*256*1 = 65535 us =65,5 ms interrupt routine)
delay_ms(500);

Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);               // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off


while(1)
{

adc_deger=(ADC_Read(0));

adc_yazi [0] =adc_deger        /1000 %10 + 48;
adc_yazi [1] =adc_deger        /100  %10 + 48;
adc_yazi [2] =adc_deger        /10   %10 + 48;
adc_yazi [3] =adc_deger              %10 + 48;
Lcd_Out (1,1,adc_yazi);
Delay_ms(250);
}

}

Powered by EzPortal