Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

16f628 ile sifreli kilit

Başlatan İzmir35, 10 Nisan 2014, 15:19:08

Recep METE

Uzun saatler veya günler boyu üzerinde çalıştığın bir kod çalıştımı onun verdiği heyecan ve zevk dünyada başka hiçbir şeyde yok.Belkide o zevki tekrar tekrar tatmak için bu sıkıcı işten vazgeçemiyoruz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

İzmir35

Aynen katılıyorum hocalrım size ... ama bana yardım edecek  yok mu ne yapmam gerekıyor hoacalrım :(

SpeedyX

MrDarK'a katılıyorum, çık gez eğlen, boşver kapı kilidini :)

Kod parçacığını aşağıdaki şekilde değiştirdim, butona basarken daha buzzer ötmeye başlayacak ve girmesini istediğin rutine girince susacak. O zaman elini butondan çekebilirsin anlamında.
Butona bastığında buzzer sesi gelmiyorsa donanımında sorun var bizi boşuna uğraştırdın demektir. Bağlamadığın pin veya tel olabilir.

            if(!input(pin_b5))
			{
			  output_low(pin_a4);
			  while(!input(pin_b5))
			  {
				if(++buton > 300)
				  break;
				delay_ms(1);
			  }
			}
            else
			{
              buton = 0;
			  output_high(pin_a4);
			}
			  
            if(buton > 300)
            {
              buton = 0;
              /*output_low(pin_a4);*/delay_ms(750); 
              output_high(pin_a4);
              
              while (sayac < 4)
              {
                
                while (tus == 255 ) { keypad_oku (); }
                output_low(pin_a4);delay_ms(300);output_high(pin_a4);
                
                if      (sayac ==0 ) { write_eeprom(0,tus);sayac++ ; }
                else if (sayac ==1 ) { write_eeprom(1,tus);sayac++ ; }
                else if (sayac ==2 ) { write_eeprom(2,tus);sayac++ ; }
                else if (sayac ==3 ) { write_eeprom(3,tus);sayac++ ; }
                tus = 255 ;
                delay_ms(500);
              }
            }

İzmir35

Hocam verdiğiniz kodları yukledım. Siz ilave olarak kapıyı actıgımda bile buzzer otmesı koymuusunuz. Hocam söyle bır sorunla karsılastım. sifre degitrime şlmeini syle yapıyor.Öncelikle ben gene butona bastıgımda pice gerılım geldıgını elımı cektıgımde ıse pice gerılım gelmedıgını gordum. ben olcu aletını devreye bagladım. 5 v enerjıyı verdım. olcu aletının eksı ucunu devrenın sasesıne verıdm artı ucunu ıse pic 16 bacagına deydırıp cektıgımde buzzer otuyor ve sifre degıstırme ıslemını yapıyor ?? ne alaksı var ? ben olcu aletının artı probunu 16 nolu bacaga (osc bacagı ) deydırıp cekıyorum sıfre degısıyor.o zaman ıstedıgım sıfreyı gırıyom olmus olmuyor? ölçü aletı ne alaka hocam.??
benım devremde buton su sekılde baglıdır;
butonun 1 bacagı +5 V baglı diğer bacagı ıse 4k7 ıle pıcın 11 nolu bacagına baglı ... ????

SpeedyX

Önceki mesajında buton pull down bağlı olarak belirtmişsin, buton son yazdığın gibi bağlıysa, PIC bacağı ile GND arasına 10k direnç ekle ve !input(pin_b5) olan kısımları input(pin_b5) yap. Yani ! işaretini kaldır.

Ölçü aletin hattı yüklüyor, içindeki kapasitör boş olduğundan pine dokundurduğun anda şarj olmaya çalışınca pin i kısa süreliğine GND ye çekiyor ve işlemci de pin "0" görünce şifre değiştirmeye giriyor.

İzmir35

#20
hocam butonun baglı oldugu bacak ıle gnd arasına 10 k dırenc mı eklıyeyım ? ne amc olarak kullancak o dırenc hocam..

mesaj birleştirme:: 14 Nisan 2014, 15:14:11

Hocam bu sefer butonun baglı oldugu pıc bacagında 2.86 volt gosuktu. gene aynısı oldu hocam bırsey deısmedı. gene olcu aletını artı probunu deydırdım.ve buton ottu hocam. sıfre degıstırme ıslemıne gectım. ben butona bastıgımda almıyor hocam.. en yazılan kodda bu sekıl hocam...

#include<16f628a.h>
#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOMCLR
#FUSES NOLVP
#FUSES NOCPD
//#fuses INTRC
#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)


#define sut1 pin_b0  // sutun1 ifadesi b0 ifadesi ile eşleniyor.
#define sut2 pin_b3  // sutun2 ifadesi b3 ifadesi ile eşleniyor.
#define sut3 pin_b4  // sutun3 ifadesi b4 ifadesi ile eşleniyor.

#define sat1 pin_a0  // satır1 ifadesi a0 ifadesi ile eşleniyor.
#define sat2 pin_a1  // satır2 ifadesi a1 ifadesi ile eşleniyor.
#define sat3 pin_a2  // satur3 ifadesi a2 ifadesi ile eşleniyor.
#define sat4 pin_a3  // satır4 ifadesi a3 ifadesi ile eşleniyor.

 char tus=255  , sayac=0;  // karakter tipinde değişkenler..
 int16 buton=0;
  //********  Keypad Tarama Kısmı ***********///////
  
  char keypad_oku()
 {
 tus= 255 ;
 output_low(sat1); //  A portu çıkışı sıfırlıyoz
 output_low(sat2);
 output_low(sat3);
 output_low(sat4);
 
   output_high(sat1);            //1. satırı lojik 1 yapıyoz.
    if (input(sut1))          //1. sutun okunuyor.
    {delay_ms(30); tus=1 ;}
    if (input(sut2))          //2. sutun okunuyor.
    {delay_ms(30); tus=2 ;}
    if (input(sut3))          //3. sutun okunuyor.
    {delay_ms(30); tus=3 ;}
   output_low(sat1);            // 1. satırı lojik 0 yapıyoz.
   
   output_high(sat2);             //2. satırı lojik 1 yapıyoz.
    if (input(sut1))              //1. sutun okunuyor.
    {delay_ms(30); tus=4 ;}
    if (input(sut2))             //2. sutun okunuyor.
    {delay_ms(30); tus=5 ;}
    if (input(sut3))             //3. sutun okunuyor.
    {delay_ms(30); tus=6 ;}
   output_low(sat2);              // 2. satırı lojik 0 yapıyoz.
      
   output_high(sat3);                //3. satırı lojik 1 yapıyoz.
    if (input(sut1))               //1. sutun okunuyor.
    {delay_ms(30); tus=7 ;}
    if (input(sut2))                //2. sutun okunuyor.
    {delay_ms(30); tus=8 ;}
    if (input(sut3))                //3. sutun okunuyor.
    {delay_ms(30); tus=9 ;}
   output_low(sat3);                // 3. satırı lojik 0 yapıyoz.
     
   output_high(sat4);              //4. satırı lojik 1 yapıyoz.
    if (input(sut1))                //1. sutun okunuyor.
    {delay_ms(30); tus='A' ;}
    if (input(sut2))                //2. sutun okunuyor.
    {delay_ms(30); tus=0 ;}
    if (input(sut3))                //3. sutun okunuyor.
    {delay_ms(30); tus='B' ;}
   output_low(sat4);                // 4. satırı lojik 0 yapıyoz.
   
          return tus ;    // Fonksiyonumuz tus değeri ile dönecek.
          
 }
  
  
void main()
{
   
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_CCP1(CCP_OFF);
   
      set_tris_a(0x00);   // a portu sıfırlıyoz.
      set_tris_b(0x3f);   // b portu komple cıkış yapıyoz.
      
      
      output_low(pin_a4);     // açılısta buzzer otme suresı
       delay_ms(500);
      output_high(pin_a4);
       delay_ms(500);
      output_low(pin_a4);
      delay_ms(500);
      output_high(pin_a4);
    if (read_eeprom(0) == 255) { write_eeprom(0,1); write_eeprom(1,2); write_eeprom(2,3); write_eeprom(3,4); 
    }
      while (TRUE)
      {
      while ( tus == 255 ) { keypad_oku(); }   // tusa basılana kadar bekle
       output_low(pin_a4); delay_ms(300);output_high(pin_a4);   // tusa bastıkca buzzer otme suresi
       
         if ( sayac == 0 && tus == read_eeprom(0)) {sayac++;} 
       else if ( sayac == 1 && tus == read_eeprom(1)) {sayac++;}
       else if ( sayac == 2 && tus == read_eeprom(2)) {sayac++;}
       else if ( sayac == 3 && tus == read_eeprom(3)) {sayac++;}
       else if ( sayac == 4 && tus == 'B')
       {
      
         output_high(pin_b6); delay_ms(3000); output_low(pin_b6) ;tus=255;
          sayac=0 ;       

       }
       
         else sayac= 0;
       
     keypad_oku();
                 if(input(pin_b5))
            {
              output_low(pin_a4);
              while(input(pin_b5))
              {
                if(++buton > 300)
                  break;
                delay_ms(1);
             }
            }
            else
            {
              buton = 0;
              output_high(pin_a4);
            }
              
            if(buton > 300)
            {
              buton = 0;
              /*output_low(pin_a4);*/delay_ms(750); 
              output_high(pin_a4);
              
              while (sayac < 4)
              {
                
                while (tus == 255 ) { keypad_oku (); }
                output_low(pin_a4);delay_ms(300);output_high(pin_a4);
                
                if      (sayac ==0 ) { write_eeprom(0,tus);sayac++ ; }
                  else if (sayac ==1 ) { write_eeprom(1,tus);sayac++ ; }
                else if (sayac ==2 ) { write_eeprom(2,tus);sayac++ ; }
                else if (sayac ==3 ) { write_eeprom(3,tus);sayac++ ; }
                tus = 255 ;
                delay_ms(500);
             }
            }
      }
}
  //                   if(!input(pin_b5))
    //          buton++;
      //      else
        //      buton = 0;
          //  if(buton > 700)
     //       {
       //       buton = 0;
         //     output_low(pin_a4);delay_ms(750); output_high(pin_a4) ;
              
           //   while (sayac < 4)
             // {
                
       //         while (tus == 255 ) { keypad_oku (); }
         //output_low(pin_a4);delay_ms(300);output_high(pin_a4);
                
           //     if      (sayac ==0 ) { write_eeprom(0,tus);sayac++ ; }
             //   else if (sayac ==1 ) { write_eeprom(1,tus);sayac++ ; }
               // else if (sayac ==2 ) { write_eeprom(2,tus);sayac++ ; }
           //     else if (sayac ==3 ) { write_eeprom(3,tus);sayac++ ; }
             //   tus = 255 ;
               // delay_ms(500);
 //             }
   //         }
     // 
     // }
    // }
baska ne yapmalıyım hocam ????

aydınD

bu uygulamayı deneyen var mı acaba

aydınD

çalışır haldeki devre şeması ve kodlarını paylaşacak mısınız acaba

İzmir35

Hocam sorun aynı sekıl devam edıyor. donanımsal arıza ne olabılır ki... eger kı ben butona bastıgımda gerılım gelıyor ve butondan elımı cektıgımde herılım kesıyorsa bu butonun calıstıgını gosterır. baska donanımsal arıza ne olabılrı kı hocam ... :(