ADC segment gösterimi hata.

Başlatan Mr.Java, 02 Mart 2013, 15:54:18

Mr.Java

ARkadaşlar merhaba.Birtürlü adc okuyup displaya aktaramadım.Hatam nereden kaynaklanıyor ?

Bu elimdeki pic development setin şematiği.

#include "BoardConfig.h"
const uchar dizi [] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
const uchar secim[4]={0,0,0,0};
char txt[7];
uint okunan;
void kurulum()
{
Board_Ayar();
PORTA.B0=1;
ADCON1=0b11000000;
CMCON|=7;
}

void led_display()
{
    while(1)
    {
    uchar i,j,k;RA3=0;
    for(k=0;k<50;k++)
    {
     for(j=0x80,i=0;i<4;i++)
     {
      RC4=1;
      PORTD=j;
      RC4=0;
      RC3=1;
      PORTD=dizi[secim[i]];
      RC4=0;
      J>>=1;
      delay_ms(2);
      RC3=1;
      PORTD=0x00;
      delay_ms(2);
      RC3=0;
      }
     }
    }
   }
void Adcc()
{

     okunan=ADC_Read(0);
     secim[0]=(okunan/1000);
     secim[1]=((okunan%1000/)100);
     secim[2]=((okunan%100)/10);
     secim[3]=(okunan%10);

}
void main()
{
kurulum();
while(1)
{
   Adcc();
   LED_Display();

}
}




Sorun nedir ?

mehmet

Microc için biraz değişiklik yaptım onları sen düzeltirsin...
#include "BoardConfig.h"
typedef unsigned char uchar;
typedef unsigned int uint;

const uchar dizi [] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar secim[4]={0,0,0,0};
char txt[7];
uint okunan;
void kurulum()
{
Board_Ayar();
PORTA.B0=1;
ADCON1=0b11000000;
CMCON|=7;
}

void led_display()
{
    while(1)
    {
    uchar i,j,k;PORTA.RA3=0;
    for(k=0;k<50;k++)
    {
     for(j=0x80,i=0;i<4;i++)
     {
      PORTC.RC4=1;
      PORTD=j;
      PORTC.RC4=0;
      PORTC.RC3=1;
      PORTD=dizi[secim[i]];
      PORTC.RC4=0;
      J>>=1;
      delay_ms(2);
      PORTC.RC3=1;
      PORTD=0x00;
      delay_ms(2);
      PORTC.RC3=0;
      }
     }
    }
   }
void Adcc()
{
     okunan=ADC_Read(0);
     secim[0]=(uchar)(okunan/1000);
     secim[1]=(uchar)((okunan%1000)/100);
     secim[2]=(uchar)((okunan%100)/10);
     secim[3]=(uchar)(okunan%10);

}
void main()
{
kurulum();
while(1)
{
   Adcc();
   LED_Display();

}
}
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Mr.Java

Kod yine çalışmadı abi.typedef unsigned char uchar; nedir ?
uchar bende boardconfig içerisinde unsiged char olarak tanımlamıştım kısadan.ne yaptıysam çalıştıramadım.

LukeSkywalker

tip tanımlıyor orada . unsigned char, uchar olarak tanımlanıyor mesela. 

Mr.Java

#4
Anladım.Kod çalışmadı hata displaydaki tüm ledler yanıyor.yani 0xFF gidiyor.

mehmet

Adc okutmadan diziye sabit değerler ver, display çalışıyor mu kontrol et önce...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Mr.Java

#6
Mehmet abim yine sayende bir işin daha altından kalktık.  :D Bende sanırım algoritma kurma sorunu var.Dediğin gibi displayda sorun vardı.Şuan çok rahat okuyorum.0000 ile 1023 arası 10bit adc okuma sorunsuz çalışıyor.Programda biraz daha optimize edip displayda en net görüntüyü sağladım.İşte çalışan kod.Tekrarda çok teşekkürler abim.(Bu arada typedif değişken tanımlamanın bize +'sı nedir abi?)

Sırada bu var. mikroElektronika - 7seg click Example  :)

#include "BoardConfig.h"
#define display_1 0
#define display_2 1
#define display_3 2
uchar dis_num[4];
uchar dizi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};

void display_goster(void)
{
     uchar i,j,k;
     RA3=0;
     for(j=0;j<50;j++)
     for(k=0x80,i=0;i<4;i++)
     {
      RC4=1;
      portd=k;
      RC4=0;
      RC3=1;
      PORTD=dizi[DIS_NUM[i]];
      RC3=0;
      k>>=1;
      delay_MS(2);
      RC4=1;
      PORTD=0X00;
      RC4=0;
      delay_MS(2);
     }
}

void adc_oku(void)
{
  uint counter;
  counter=adc_read(0);
  DIS_NUM[0]=(uchar)(counter/1000);
  DIS_NUM[1]=(uchar)((counter%1000)/100);
  DIS_NUM[2]=(uchar)((counter%100)/10);
  DIS_NUM[3]=(uchar)(counter%10);

}
void main (void)
{
     Board_Ayar();
     TRISA=1;
     PORTA=0;
     while(1)
    {
           adc_oku();
           Display_goster();

    }
}

mehmet

Öncelikle ben sadece yol göstermeye çalışıyorum. Olayları
çözen sensin.
http://en.wikipedia.org/wiki/Typedef
http://www.kadifeli.com/fedon/stdcprtr.php?5_3
buraları incelersen daha fazla bilgi edinebilirsin.
Olan veri tiplerinden yeni veri tipleri oluşturmak
diyebiliriz en basit hali ile...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Mr.Java

Öyle düşünme yinede yardımın dokunuyor abi.Ama yukarıdaki videodaki program biraz beni zorlayacak gibi.Birde abi bu displaylerde efekt olayinin mantığı nasıl işliyor.Örnek 7-segment displayda şöyle bir efekt düşünelim benim şematiğini paylaştığım seti baz alarak.

Misalen adc değerini okudum.4 basamaklı;
ilk sayı 1.displaydan sola doğru kayarak geliyor ve 4.duruyor.
2.sayı 1.displayadn sola doğru kayarak geliyor ve 3.duruyor.
.
.
.
sonuncu sayı displaydan sola doğru kayıyor ve 1.duruyor.
sonra hepsi el ele tutuşup yanıp sönüyor 2 defa  :D
nasıl bir algoritma izlemeliyim sence abi.
Tabi benim hemen aklıma yukarıdaki i=0;i<4;i++ değişkenini düzenlemek displayi seçmek sonra kaydırma fakan olur gibime geliyor fakat belki bir kısayolu vardır diye sordum.
Teşekkürler.