اطلاعیه

Collapse
No announcement yet.

یک مشکل نامعلوم با کیپد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    یک مشکل نامعلوم با کیپد

    با سلام
    من این کیپد رو از سایت تهیه کردم ( 5 کلیده با پین مشترک= جمعا شش سیمه )

    خارج از پی سی بی وقتی کلید ها رو با بوق اهم متر چک میکنم مشکلی پیش نمیاد .اما وقتی کیپد رو میذارم روی پی سی بی وقتی کلیدها رو فشار میدم ولتاژ روی هر پین از بالا به پایین بیشتر میشه مثلا اینطوریه که وقتی کلید یک رو فشار میدم ولتاژ روی پین موردنظرش 1.7 ولته و وقتی کلید دو رو فشار میدم ولتاژ 2 ولت رو نشون میده و همین طور زیاد میشه تا کلید 5 . مشکل از کجاست ؟

    پین مشترک رو وصل کردم به 5 ولت .
    به جای اینکه وقتی کلید ی رو فشار میدم 5 نشون بده این ولتاژ ها رو نشون میده .
    مقاومت پول پ هم داشتم ، حذفشون کردم هم مشکل حل نشد
    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

    #2
    پاسخ : یک مشکل نامعلوم با کیپد

    نوشته اصلی توسط m52r65
    با سلام
    من این کیپد رو از سایت تهیه کردم ( 5 کلیده با پین مشترک= جمعا شش سیمه )

    خارج از پی سی بی وقتی کلید ها رو با بوق اهم متر چک میکنم مشکلی پیش نمیاد .اما وقتی کیپد رو میذارم روی پی سی بی وقتی کلیدها رو فشار میدم ولتاژ روی هر پین از بالا به پایین بیشتر میشه مثلا اینطوریه که وقتی کلید یک رو فشار میدم ولتاژ روی پین موردنظرش 1.7 ولته و وقتی کلید دو رو فشار میدم ولتاژ 2 ولت رو نشون میده و همین طور زیاد میشه تا کلید 5 . مشکل از کجاست ؟

    پین مشترک رو وصل کردم به 5 ولت .
    به جای اینکه وقتی کلید ی رو فشار میدم 5 نشون بده این ولتاژ ها رو نشون میده .
    مقاومت پول پ هم داشتم ، حذفشون کردم هم مشکل حل نشد
    با سلام
    لطفا شماتیک مورد استفاده رو برای کی پد قرار بدین
    شما احتمالا از پین های کی پد جریانکشی دارین و این باعث افت ولتاژ میشه

    دیدگاه


      #3
      پاسخ : یک مشکل نامعلوم با کیپد

      سلام
      با اجازه دوست عزیز آقای کریمی
      پین مشترک کیپد رو زمین کنید.
      پینهای میکرو ورودی و pull-up داخلی بشن.
      بعد از فشردن هر کلید مقدار پین از 5 به 0 تغییر وضعیت میده.
      هر پین کیپد رو با یه خازن 100nf به زمین وصل کنید.
      موفق باشید.
      شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

      دیدگاه


        #4
        پاسخ : یک مشکل نامعلوم با کیپد


        اینم خدمت شما.
        مقاومت های پول پ 4.7 کیلو هستند
        براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

        دیدگاه


          #5
          پاسخ : یک مشکل نامعلوم با کیپد

          نوشته اصلی توسط شهاب طاهری
          سلام
          پین مشترک کیپد رو زمین کنید.
          پینهای میکرو ورودی و pull-up داخلی بشن.
          بعد از فشردن هر کلید مقدار پین از 5 به 0 تغییر وضعیت میده.
          هر پین کیپد رو با یه خازن 100nf به زمین وصل کنید.
          موفق باشید.
          تفاوت مشترک کردن مثبت 5 یا زمین تو چیه ؟ چه فرقی میکنه کدوم پین رو مشترک کنم؟
          براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

          دیدگاه


            #6
            پاسخ : یک مشکل نامعلوم با کیپد

            توی پست اولتون نوشتید که پین مشترک رو وصل کردید به 5 ولت ولی در شماتیک که قرار دادید اینطور نیست.
            حالا اگر پین مشترک رو به زمین وصل کنید و مقاومت پول پ بذارید با فشردن کلید، ولتاژ پین از سطح 5 به سطح 0 میره و در حالتی که پین مشترک به 5 ولت وصل بشه و مقاومت پول دان قرار بدید با فشردن کلید، ولتاژ پین از سطح 0 به سطح 5 میره.
            راجع به اینکه چه فرقی میکنه کدوم پین رو مشترک کنید، اونجوری که من متوجه شدم، کلا کیپد توی این حالت کاری انجام نمیده
            شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

            دیدگاه


              #7
              پاسخ : یک مشکل نامعلوم با کیپد

              سلام به همه
              دوست عزیز هر کلید رو با اهم متر تست کن و مقدار اهمش رو چک کن.
              یکی از روش های خوندن کلید رو پایه های میکرو استفاده از ولتاژی هست که میکرو میخونه.
              شیوه کار به این شکل هست که میان برای هر کلید مقاومتی رو قرار میدن حالا دیگه نیازی به اسکن تمام پایه ها به صورت رایج نیست و کافیه مقدار ولتاژ روی پایه ها مدام خونده بشه.
              برای این کار نیاز به ADC داری
              این شیوه باعث میشه بتونیم تعداد کلید بیشتری رو با اشغال کمتر پایه های میکرو بخونیم.
              اگر با تست اهم کلید ها دیدین هر کلید یه مقدار مقاومت خاص برای خودش داره و هیچ کدوم با دیگری برابر نیست یعنی این KEYPAD هم از این شیوه استفاده کرده.
              ----------------------------
              (یه راه ساده تر هم هست) میتونین با بخش پشتیبانی یا قسمت نظر برای محصولات پیام بزارین و از نوعش باخبر بشین.

              یا هر دو راه رو با هم انجام بدین


              اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
              شهيد دکتر مصطفي چمران
              اللهم صل علي محمد و ال محمد و عجل فرجهم
              ; C is not for children

              دیدگاه


                #8
                پاسخ : یک مشکل نامعلوم با کیپد

                مقاومتهای pulldown چند اهم هستن؟؟
                من تا الان این کیپد رو نخریدم و باهاش کار نکردم ولی بعضی از کیپدها قابلیت اتصال بین دو پایه هاشون با هم فرق داره و نباید انتظار داشته باشید که با فشردن کلید 2پایه خروجی کلید با هم اتصال کوتاه بشن.
                بنظرم همون روشی که دوستان بهش اشاره کردن بهترین و متداول ترین روشه (( پایه مشترک به GND و خروجیها به PULLUP وصل بشه ))

                دیدگاه


                  #9
                  پاسخ : یک مشکل نامعلوم با کیپد

                  نوشته اصلی توسط مهدی رهی
                  سلام به همه
                  دوست عزیز هر کلید رو با اهم متر تست کن و مقدار اهمش رو چک کن.
                  یکی از روش های خوندن کلید رو پایه های میکرو استفاده از ولتاژی هست که میکرو میخونه.
                  شیوه کار به این شکل هست که میان برای هر کلید مقاومتی رو قرار میدن حالا دیگه نیازی به اسکن تمام پایه ها به صورت رایج نیست و کافیه مقدار ولتاژ روی پایه ها مدام خونده بشه.
                  برای این کار نیاز به ADC داری
                  این شیوه باعث میشه بتونیم تعداد کلید بیشتری رو با اشغال کمتر پایه های میکرو بخونیم.
                  اگر با تست اهم کلید ها دیدین هر کلید یه مقدار مقاومت خاص برای خودش داره و هیچ کدوم با دیگری برابر نیست یعنی این KEYPAD هم از این شیوه استفاده کرده.
                  ----------------------------
                  (یه راه ساده تر هم هست) میتونین با بخش پشتیبانی یا قسمت نظر برای محصولات پیام بزارین و از نوعش باخبر بشین.

                  یا هر دو راه رو با هم انجام بدین
                  من از ADC استفاده نکردم اخه از مگا هشت استفاده کردم و پایه های PORTD0 تا PORTD4 رو برای اینکار استفاده کردم.
                  همون طور که عرض کردم در حالتی که خارج از PCB هستش ، وقتی میام یه ولتاژ 5 ولت رو میندازم روی پایه مشترک این کیپد و با فشردن هر کلید این ولتاژ رو میخونم مقدار 5 رو نشون میده . نه کم تر نه بیشتر.
                  وقتی با بوق اهم متر هم چک میکنم این موضوع صدق میکنه یعنی با فشردن هر کلید اتصال کوتاه میشه .
                  مقدار اهم هر کلید رو هم چک کردم مقدارش کم تر از 1 اهمه حدودا 0.6 اهمه. چون اگه اهم کلید ها بیشتر باشه اهم متر در حالت بوق ، بوق نمیزنه
                  براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                  دیدگاه


                    #10
                    پاسخ : یک مشکل نامعلوم با کیپد

                    نوشته اصلی توسط saeiddiod
                    مقاومتهای pulldown چند اهم هستن؟؟
                    من تا الان این کیپد رو نخریدم و باهاش کار نکردم ولی بعضی از کیپدها قابلیت اتصال بین دو پایه هاشون با هم فرق داره و نباید انتظار داشته باشید که با فشردن کلید 2پایه خروجی کلید با هم اتصال کوتاه بشن.
                    بنظرم همون روشی که دوستان بهش اشاره کردن بهترین و متداول ترین روشه (( پایه مشترک به GND و خروجیها به PULLUP وصل بشه ))
                    4700 اهم .
                    حق باشماس شاید بعضی کیپد ها فرق کنن ... اما وقتی که کلید رو فشار میدم و بوق اهم متر صداش در میاد معنیش اینه که اتصال کوتاه شده.
                    در مورد روش ممنونم . چشم حتما چک میکنم
                    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                    دیدگاه


                      #11
                      پاسخ : یک مشکل نامعلوم با کیپد

                      چرا من وقتی روی پورت D کیپد رو میذارم این خطا وجود داره ولی وقتی میذارم روی پورت C اینطور خطایی وجود نداره؟
                      براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                      دیدگاه


                        #12
                        پاسخ : یک مشکل نامعلوم با کیپد

                        به کامپایلر توجه کن - ممکنه یسری از پین ها رو فعال کرده - مثل rxd , txt و غیره
                        هر دوتا gnd میکرو رو وصل کن
                        البته ممکنه ترانزیستورهای درایور پورت آسیب دیده باشن

                        دیدگاه


                          #13
                          پاسخ : یک مشکل نامعلوم با کیپد

                          نوشته اصلی توسط yousef55
                          به کامپایلر توجه کن - ممکنه یسری از پین ها رو فعال کرده - مثل rxd , txt و غیره
                          هر دوتا gnd میکرو رو وصل کن
                          البته ممکنه ترانزیستورهای درایور پورت آسیب دیده باشن
                          میکروکنترلر رو دوبار عوض کردم همین بود
                          پین های AREF-ACVV رو هم به 5 و GND ها رو هم به زمین وصل کردم
                          براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                          دیدگاه


                            #14
                            پاسخ : یک مشکل نامعلوم با کیپد

                            بذارید شماتیک و فایل پی سی بی رو هم بذارم براتون.
                            میکرو کنترلر : اتمگا هشت
                            پایه 1 مستقیما به مثبت 5 وصل شده .
                            پایه های کیپد از پایه 2 تا تا پایه 7 : جمعا 6 پایه که پایه مشترک به 5 ولت وصله
                            خازن 100 میکرو بین پایه های 7 و 8 یعنی تغذیه میکرو(5ولت)
                            خازن 100 میکرو بین پایه های 20-21 و 22 یعنی تغذیه میکرو
                            پایه 9 با یک مقاومت 100 اهم وصل شده به یک ترانزیستور Tip41c و خروجی پایه 2 این ترانزیستور وصل شده به یک بازر 12 ولتی که منفی این بازر از ترانزیستور تامین میشه و مثبت 12 ولتش از ورودی تغذیه میشه.
                            پایه 10 و 11و12 رها هستند
                            پایه 13 با یک مقاومت 100 اهم وصل شده به یک ترانزیستور Tip41c و خروجی ترانزیستور وصل شده به منفی رله . همچنین مثبت رله از برق 12 ورودی تامین میشه.
                            پایه 14 و 15 رها هستند
                            پایه 16 به یک ال ای دی وصل شده
                            پایه 17 و 18 و19 رها هستند
                            پایه 20 و 21 به مثبت 5 هستند
                            پایه 22 به زمین وصل شده
                            پایه 23 تا 28 هم رها هستند.
                            بین پایه 20و21 و 22 یک خازن 100 میکرو وصل شده
                            برق ورودی 12 ولت متناوب هست که با یک پل دیود به مستقیم تبدیل میشه.
                            12 ولت رله و بازر از برق مستقیم شده تامین میشند
                            در خروجی رله جهت جریان معکوس از دیود هرز گرد استفاده شده .
                            همچنین یک خازن 1000 میکرو فاراد هم در خروجی 12 ولت مستقیم قرار داده شده.

                            کار این مدار هم اینطوریه که کاربر با وارد کردن یک رمز 4 رقمی اگر درست بود رله عمل میکنه . ال ای دی جهت نشان دادن وضعیت سالم بودن مدار هست و به صورت مداوم چشمک میزنه. بازر هم اینطور عمل میکنه که هر وقت کاربر کلیدی رو فشار داد یک بوق تون میزنه که کاربر بفهمه که کلید عمل کرده.

                            کجای مدار من مشکل داره که این خطا رو به وجود میاره.
                            لازمه بگم که این مدار روی PORTC و روی برد برد راحت جواب میده-البته اونجا به جای رله و بازر از ال ای دی استفاده کردم

                            کد:
                            /*
                             * FF PassWord.c
                             *
                             * Created: 1/4/2016 10:37:11 AM
                             * Author : Mohsen
                             */ 
                            #ifndef F_CPU
                            #define F_CPU 8000000UL
                            #endif
                            //////////////////////////////////////////////////////////////////////////
                            #include <avr/io.h>
                            #include <util/delay.h>
                            #include <avr/interrupt.h>
                            #include <avr/eeprom.h>
                            //////////////////////////////////////////////////////////////////////////
                            #define KEY1_PORT PORTD
                            #define KEY1_PIN PIND
                            #define KEY1_DDR DDRD
                            #define KEY1_BIT 0
                            //////////////////////////////////////////////////////////////////////////
                            #define KEY2_PORT PORTD
                            #define KEY2_PIN PIND
                            #define KEY2_DDR DDRD
                            #define KEY2_BIT 1
                            //////////////////////////////////////////////////////////////////////////
                            #define KEY3_PORT PORTD
                            #define KEY3_PIN PIND
                            #define KEY3_DDR DDRD
                            #define KEY3_BIT 2
                            //////////////////////////////////////////////////////////////////////////
                            #define KEY4_PORT PORTD
                            #define KEY4_PIN PIND
                            #define KEY4_DDR DDRD
                            #define KEY4_BIT 3
                            //////////////////////////////////////////////////////////////////////////
                            #define KEY5_PORT PORTD
                            #define KEY5_PIN PIND
                            #define KEY5_DDR DDRD
                            #define KEY5_BIT 4
                            //////////////////////////////////////////////////////////////////////////
                            #define OUT_PORT PORTD
                            #define OUT_PIN  PIND
                            #define OUT_DDR  DDRD
                            #define OUT_BIT  7
                            //////////////////////////////////////////////////////////////////////////
                            #define LED_PORT PORTB
                            #define LED_PIN  PINB
                            #define LED_DDR  DDRB
                            #define LED_BIT  2
                            //////////////////////////////////////////////////////////////////////////
                            #define BUZZER_PORT PORTB
                            #define BUZZER_PIN  PINB
                            #define BUZZER_DDR  DDRB
                            #define BUZZER_BIT  6
                            //////////////////////////////////////////////////////////////////////////
                            #define insert_password          0
                            #define change_pass_insert_old_password  1
                            #define change_pass_insert_new_password_1 2
                            #define change_pass_insert_new_password_2 3
                            //////////////////////////////////////////////////////////////////////////
                            unsigned char default_password[4]={'4','4','4','4'};
                            unsigned char in_pass[4]={0,0,0,0};
                            unsigned char insert_old_password[4]={0,0,0,0};
                            unsigned char insert_new_password1[4]={0,0,0,0};
                            unsigned char insert_new_password2[4]={0,0,0,0};
                            //////////////////////////////////////////////////////////////////////////	
                            #define password_length 4
                            #define TurnOnTimeDelay 500//RELAY
                            #define TurnOnLedTime  500
                            #define OVF_time     10
                            #define EEPROM_INCLUDED 1
                            
                            unsigned char pass_cntr=0,led_cntr=0;
                            unsigned char pass_change_flag=0;
                            unsigned int reset_cntr=0;
                            unsigned char password_mode=insert_password;
                            //////////////////////////////////////////////////////////////////////////
                            void dlyms(unsigned int ms)
                            {
                            	for(unsigned int i=0;i<ms;i++) _delay_ms(1);
                            }
                            void sound(unsigned int dly,unsigned int rpt)
                            {
                            	for(unsigned int i=0;i<rpt;i++)
                            	{
                            		BUZZER_PORT|=(1<<BUZZER_BIT);//High
                            		dlyms(dly);
                            		BUZZER_PORT&=~(1<<BUZZER_BIT);//Low
                            		dlyms(dly);
                            	}
                            }
                            //////////////////////////////////////////////////////////////////////////
                            ISR(TIMER0_OVF_vect)
                            {
                            	// Reinitialize Timer 0 value
                            	TCNT0=0x64;
                            	//////////////////////////////////////////////////////////////////////////
                            	if(++reset_cntr>=200) //if user not press any key for a little time mode change automatically to first mode
                            	{
                            		password_mode=insert_password;
                            		pass_cntr=0;
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	if((++led_cntr)>=(TurnOnLedTime/ OVF_time))// blink a test led with a blinking time
                            	{
                            		LED_PORT^=(1<<LED_BIT);//Toggle Led
                            		led_cntr=0;
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	if(password_mode==insert_password)// in normal we get password from user and turn on output if this pasword is correct
                            	{
                            		if(!(KEY1_PIN & (1<<KEY1_BIT)))
                            		{
                            			reset_cntr=0;
                            			in_pass[pass_cntr++]='1';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY2_PIN & (1<<KEY2_BIT)))
                            		{
                            			reset_cntr=0;
                            			in_pass[pass_cntr++]='2';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY3_PIN & (1<<KEY3_BIT)))
                            		{
                            			reset_cntr=0;
                            			in_pass[pass_cntr++]='3';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY4_PIN & (1<<KEY4_BIT)))
                            		{
                            			reset_cntr=0;
                            			in_pass[pass_cntr++]='4';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(pass_cntr==password_length)
                            		{
                            			if ((in_pass[0]==default_password[0])&&(in_pass[1]==default_password[1])&&(in_pass[2]==default_password[2])&&(in_pass[3]==default_password[3]))
                            			{
                            				pass_cntr=0;
                            				OUT_PORT|=(1<<OUT_BIT);//Low
                            				_delay_ms(TurnOnTimeDelay);
                            				OUT_PORT&=~(1<<OUT_BIT);//Low
                            			}
                            			else 
                            			{
                            				pass_cntr=0;
                            				sound(10,10);
                            				_delay_ms(500);
                            			}
                            		}
                            		if(!(KEY5_PIN & (1<<KEY5_BIT)))
                            		{
                            			reset_cntr=0;
                            			pass_cntr=0;
                            			password_mode=change_pass_insert_old_password;
                            			sound(500,1);
                            			_delay_ms(450);
                            		}
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	else if(password_mode==change_pass_insert_old_password)//if user in normal mode push key 5 : he must enter old password and enter 2 time new password 
                            	{
                            		if(!(KEY1_PIN & (1<<KEY1_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_old_password[pass_cntr++]='1';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY2_PIN & (1<<KEY2_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_old_password[pass_cntr++]='2';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY3_PIN & (1<<KEY3_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_old_password[pass_cntr++]='3';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY4_PIN & (1<<KEY4_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_old_password[pass_cntr++]='4';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(pass_cntr==password_length)
                            		{
                            			if ((insert_old_password[0]==default_password[0])&&(insert_old_password[1]==default_password[1])&&(insert_old_password[2]==default_password[2])&&(insert_old_password[3]==default_password[3]))
                            			{
                            				pass_cntr=0;
                            				password_mode=change_pass_insert_new_password_1;
                            				sound(200,2);
                            			}
                            			else
                            			{
                            				pass_cntr=0;
                            				password_mode=insert_password;
                            				_delay_ms(500);
                            			}
                            		}
                            		if(!(KEY5_PIN & (1<<KEY5_BIT)))
                            		{
                            			reset_cntr=0;
                            			pass_cntr=0;
                            			password_mode=insert_password;
                            			sound(20,10);
                            			_delay_ms(450);
                            		}
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	else if(password_mode==change_pass_insert_new_password_1)
                            	{
                            		if(!(KEY1_PIN & (1<<KEY1_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password1[pass_cntr++]='1';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY2_PIN & (1<<KEY2_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password1[pass_cntr++]='2';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY3_PIN & (1<<KEY3_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password1[pass_cntr++]='3';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY4_PIN & (1<<KEY4_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password1[pass_cntr++]='4';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(pass_cntr==password_length)
                            		{
                            			pass_cntr=0;
                            			password_mode=change_pass_insert_new_password_2;
                            			sound(100,4);
                            		}
                            		if(!(KEY5_PIN & (1<<KEY5_BIT)))
                            		{
                            			reset_cntr=0;
                            			pass_cntr=0;
                            			password_mode=insert_password;
                            			sound(20,10);
                            			_delay_ms(450);
                            		}
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	else if(password_mode==change_pass_insert_new_password_2) 
                            	{
                            		if(!(KEY1_PIN & (1<<KEY1_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password2[pass_cntr++]='1';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY2_PIN & (1<<KEY2_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password2[pass_cntr++]='2';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY3_PIN & (1<<KEY3_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password2[pass_cntr++]='3';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY4_PIN & (1<<KEY4_BIT)))
                            		{
                            			reset_cntr=0;
                            			insert_new_password2[pass_cntr++]='4';
                            			sound(50,1);
                            			_delay_ms(450);
                            		}
                            		if(pass_cntr==password_length)
                            		{
                            			if ((insert_new_password2[0]==insert_new_password1[0])&&(insert_new_password2[1]==insert_new_password1[1])&&(insert_new_password2[2]==insert_new_password1[2])&&(insert_new_password2[3]==insert_new_password1[3]))
                            			{
                            			pass_cntr=0;
                            			default_password[0]=insert_new_password2[0];
                            			default_password[1]=insert_new_password2[1];
                            			default_password[2]=insert_new_password2[2];
                            			default_password[3]=insert_new_password2[3];
                            			
                            			eeprom_update_byte((uint8_t *)0x00,default_password[0]);
                            			eeprom_update_byte((uint8_t *)0x01,default_password[1]);
                            			eeprom_update_byte((uint8_t *)0x02,default_password[2]);
                            			eeprom_update_byte((uint8_t *)0x03,default_password[3]);
                            			
                            			password_mode=insert_password;
                            			sound(50,8);
                            			_delay_ms(450);
                            		}
                            		if(!(KEY5_PIN & (1<<KEY5_BIT)))
                            		{
                            			reset_cntr=0;
                            			pass_cntr=0;
                            			password_mode=insert_password;
                            			sound(20,10);
                            			_delay_ms(450);
                            		}
                            	}
                            	//////////////////////////////////////////////////////////////////////////
                            	}
                            }
                            //////////////////////////////////////////////////////////////////////////
                            int main(void)
                            {
                              /*
                               *	load eeprom setting
                               */
                            	#if (EEPROM_INCLUDED==1)
                            	eeprom_busy_wait();
                            	default_password[0]=eeprom_read_byte((uint8_t *)0x00);
                            	if(default_password[0]==0xff) 
                            	{
                            		eeprom_update_byte((uint8_t *)0x00,'4');
                            		default_password[0]='4';
                            	}
                            	default_password[1]=eeprom_read_byte((uint8_t *)0x01);
                            	if(default_password[1]==0xff) 
                            	{
                            		eeprom_update_byte((uint8_t *)0x01,'4');
                            		default_password[1]='4';
                            	}
                            	default_password[2]=eeprom_read_byte((uint8_t *)0x02);
                            	if(default_password[2]==0xff) 
                            	{
                            		eeprom_update_byte((uint8_t *)0x02,'4');
                            		default_password[2]='4';
                            	}
                            	default_password[3]=eeprom_read_byte((uint8_t *)0x03);
                            	if(default_password[3]==0xff) 
                            	{
                            		eeprom_update_byte((uint8_t *)0x03,'4');
                            		default_password[3]='4';
                            	}
                            	#endif
                            	/*
                            	 *	initialize push buttons
                            	 */
                            	KEY1_DDR|=(1<<KEY1_BIT);//Input
                            	KEY2_DDR|=(1<<KEY2_BIT);//Input
                            	KEY3_DDR|=(1<<KEY3_BIT);//Input
                            	KEY4_DDR|=(1<<KEY4_BIT);//Input
                            	KEY5_DDR|=(1<<KEY5_BIT);//Input
                            	
                            	KEY1_PORT|=(1<<KEY1_BIT);//Tristate
                            	KEY2_PORT|=(1<<KEY2_BIT);//Tristate
                            	KEY3_PORT|=(1<<KEY3_BIT);//Tristate
                            	KEY4_PORT|=(1<<KEY4_BIT);//Tristate
                            	KEY5_PORT|=(1<<KEY5_BIT);//Tristate
                            	/*
                            	 *	initialize output led ,buzzer and output relay
                            	 */
                            	OUT_DDR|=~(1<<OUT_BIT);//Output
                            	OUT_PORT&=~(1<<OUT_BIT);//Low
                            	
                            	LED_DDR|=~(1<<LED_BIT);//Output
                            	LED_PORT&=~(1<<LED_BIT);//Low
                            	
                            	BUZZER_DDR|=~(1<<BUZZER_BIT);//Output
                            	BUZZER_PORT&=~(1<<BUZZER_BIT);//Low
                            	/*
                            	 *	initalize timer 0 with 10ms over flow time
                            	 */
                            	// Timer/Counter 0 initialization
                            	// Clock source: System Clock
                            	// Clock value: 15.625 kHz
                            	// OverFlow Time : 10 ms
                            	TCCR0=(1<<CS02) | (0<<CS01) | (1<<CS00);
                            	TCNT0=0x64;
                            	// Timer(s)/Counter(s) Interrupt(s) initialization
                            	TIMSK=(1<<TOIE0);
                            	sei();
                            	/*
                            	 *	a loop forever
                            	 */
                              while (1);
                            }
                            براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                            دیدگاه

                            لطفا صبر کنید...
                            X