اطلاعیه

Collapse
No announcement yet.

باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

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

    #31
    پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غر&#16

    نوشته اصلی توسط امیر . م
    چند تا مورد :
    اول : چرا پین SCK رو خروجی تعریف نکردی؟
    دوم : همه printf ها و از تو روتین read , write حذف کن. چون کل زمانبندی بین سیگنالهای i2c رو به هم میزنه.
    اگر خواستی اخر روتین printf بزار.
    سوم : چرا تو read , write آدرس شما char هست؟ در صورتیکه باید int باشه.
    چهارم : قبلا گفتم بهت تاخیر write رو بزار رو 10 .چون بعضی از eeprom i2c ها تاخیر بیشتری نیاز دارند. برای اطمینان بیشتر قبل از اینکه دیتا رو بخونی یه تاخیر دیگه بزار.(ای تاخیر ها شاید لزومی نداشته باشند اما برای پیدا کردن مشکل لازمه.)
    در پایان : اگر مداری تو پروتئوس کار کرد حتما دلیل نمیشه که تو عمل هم جواب بده. این رو همیشه یادت باشه.خیلی به پروتئوس اعتماد نکن.

    این سه تا کار رو انجام بده و نتیجه رو اعلام کن.
    (حالا پروتئوس که هیچی ولی بردبورد که دلیل میشه)
    SCL رو خروجی کردم تاثیری نداشت. بقیه رو هم قبلا تست کرده بودم با این حال یه بار دیگه امتحان کردم نشد. (printf ها رو حذف کردم تاخیرها رو هم زیاد کردم.) (آدرسا تو برنامه قبلیم int بودن نمیدونم چرا اینجا اشتباها char گذاشتم. oo: البته مشکل از این نیست چون آدرس نوشتن و خوندن یکی میشه.)
    اون eeprom که smd روی بورد هست که هیچی کلا 255 میده. ولی اون یکی که دیپه روی بورد سوراخ داره امروز مشکلش یه کم تغییر کرده گاهی اوقات 255 میده که نشون میده که دستورات درست اجرا نشدن بعضی اوقات هم نشون میده ولی مقادیر دیگه ای رو به جای 16 که بهش دادم نشون میده یه بار 50 یه بار 79 و ... .(در ضمن دو تا قطعه رو جداجدا تست کردم نه همزمان.)
    از بابت ckopt هم خیالتون راحت چون دارم از اسیلاتور داخلی استفاده میکنم چون کریستالش به دلایل نامعلومی کلا تعطیله. البته اسیلاتورش به خوبی داره کار میکنه چون با پورت سریال مشکلی نداره الان.
    در کل وقتی روی بردبورد کار کرده میتونیم نتیجه بگیریم ایراد سخت افزاریه دیگه.

    دیدگاه


      #32
      پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

      ظاهراً که برنامه درسته
      تغذیه را از چی استفاده میکنی ؟
      روی برد سوراخ در هیچ وقت مدار نبند :angry: گاهاً مشکلاتی بوجود میاره که به تخیلاتت هم نمیگنجه
      قبلاً با این EEPROM کار کردی ؟ نکنه چینیه درجه 1000 هست و مثل بعضی IC ها پروتکلش فرق داره

      موفق باشید
      امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #33
        پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

        سلام آقای redown
        ببخشید میتونم ازتون خواهش کنم فایل پروتئوستونو بزارین؟
        منم یه برنامه ساده نوشتم که یه بایتو توی آدرس صفر eeprom خارجی مینویسه و از همون آدرس دوباره میخونه و روی PORTB نشون میده،اما نمیدونم چرا همش مقدار 255 را روی پورت نشون میده!!
        توی پروتئوس AT24C02 نیست اما AT24C512B هست.
        میخام ببینم مشکل از برنامس یا پروتئوس؟
        ممنون میشم.
        کد:
        #include <mega8.h>
        #include <delay.h>
        // I2C Bus functions
        #asm
          .equ __i2c_port=0x15 ;PORTC
          .equ __sda_bit=0
          .equ __scl_bit=1
        #endasm
        #include <i2c.h>
        
        #define EEPROM_BUS_ADDRESS 0xa0
        
        
        /* read a byte from the EEPROM */
        unsigned char eeprom_read(unsigned char address) {
        unsigned char data;
        i2c_start();
        i2c_write(EEPROM_BUS_ADDRESS);
        i2c_write(address);
        i2c_start();
        i2c_write(EEPROM_BUS_ADDRESS | 1);
        data=i2c_read(0);
        i2c_stop();
        return data;
        }
        
        /* write a byte to the EEPROM */
        void eeprom_write(unsigned char address, unsigned char data) {
        i2c_start();
        i2c_write(EEPROM_BUS_ADDRESS);
        i2c_write(address);
        i2c_write(data);
        i2c_stop();
        /* 10ms delay to complete the write operation */
        delay_ms(10);
        }
        
        void main(void){
        unsigned char i;
        PORTB=0x00;
        DDRB=0xFF;
        // I2C Bus initialization
        i2c_init();
        /* write the byte 55h at address 00h */
        eeprom_write(0x00,0x55);
        /* read the byte from address 00h */
        i=eeprom_read(0x00);
        PORTB=i;
        while (1);
        }

        دیدگاه


          #34
          پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

          AT24C02 دارای آدرس یک بایتی و AT24c512B دارای آدرس دو بایتی هست. بنابراین برنامه شما که برای آدرس یک بایتی هست روی اون درست عمل نمیکنه.

          دیدگاه


            #35
            پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

            خیلی ممنون آقا امیر
            میشه لطفا بگین برناممو کجاشو باید اصلاح کنم؟

            دیدگاه


              #36
              پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

              آقا امیر من تو پروتئوس AT24C02 رو هم پیدا کردم امتحان میکنم ببینم جواب میده
              خیلی ممنون

              دیدگاه


                #37
                پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                آقا امیر من با AT24C02 تو پروتئوس امتحان کردم برنامم جواب داد! :applause:
                فقط یه سوال اینکه مثلا اگه تو آدرس 0x00 یه بایت مینویسم،آدرس بعدی برا بایت بعدی میشه 0x01 یا 8 تا بیت اونورتر یعنی 0x08؟

                دیدگاه


                  #38
                  پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                  نوشته اصلی توسط halford
                  آقا امیر من با AT24C02 تو پروتئوس امتحان کردم برنامم جواب داد! :applause:
                  فقط یه سوال اینکه مثلا اگه تو آدرس 0x00 یه بایت مینویسم،آدرس بعدی برا بایت بعدی میشه 0x01 یا 8 تا بیت اونورتر یعنی 0x08؟
                  ببخشید من تازه پستاتونو دیدم ظاهرا دیگه خودتون جواب گرفتید. تو هر آدرس یک بایت میتونید بنویسید آدرس بعدی 0x01

                  دیدگاه


                    #39
                    پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                    خواهش میکنم آقای redown
                    بله جواب گرفتم خیلی ممنون،فقط یه سوال دیگه دارم و اینکه چجوری باید AT24C02 رو ریست کنم یا به عبارتی پاکش کنم؟من یجایی خوندم که باید مراحل زیر رو انجام بدم:
                    1-بالا بودن کلاک برای 9 سیکل
                    2-بالا بودن پایه SDA در هر سیکل،در زمانی که پایه SCL بالا است
                    3-تولید یک حالت شروع در هنگامی که پایه SDA بالا باشد
                    اما من نمیدونم توی برنامه چجوری باید اینارو بنویسم؟
                    ممنون میشم راهنمایی کنید.

                    دیدگاه


                      #40
                      پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                      من تا حالا همچین موردی رو نشنیدم!!!
                      این رو از کجا شنیدین؟؟؟؟

                      فکر نمیکنم کلا چیزی به اسم ریست برای این eeprom ها داشته باشیم.
                      شما خودت باید 0xFF رو تو همه بایتهاش بنویسی.

                      دیدگاه


                        #41
                        پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                        من توی کتاب میکروکنترلرهای AVR و کاربردهای آنها نوشته مهندس امیر ره افروز خوندم،تو دیتاشیت آی سی هم هست.

                        دیدگاه


                          #42
                          پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                          کدوم بخش دیتاشیت؟

                          دیدگاه


                            #43
                            پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                            صفحه 6 ،قسمت Device Operation

                            دیدگاه


                              #44
                              پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                              سلام
                              یه سرچی که کردم این گیرم آمد ببین شاید بدردت بخورد

                              http://sunge.awardspace.com/eeprom-lib/eeprom-lib.html
                              دکتر چمران در 1311 در تهران متولد شد
                              وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
                              او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

                              دیدگاه


                                #45
                                پاسخ : باز هم eeprom خارجی، باز هم مشکلات عجیب و غریب

                                دوست عزیز oo:
                                اون برای ریست کردن کنترلر داخلی حافظه هست ، نه برای پاک کردن حافظه.

                                دیدگاه

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