Kodlarda bir hata var mı?

Başlatan Recep METE, 06 Kasım 2013, 14:02:20

Recep METE


Arkadaşlar aşağıdaki kodları isiste çalıştırmak istedim ancak 7segment displaylerde sadece  "00" ve  "C" sembolü çıkıyor.sıcaklığı göstermiyor.Acaba kodlarda mı bir hata var yoksa tarafımdan yapılmış olan isis simülasyonda mı bir eksiklik var.İsiste transistör kullanmadım 7 segmentlerde "Camon Anot". Acaba neresi hatalı .Yardımlarınızı bekliyorum.




#include <16f84a.h>

#device *=16
 
#use delay(CLOCK=4000000)         //Fosc=4Mhz
#FUSES NOWDT, XT, NOPUT, NOPROTECT
#include "ds18b20.c"
 
float sicaklik = 0;
char table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
char i = 0, temp = 0,tmp=0;
char dig[2] = "";
 
///PROGRAM
#int_timer0
void timer0_kesme()
{
disable_interrupts(INT_TIMER0);
switch(i)
   {
      case 0:
         output_a(0x01+tmp);
         output_b(table[dig[1]]);
         break;
      case 1:
         output_a(0x02+tmp);
         output_b(table[dig[0]]);
         break;
      case 2:
         output_a(0x04+tmp);
         output_b(0xA7);//table[dig[0]]);//'C sembolü için
         break;
   }
  i++;
  i%=3;
  enable_interrupts(INT_TIMER0);
  set_timer0(50);
}
 
void main()
{
 
set_tris_b(0x00);
set_tris_a(0x00);
setup_timer_0(RTCC_DIV_32|RTCC_INTERNAL);
 
set_timer0(50);
 
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
 
while(1)
{
   sicaklik = ds1820_read();  //Sıcaklık bilgisi okunuyor ve çevriliyor
 
   temp = sicaklik;
 
   dig[0] = temp % 10;
   dig[1] = (temp / 10) % 10;
 
  if(temp > 90)
   tmp = 0x08;
  else
   tmp = 0;
 
   delay_ms(1000);
 
}
}
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

doğrudan bir değer girdiğinizde

temp = sicaklik;
değerine örneğin
temp=12;

şeklinde bir atama yaptığınızda değeriniz doğru gösteriliyorsa o zaman sıcaklık okuma bölümünüzde bir sıkıntı var, yok değeri hatalı gösterilyorsa ekrandaki gösterim bölümünde bir sıkıntı vardır. (hatta bu çeşitli değerler için incelenebilir)

simülasyonda akım sorunları olmaz. yeterki dijital elemanları analog olarak işaretlemeyin.
ambar7

pwm.c

Ben isis ile çalıştırdım:

ilk başta doğru görteriyor ancak ekrandaki değerler bazen değişiyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Recep METE

Alıntı yapılan: pwm.c - 06 Kasım 2013, 15:28:51
Ben isis ile çalıştırdım:

ilk başta doğru görteriyor ancak ekrandaki değerler bazen değişiyor.



Hocam bu değelerdeki  şaşma neden olabilir bir fikriniz var mı acaba.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selimkoc

Proteus similasyonda hatalar olabiliyor. Similasyonu adım adım çalıştırarak port çıkışlarını inceleyin. En doğru sonuca bu şekilde ulaşabilirsiniz.

pwm.c

Alıntı yapılan: semfero - 06 Kasım 2013, 17:34:18
Hocam bu değelerdeki  şaşma neden olabilir bir fikriniz var mı acaba.
devredeki displeyleri taramak için timer0 kesmesi kullanılmış ve bu da sensörün ölçüm sonucunu etkileyebilir.
bana kalırsa ekranı tarama yapmak yerine 74HC595 ile sürmek daha iyi olur.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-