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
Displayde önce ADC değerini değilde istediğin değeri göstermeye caliş. 1234 gibi mesela. Sonra adc değerini göstermeyi dene.
Tarama yöntemi yapmalisin. simulasyonda bazen hata veriyor.
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.
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
Önce açık olan displayi kapatın ve
sonra yeni displayi açın.