Alıcı devrede basit bir reset sorunu.

Başlatan toyo, 28 Mart 2012, 23:55:14

toyo

Arkadaşlar üzerinde çalıştığım bir proje var. Alıcı devre açıldığında LCD'de kendi ismim felan yazcak.Verici devreden sinyal geldiğinde ise LCD'de  kapı çalıyor yazacak. Benim sorum şu mikrodenetleyicinin mclr ucunu reset olarak kullanırsam kapı çalıyor yazısını siliyor ve tekrar kendi adım yazıyor yani alıcı devre tekrar açılmış gibi oluyor.Benim düşüncem mikrodenetleyicinin bir ucuna buton bağlamak ve bu butona basılınca LCD'deki yazıyı silmek.Ama bunu yaptığım anda LCD'de yazı yazmıyor.Yardımlarınıza ihtiyacım var teşekkürler.
#include <16f628A.h>

#fuses XT,NOPROTECT, NOWDT, NOLVP

#use delay(clock=4000000)
#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1,parity=N,stop=1)

#define LCD_ENABLE_PIN     PIN_A0      //lcd enable pini b5
#define LCD_RS_PIN         PIN_A1      //lcd rs pini pin b4
#define LCD_RW_PIN         PIN_A2     //lcd rw pini pin c0
#define LCD_DATA4          PIN_b7         //lcdnin data4 pini pinb0 
#define LCD_DATA5          PIN_b6         //lcdnin data5 pini pinb1 
#define LCD_DATA6          PIN_b5         //lcdnin data6 pini pinb2 
#define LCD_DATA7          PIN_b4         //lcdnin data7 pini pinb3

#include <Clcd.c>

char gelen=0;
void main()
{

lcd_init();
printf(lcd_putc,"TEKNO KULAK");
delay_ms(500);
printf(LCD_PUTC, "\f");
delay_ms(500);
printf(lcd_putc,"EMRE SIMSEK");
delay_ms(500);
printf(LCD_PUTC, "\f");
while(1)
   {
  
   
    gelen=getc();
         if(gelen==0x55,0x55,0x55,0x55,0x55,'Z','I','L')
         {
             
            
            
         
            printf(LCD_PUTC, "\f");
            lcd_gotoxy(1,1);
            printf(lcd_putc,"KAPI CALIYOR");
            
            output_high(pin_a3); // ledi yak
            delay_ms(500);
            output_low(pin_a3);
            delay_ms(500);
            output_high(pin_a3);
            delay_ms(500);
            output_low(pin_a3);
            
          
            
         }
   }
}


Eklemek istediğim
  if(output_high(pin_b4)); 
printf(LCD_PUTC, "\f");
Gelirken ne getirilir ki giderken ne götürülür.

JKramer

MCLR ucunu reset olarak kullandığınızda, programın baştan başlaması (resetlenmesi) normal değil mi? Eğer MCLR pin'ine basmadan baştan başlıyorsa, bunun nedenini bulmak gerekiyor; yapmak istediğiniz ekleme sadece sorunu maskeleyecektir. Şemanızı koyarsanız daha rahat yardımcı olunabilir.

serhat1990

sema koyarsan yardımcı olabiliriz . mclr pinine gelince mclr pini disable edilmediği sürece lojik 0 aldıgında program reset atar. Buda programının en bastan itibaren calısmasını saglar. AYRICA

  if(output_high(pin_b4)); 
printf(LCD_PUTC, "\f");


bu kod ile b4 'e pinine lojik1 verilip verilmediğinimi incelemeye çalışıyorsun. eğer öyleyse hataların şunlar.

1-) void main içerisinde b4 pinini giriş yapmamışsın.
2-) buton sorgulaması böyle olur. // if(input(PIN_B4)==1)printf(LCD_PUTC, "\f"); //


İyi çalışmalar...

toyo

if(output_high(pin_b4));
printf(LCD_PUTC, "\f"); burda nasıl bir hataya düşmüşüm ben  :-[ Gece uğraşıyodum kafamın yorgunluğuna verin..Şimdi ben reset butonuna basılınca mikrodenetleyicinin değil lcd nin resetlenmesini istiyorum.
if(input(PIN_B4)==1)
printf(LCD_PUTC, "\f");

Bu işlemi yaptıramadım.Devre şeması:
Gelirken ne getirilir ki giderken ne götürülür.

serhat1990

#4
benim anlamadığım nokta lcd yukarıda olan pice baglı ve reset butonu dediğin buton ra4'e baglı ama sen lcd temizlemek istersen b4 butonuna basılımı degilmi ona bakıyorsun .

if(input(PIN_A4)==1)
printf(LCD_PUTC, "\f");


benmi yanlış anladım.

toyo

Yukarda örnek olarak RB4 demişim.
Benim demek istediğim alıcı devrede RA4'e basılınca lcd temizlensin. İlginize çok teşekkür ederim.
Gelirken ne getirilir ki giderken ne götürülür.

serhat1990

16f628 datasheet'ini okumanı tavsiye ederim. RA4 pinini iyice okumanı tavsiye ederim iyi çalışmalar.

toyo

Gelirken ne getirilir ki giderken ne götürülür.