Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

RS232 led display göstergesi

Başlatan isa_olcer, 09 Nisan 2018, 01:48:38

isa_olcer

Merhaba tartım cihazının RS232 portundan gelen bilgiyi 7 segment displayde göstermek istiyorum. Gelen veriden istediğim kilo bilgisini ayırdım yazdığım kod LCD olarak gayet güzel çalışıyor fakat led displayde bir kaç yöntem denememe rağmen sonuç alamadım. Ya hiç gelmedi yada tümüne aynı sayı geldi. Acaba nerede yanlış yapıyorum?

örnek kilo bilgisi:

31249KG= +   0   3   1   2   4   9  CR
HEX    = 2B 30  33  31  32  34  39  0D




/******************************************************
      PIC16F877 RS232 KANTAR EKRANI

*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#include <74595.c>

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
#use FIXED_IO( C_outputs=PIN_C0,PIN_C1,PIN_C2 )
#define EXP_OUT_ENABLE  PIN_C2
#define EXP_OUT_CLOCK   PIN_C1
#define EXP_OUT_DO      PIN_C0
#define NUMBER_OF_74595 4

int digit[14]={63,6,91,79,102,109,125,7,127,111};

int kantar[8];  // rs232 den gelen veri
int a,b,c,d,e; // haberleşme sayıları
int data[4];


#int_rda

void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   output_high(pin_c5);  // RC5 çıkışı lojik-1
   gets(kantar); // String ifadeyi al ve "kantar" adlı dizi değişkenine aktar.
      
   a=((kantar[6])-48); // karekter kodunun hex karşılığından 48 çıkarılıp normal sayı elde edilir
   b=((kantar[5])-48);
   c=((kantar[4])-48);
   d=((kantar[3])-48);
   e=((kantar[2])-48);
      
   if(e==-16) // indikatörün olmayan sayı yerine gönderdiği 0x20 hex kodu "0" rakamına çevriliyor
   e=0;
   
   if(d==-16)
   d=0;
   
   if(c==-16)
   c=0;
   
   if(b==-16)
   b=0;
   
   if(a==-16)
   a=0;
   
   data[0]=digit[a]; //Rakamlar displaye gönderiliyor
   data[1]=digit[b];
   data[2]=digit[c];
   data[3]=digit[d];
      
   write_expanded_outputs(data);
   delay_ms(100);
  
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   output_low(pin_c5); // RC5 çıkışı ilk anda sıfırlanıyor
   
   printf("\r* SISTEM BASLADI *");
     
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver

   while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
   }
}

M.Salim GÜLLÜCE

bunu simulasyonda deniyorsan çıktıları doğru göremeyebilirsin.
Gerçek devre üzerinde denedinmi?

isa_olcer


isa_olcer

Bugün deneme yaptım yine çalışmadı. Sanırım kodlarda bir hatam var.

makine_terbiyecisi

#4
 hc595 ile display sürmende bir sıkıntı yok demi. Demek istediğim Herhangi bir sayıyı (1563) sayısını displayda gösterebiliyor musun?

Birde lcd çalıştı falan diyorsun ama o da simülasyon üzerinde. Devreyi boarda falan kurmanı tavsiye ederim.
# ÖĞRENELİM, ÖĞRETELİM #

isa_olcer

#5
LCD olarak bord üzerine kurmuştum. Displayleri direk çıkışlara bağlayıp taramalı olarak denedim hepsine aynı sayı geldi olmadı sonra hc595 denedim yine olmadı. Bu şema ile başka kodlarla sayılar geliyor. a,b,c,d,e değişkenlerini displayde gösterebileceğim başka bir yöntem önerirseniz deneyebilirim.


M.Salim GÜLLÜCE

Alıntı yapılan: isa_olcer - 12 Nisan 2018, 12:30:53LCD olarak bord üzerine kurmuştum. Displayleri direk çıkışlara bağlayıp taramalı olarak denedim hepsine aynı sayı geldi olmadı sonra hc595 denedim yine olmadı. Bu şema ile başka kodlarla sayılar geliyor. a,b,c,d,e değişkenlerini displayde gösterebileceğim başka bir yöntem önerirseniz deneyebilirim.


Taramalı mod ile hc595 sürümü farklıdır. birisi seri diğeri paralel switching zaman paylaşımlı.
yani tek tek bit bit seri olarak göndermek zorundasın. 7+7+7+7=28 bitlik seri bilgi transferi gerekir.