Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: 221200 - 21 Eylül 2023, 14:15:24

Başlık: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: 221200 - 21 Eylül 2023, 14:15:24
Merhaba,

yeni başladığım için soruyorum.

potansiyometreden alınan veri ile ADC yapmaya çalışıyorum.
4 digit 7 segment katot display ile yapacağım fakat yazdığım koddan istediğim sonucu elde edemiyorum.
Bilen biri varsa bakabilir mi
#include <16f877.h>
#device ADC=10 // Controller configuration
#fuses XT, NOWDT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

// Common pins of the four digits definitions
#define disp1   pin_b0
#define disp2   pin_b1
#define disp3   pin_b2
#define disp4   pin_b3

unsigned long int bilgi;
float voltaj;
const int digit[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

#INT_AD
void adc()
{
      output_high(disp1);
      output_c(digit[(int)(voltaj * 10) % 10]);
      delay_ms(5);
     
      output_low(disp1);
      output_high(disp2);
      output_c(digit[(int)(voltaj) % 10]);
      delay_ms(5);
     
      output_low(disp2);
      output_high(disp3);
      output_c(digit[(int)(voltaj * 10) % 10]);
      delay_ms(5);
     
      output_low(disp3);
      output_high(disp4);
      output_c(digit[(int)(voltaj) % 10]);
      delay_ms(5);
     
      output_low(disp4);
}

void main() {

    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED, 0, 1);
    setup_CCP1(CCP_OFF);
    setup_CCP2(CCP_OFF);
   
    set_tris_a(0x01);  // a0
    set_tris_b(0x00);
    set_tris_c(0x00);
   
    output_b(0x00);
     
    output_c(0x00);

    setup_adc(adc_clock_div_32);  // Adjust the division factor as needed
    setup_adc_ports(AN0);
   
    enable_interrupts(INT_AD);
    enable_interrupts(GLOBAL);
    delay_us(20);

output_low(disp1);
output_low(disp2);
output_low(disp3);
output_low(disp4);

    while (TRUE) {
   
    set_adc_channel(0);
    delay_us(20);
    bilgi = read_adc();
    voltaj = (0.0048828125*bilgi); //   5/1023  adc=10
  adc();
   
        delay_us(20);
        delay_us(20);
    }
}

display kısmı 0-3 B portuna bağlı, ABCDEFG C portuna bağlı, potansiyometre A0'da.
Çalıştırdığınızda displayde pot değeri değiştikçe 9999 8888 6666 4444 şeklinde oluyor
Başlık: Ynt: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: fahri- - 24 Eylül 2023, 14:50:51
Displayde önce ADC değerini değilde istediğin değeri göstermeye caliş. 1234 gibi mesela. Sonra adc değerini göstermeyi dene.
Başlık: Ynt: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: sifirzero - 24 Eylül 2023, 15:46:45
Tarama yöntemi yapmalisin. simulasyonda bazen hata veriyor.
Başlık: Ynt: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: Ersin - 24 Eylül 2023, 20:43:42
Her display i high yaptığında 20 ms beklet , değişkenleri fonksiyon üstte tanımla , hatta 4 farklı değişken tanımlayıp önce 4 digite böl sonra gönder display e.
Başlık: Ynt: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: ete - 25 Eylül 2023, 11:16:07
Bahsi geçen sorun simulasyondaki tarama sorunu bana kalırsa.
Çözümü ise şöyle, Displayin ortak uçların her birine 10K pullup direnci bağlanması gerekiyor.
Gerçek devrede buna ihtiyaç olmuyor ama koysanızda devreye yardımı oluyor zararı olmuyor.

Ete
Başlık: Ynt: CCS C compiler ile 16f877 pic programalama hatası
Gönderen: mehmet - 25 Eylül 2023, 12:05:33
Önce açık olan displayi kapatın ve
sonra yeni displayi açın.