اطلاعیه

Collapse
No announcement yet.

مشکل با eeprom

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

    مشکل با eeprom

    سلام دوستان
    من ی برنامه قفل نوشتم که توش وقتی مثلا ی رمز پیش فرض به شکل زیر تعریف میکنم خوب کار میکنه
    char pass[7]={1,2,3,4,5,6};
    ولی وقتی این خط رو حذف می کنم و به جاش از حافظه eeprom داخلی استفاده میکنم دیگه جواب نمیده کد رو به صورت زیر می نویسم
    char eeprom pass[7]={1,2,3,4,5,6};
    من اینو تو پروتئوس چک کردم جواب نمیده
    خواستم تو میکرو امتحان کنم که out of memory:error رو داد چرا این error رو داده؟مشکل کجاس؟

    #2
    پاسخ : مشکل با eeprom

    نوشته اصلی توسط aminima
    سلام دوستان
    من ی برنامه قفل نوشتم که توش وقتی مثلا ی رمز پیش فرض به شکل زیر تعریف میکنم خوب کار میکنه
    char pass[7]={1,2,3,4,5,6};
    ولی وقتی این خط رو حذف می کنم و به جاش از حافظه eeprom داخلی استفاده میکنم دیگه جواب نمیده کد رو به صورت زیر می نویسم
    char eeprom pass[7]={1,2,3,4,5,6};
    من اینو تو پروتئوس چک کردم جواب نمیده
    خواستم تو میکرو امتحان کنم که out of memory:error رو داد چرا این error رو داده؟مشکل کجاس؟
    سلام مگه نباید
    eeprom char باشه؟

    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


      #3
      پاسخ : مشکل با eeprom

      نوشته اصلی توسط (مهدی رنجبر)m4hd1r
      سلام مگه نباید
      eeprom char باشه؟
      فرقی نمیکنه
      جفتشم کار نکرده....

      دیدگاه


        #4
        پاسخ : مشکل با eeprom

        نوشته اصلی توسط aminima
        فرقی نمیکنه
        جفتشم کار نکرده....
        چه جالب
        میکروتون چیه؟

        head<=
        ...تشکر خدا...
        [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

        دیدگاه


          #5
          پاسخ : مشکل با eeprom

          نوشته اصلی توسط (مهدی رنجبر)m4hd1r
          چه جالب
          میکروتون چیه؟
          mega8

          دیدگاه


            #6
            پاسخ : مشکل با eeprom

            رجیستر EERC رو هم برای خواندن و نوشتن استفاده می کنید؟؟؟
            چون خواندن و نوشتن توی E2PROM یکم دردسر دره :smile:
            ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

            امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

            دیدگاه


              #7
              پاسخ : مشکل با eeprom

              من دارم با proteus 7.1 تست میکنم جواب میده و مشکلی نداره

              کد هم اینه
              بدون اررور از این میگذره
              کد:
              #include <mega8.h>
              eeprom char b[5] = {1,2,3,5};
              void main(void)
              {
              while (1)
                 {
                 }
              }
              اگر این رو نمیتونه جواب بده که هیچی ولی اگر موقع خوندن نوشتن مشکل داره بگید ببینیم جه میشه کرد

              head<=
              ...تشکر خدا...
              [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

              دیدگاه


                #8
                پاسخ : مشکل با eeprom

                نوشته اصلی توسط (مهدی رنجبر)m4hd1r
                من دارم با proteus 7.1 تست میکنم جواب میده و مشکلی نداره

                کد هم اینه
                بدون اررور از این میگذره
                کد:
                #include <mega8.h>
                eeprom char b[5] = {1,2,3,5};
                void main(void)
                {
                while (1)
                   {
                   }
                }
                اگر این رو نمیتونه جواب بده که هیچی ولی اگر موقع خوندن نوشتن مشکل داره بگید ببینیم جه میشه کرد
                ببخشید فک کنم منظورمو متوجه نشدید
                منظورم اینه که وقتی رمز تو حافظه فلش نوشته میشه برنامه کار میکنه و تو برنامه که کدی که از کیپد میگیره رو با اون مقایسه میکنه و درسته
                ولی دقیقا به جای اون کد دومی رو مینویسم و تو eeprom ذخیره میکنم برنامه ارور نمیده ولی تو مقایسه برنامه ام درست مقایسه نمیکنه
                همه چی درست نوشته شده مگه نباید وقتی این دورو جایگزین کردم برنامه به درستی مثل قبل کار کنه؟؟؟

                دیدگاه


                  #9
                  پاسخ : مشکل با eeprom

                  برنامه ات رو میذاری؟؟ :smile:
                  ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

                  امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

                  دیدگاه


                    #10
                    پاسخ : مشکل با eeprom

                    نوشته اصلی توسط AliRezaDAVE
                    برنامه ات رو میذاری؟؟ :smile:
                    فکر کنم تنها راه همین باشه

                    نوشته اصلی توسط aminima
                    ببخشید فک کنم منظورمو متوجه نشدید
                    منظورم اینه که وقتی رمز تو حافظه فلش نوشته میشه برنامه کار میکنه و تو برنامه که کدی که از کیپد میگیره رو با اون مقایسه میکنه و درسته
                    ولی دقیقا به جای اون کد دومی رو مینویسم و تو eeprom ذخیره میکنم برنامه ارور نمیده ولی تو مقایسه برنامه ام درست مقایسه نمیکنه
                    همه چی درست نوشته شده مگه نباید وقتی این دورو جایگزین کردم برنامه به درستی مثل قبل کار کنه؟؟؟
                    آره اشتباه فهمیدم ولی هنوزم درسته کد زیر منظورتون رو میرسونه؟
                    کد:
                    #include <mega8.h>
                    eeprom char b[5] = {1,2,3,4,5};
                    char i = 2;
                    char j;
                    void main(void)
                    {
                    
                    //b[0] = 1;
                    DDRD = 0xFF;
                    while (1)
                       {
                       if(b[0]==i)
                       PORTD = 7;
                       else
                       PORTD = 3; 
                       }
                    }
                    الان باید به ازای مقادیر مختلف i \ورت D عوض بشه مثلا 1 بشه 7 و غیر 1 بشه 3 که میشه

                    head<=
                    ...تشکر خدا...
                    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

                    دیدگاه


                      #11
                      پاسخ : مشکل با eeprom

                      نوشته اصلی توسط AliRezaDAVE
                      برنامه ات رو میذاری؟؟ :smile:
                      برنامه ام خیلی پیچیده بود که خیلیش که اصلا ربطی به این قضیه نداشتو حذف کردم
                      اینم ساده شدش بفرمایید
                      به برنامه کیپدشم گیر ندید کیپد من اینجوریه
                      کد:
                      #include <mega8.h>
                      #include <delay.h>
                      #include <alcd.h>
                      #include <stdio.h>
                      #include <ctype.h>
                      #define c0 PIND.4
                      #define c1 PIND.5
                      #define c2 PIND.6
                      #define c3 PIND.7
                      
                      flash char row[4]={0xfe,0xfd,0xfb,0xf7};
                      flash char data_key[]={
                      'a', '1', '2', '3',
                      'b', '4', '5', '6',
                      'c', '7', '8', '9',
                      'd', '*', '0', '#',
                      };
                      
                      int r = -1,c=-1,position,one;
                      char key;
                      char keypad(void)
                      {
                      while(1){
                        for(r=0; r<4; r++){
                          c=-1;
                          PORTC=row[r];
                          if(c0 == 0)c=0;
                          if(c1 == 0)c=1;
                          if(c2 == 0)c=2;
                          if(c3 == 0)c=3;
                          if(c != -1){
                            position = r*4 + c;
                            key = data_key[position];
                            
                            
                            while(c0 == 0){;}
                            while(c1 == 0){;}
                            while(c2 == 0){;}
                            while(c3 == 0){;}
                            delay_ms(75);//debounce
                      
                            return key;
                          }
                          
                        }//for
                        }//while
                          
                      
                      }
                      
                      //eeprom char pass[7]={1,2,3,4,5,6};
                      char pass[7]={1,2,3,4,5,6};
                      char ps[7];
                      int i,x,ps_num,ps_n=0;
                      void state_machine(char key){
                        switch(state){
                         
                         case v1:
                         if(key!='*' && key!='#'){
                          
                          if(x<6){
                          ps[x]=toint(key);
                         // ps[x]=key;
                          lcd_gotoxy(x,1);
                          //lcd_putsf("*");
                          lcd_putchar(key);
                          x++;}
                          if(x==6){
                          delay_ms(100);
                          for(ps_n=0;ps_n<6;ps_n++){
                          if(ps[ps_n]==pass[ps_n]){
                          ps_num++;} }
                          if(ps_num==6)ps_num=10;
                           else ps_num=20;
                          if(ps_num==10){
                          lcd_clear();
                          lcd_putsf("DOOR OPENED");
                          delay_ms(1000);
                          lcd_gotoxy(2,0);
                          lcd_putsf("Press '*' PLZ");
                          state=v2;i=0;x=0;ps_num=0;}
                          if(ps_num==20){
                          lcd_clear();
                          lcd_putsf("INVALID PASSWORD");
                          delay_ms(1500);
                          state=v1;
                          i++;ps_num=0;
                          if(i<3){
                          lcd_clear();
                          lcd_putsf("(((TRY AGAINE)))");
                          delay_ms(2000);
                          lcd_clear();
                          lcd_putsf("ENTER PASSWORD:");x=0;lcd_on=0;}
                          else{
                          lcd_clear();
                          lcd_putsf("PLZ TRY AGAINE");
                          lcd_gotoxy(0,1);
                          lcd_putsf("AFTER 5 MINUTE");
                          
                          }}}
                         }
                            
                         case v2:
                         if(key=='*'){
                         //lcd:on
                         lcd_clear();
                         lcd_putsf("ENTER PASSWORD:");
                         x=0;state=v1;}
                         break; 
                      
                       }
                      }
                      
                      void main(void)
                      {
                      PORTB=0x00;
                      DDRB=0x00;
                      PORTC=0x00;
                      DDRC=0x0F;
                      PORTD=0xE0;
                      DDRD=0x10;
                      lcd_init(16);
                      lcd_putsf("ENTER PASSWORD:");
                      #asm("sei")
                      
                      while (1)
                         {
                         one= keypad(); 
                         state_machine(key);
                         }
                      }

                      دیدگاه


                        #12
                        پاسخ : مشکل با eeprom

                        برای خوندن و نوشتن توی e2prom باید EECR کار کنید که بهتره به دیتاشیت مراجعه کنید و براساس بیتهای کنترلی، قسمت مربوط به خواندن و نوشتن رو اسمبلی بنویسید. خیالتون هم راحت تره. چون E2PROM برعکس فلش خوندن و نوشتن ازش دنگ و فنگ داره و باید برای نوشتن 4 کلاک قبل و خواندن 2کلاک بعدش صبر کنید. :smile:
                        ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

                        امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

                        دیدگاه


                          #13
                          پاسخ : مشکل با eeprom

                          نوشته اصلی توسط AliRezaDAVE
                          برای خوندن و نوشتن توی e2prom باید EECR کار کنید که بهتره به دیتاشیت مراجعه کنید و براساس بیتهای کنترلی، قسمت مربوط به خواندن و نوشتن رو اسمبلی بنویسید. خیالتون هم راحت تره. چون E2PROM برعکس فلش خوندن و نوشتن ازش دنگ و فنگ داره و باید برای نوشتن 4 کلاک قبل و خواندن 2کلاک بعدش صبر کنید. :smile:
                          میشه راهنمایی کنید اون قسمتشو چجوری باید بنویسم
                          اسمبلیم اصلا خوب نیس
                          اگه کمکم کنید ممنون میشم

                          دیدگاه


                            #14
                            پاسخ : مشکل با eeprom

                            مهندس جان پیرمون کردی تا کامپایلش کنیم .. :biggrin:
                            جدا از بحث های مربوط به رجیستر کنترلی EECR که دوستمون میگن
                            من شما رو به نصب یه ورژن دیگه پروتوس دعوت میکنم !!!
                            اصلا این برنامه تو پروتوس من مشکلی نداره.

                            head<=
                            ...تشکر خدا...
                            [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

                            دیدگاه


                              #15
                              پاسخ : مشکل با eeprom

                              نوشته اصلی توسط (مهدی رنجبر)m4hd1r
                              مهندس جان پیرمون کردی تا کامپایلش کنیم .. :biggrin:
                              جدا از بحث های مربوط به رجیستر کنترلی EECR که دوستمون میگن
                              من شما رو به نصب یه ورژن دیگه پروتوس دعوت میکنم !!!
                              اصلا این برنامه تو پروتوس من مشکلی نداره.
                              شرمنده به خدا مهندس
                              من تو سیستمم فعلا همین ورژنو دارم(ورژن 7.8) اخه خیلی باهاش کار کردم مشکلی تا حالا نداشته
                              حالا جدا از اون
                              من میخواستم اینو تو عمل امتحان کنم که نمیدونم چرا ارور out of memory میده شما نمیدونید چرا اینجوریه؟
                              چیکار کنم که بتونم eeprom رو به میکرو پروگرم کنم


                              شرمنده مهندس جان
                              ی سوال
                              شما وقتی برنامه رو تو پروتئوس اجرا کردید
                              اون کد e2prom رو که کامنت کرده بودم رو به برنامه اضافه کردید؟؟
                              همزمان باید کد خط زیریشو کامنت کنیدااا
                              این کارم کردید و با زدن رمز در باز شد؟؟

                              دیدگاه

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