اطلاعیه

Collapse
No announcement yet.

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

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

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

    من یک eeprom خارجی(at24c128) رو در مدار وصل کردم گاهی اوقات به خوبی کار میکنه ولی بعد از گذشت چند دقیقه از کار می افته. بعدش مثلا از هر ده بیست باری که میکرو رو ریست میکنم یکی دو بار درست کار میکنه. کلافم کرده دیگه. به نظر میرسه با ولتاژ 5 ولت احتمال کار کردنش میره بالاتر و هر چی ولتاژ کمتر میشه احتمال کار نکردنش بیشتر میشه. ولی در هر صورت با هر ولتاژی به صورت کامل درست کار نمیکنه و بگیر نگیر داره.
    با سلام
    به نظر میرسه فرکانس بالای پروتکل I2C مشکل ساز شده.
    توی ولتاژ 5 ولت حداکثر 1 مگاهرتز می تونی کلاک بدی . ولتاژ کمتر هم فرکانس کمتر. تست کن

    [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

    دیدگاه


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

      با پایه ریست ریستش میکنم(از داخل خود کدویژن با پروگرمر) تغذیش رو هم lm2576 گذاشتم هم باتری لیتیوم یون هیچ کدوم نشد. قطعات فرکانس بالا رو هم کلا جدا کردم یعنی تقریبا فقط یه میکرو مونده و یه at24c128

      دیدگاه


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

        مشکل از بورده. ولی نمیدونم دقیقا چشه. با دو تا از پایه های A2Dی میکرو روی بردبورد یه دیپش رو امتحان کردم ظاهرا داره به خوبی کار میکنه.
        نمیدونم مشکل از کجاست ولی من با کریستال هم همین مشکلو دارم کریستالم هم روی بورد کار نمیکنه اگه تنظیمش کنم روی کریستال خارجی از کار می افته دیگه باید میکرو رو از روی بورد جدا کنم و روی بردبورد وصلش کنم به کریستال تا درستش کنم. در حالی که اصلا چیز پیچیده ای نکشیدم خیلی ساده و مستقیم کریستالو وصل کردم به میکرو. مدار قبلیم هم که با یه atmega8 دیپ بود هم همین مشکلو با کریستال داشت.

        دیدگاه


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

          خازن های کریستالت چقدره؟

          دیدگاه


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

            نوشته اصلی توسط redown
            مشکل از بورده. ولی نمیدونم دقیقا چشه. با دو تا از پایه های A2Dی میکرو روی بردبورد یه دیپش رو امتحان کردم ظاهرا داره به خوبی کار میکنه.
            نمیدونم مشکل از کجاست ولی من با کریستال هم همین مشکلو دارم کریستالم هم روی بورد کار نمیکنه اگه تنظیمش کنم روی کریستال خارجی از کار می افته دیگه باید میکرو رو از روی بورد جدا کنم و روی بردبورد وصلش کنم به کریستال تا درستش کنم. در حالی که اصلا چیز پیچیده ای نکشیدم خیلی ساده و مستقیم کریستالو وصل کردم به میکرو. مدار قبلیم هم که با یه atmega8 دیپ بود هم همین مشکلو با کریستال داشت.
            اگه روی کریستال خازن داری حذفش کن و فیوز بیت ckopt را فعال کن

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

            دیدگاه


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

              سلام ...
              من هنوزه که هنوزه به پوینتر و الگوریتم هات مشکوکم ... اگر اشکال از برد باشه ... یا از کریستال باشه ... هیچ موقع سیستمت کار نمیکنه ... ولی اگر بعضی مقع ها کار میکنه و بعضی موقع ها کار نمیکنه ... مشگل الگوریتمی هست ...

              تمام روتین هات رو غیر فعال کن ... و فقط یک بایت در درون ای تو پیرام بنویس ... و بعدش بخونش ... ببین وضعیت چجوری هست ... برادره من اگر شما پوینتر رو تو روتین کیبورد گم کرده باشی ... ممکن هست اینجا خودش رو نشون بده ... یا اگر یه اینتراپتی بخوره و در داخل همون اینتراپت دوباره هون اینتراپت بخوره ... سیستم پوینتر گم میکنه ... پس غیر فعال کردن کلیه روتین ها اجباریه ...

              دیدگاه


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

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

                تمام روتین هات رو غیر فعال کن ... و فقط یک بایت در درون ای تو پیرام بنویس ... و بعدش بخونش ... ببین وضعیت چجوری هست ... برادره من اگر شما پوینتر رو تو روتین کیبورد گم کرده باشی ... ممکن هست اینجا خودش رو نشون بده ... یا اگر یه اینتراپتی بخوره و در داخل همون اینتراپت دوباره هون اینتراپت بخوره ... سیستم پوینتر گم میکنه ... پس غیر فعال کردن کلیه روتین ها اجباریه ...
                سلام
                منم همین کارو کردم چند بار هم گفتم اصلا اینتراپتی رو فعال نکردم یه برنامه ای نوشتم که فقط توی یک آدرس از ee بنویسه و بخونه ولی نشد. اما از پایه های میکرو سیم کشیدم بوردم روی بردبورد وصل کردم کار کرد.
                من که فعلا روی این بورد بی خیالش شدم فعلا روی بردبورد دارم کار میکنم تا شاید در آینده روی بورد نهاییم درست شد و کار کرد. همون طور که بیخیال کریستالش شدم و از اسیلاتور داخلیش دارم استفاده میکنم(فعلا جرات نمیکنم فیوزبیتاشو عوض کنم و تستش کنم چون سالم کندنش از روی بورد تقریبا غیر ممکنه). :smile:
                خیلی ممنون

                دیدگاه


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

                  ای وااااااااااااای پدرم در اومد. قطعه رو از روی بردبورد کندم و روی بورد سوراخ دار گذاشتم از کار افتاد. آخه چرااااااااااا! :cry2:
                  فقط روی بردبورد کار میکنه :angry:

                  دیدگاه


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

                    نوشته اصلی توسط redown
                    ای وااااااااااااای پدرم در اومد. قطعه رو از روی بردبورد کندم و روی بورد سوراخ دار گذاشتم از کار افتاد. آخه چرااااااااااا! :cry2:
                    فقط روی بردبورد کار میکنه :angry:
                    شما هنوز مشکلتون حل نشده ؟
                    ای بابا
                    من فکر کردم که حل شده . . .
                    ببین
                    PCB کن از همه چیز بهتره . . .
                    مطمنه مطمن
                    برد سوراخدار هم وقتت رو زیاد میگیره هم خوب جواب نمیگیری !
                    موفق باشی
                    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                    معرفی نرم افزار Codewizard PWM
                    با من بیشتر آشنا شوید

                    دیدگاه


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

                      نوشته اصلی توسط SAMAN.ASADI
                      شما هنوز مشکلتون حل نشده ؟
                      ای بابا
                      من فکر کردم که حل شده . . .
                      ببین
                      PCB کن از همه چیز بهتره . . .
                      مطمنه مطمن
                      برد سوراخدار هم وقتت رو زیاد میگیره هم خوب جواب نمیگیری !
                      موفق باشی
                      اولش pcb بود دیگه کار نکرد لامصب.

                      دیدگاه


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

                        بیا یه کاری کن ، کدت رو که میگی اینتراپت نداره و ... رو که باهاش تست میکنی رو بزار اینجا. مطمئنا کد خاص و محرمانه ای نیست. پس بزار اینجا کدت رو شـــــــــــــــــاید ، میگم شـــــــــــــاید زبونم لال یه اشکالی داشته باشه.

                        دیدگاه


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

                          نوشته اصلی توسط امیر . م
                          بیا یه کاری کن ، کدت رو که میگی اینتراپت نداره و ... رو که باهاش تست میکنی رو بزار اینجا. مطمئنا کد خاص و محرمانه ای نیست. پس بزار اینجا کدت رو شـــــــــــــــــاید ، میگم شـــــــــــــاید زبونم لال یه اشکالی داشته باشه.
                          محرمانه که نیست ولی روی بردبورد و توی پروتئوس کار کرد. اینم کدام:
                          #include <mega32.h>
                          #include <delay.h>
                          //#asm
                          //.equ __i2c_port=0x15
                          //.equ __sda_bit=6
                          //.equ __scl_bit=4
                          //#endasm
                          #include <i2c.h>
                          #include <string.h>
                          #include <stdio.h>
                          #include <stdlib.h>

                          #define EEPROM_BUS_ADDRESS 0xA0

                          //external eeprom:
                          /////////////////////////////////////////////////////////////////////////////////////////////////
                          unsigned char eeprom_read(char address){
                          unsigned char data,r;
                          r=i2c_start();
                          printf("%d\n",r);
                          r=i2c_write(EEPROM_BUS_ADDRESS);
                          printf("%d\n",r);
                          r=i2c_write(address>>8);
                          printf("%d\n",r);
                          r=i2c_write(address);
                          printf("%d\n",r);
                          r=i2c_start();
                          printf("%d\n",r);
                          r=i2c_write(EEPROM_BUS_ADDRESS | 1);
                          printf("%d\n",r);
                          data=i2c_read(0);
                          i2c_stop();
                          delay_ms(5);
                          return data;
                          }
                          /////////////////////////////////////////////////////////////////////////////////////////////////
                          void eeprom_write(char address , char data){
                          unsigned char r;
                          r=i2c_start();
                          printf("%d\n",r);
                          r=i2c_write(EEPROM_BUS_ADDRESS);
                          printf("%d\n",r);
                          r=i2c_write(address>>8);
                          printf("%d\n",r);
                          r=i2c_write(address);
                          printf("%d\n",r);
                          r=i2c_write(data);
                          printf("%d\n",r);
                          i2c_stop();
                          delay_ms(5);
                          }



                          void main(void)
                          {
                          char a;
                          UCSRA=0x00;
                          UCSRB=0x18;
                          UCSRC=0x86;
                          UBRRH=0x00;
                          UBRRL=0x0C;

                          // I2C Bus initialization
                          // I2C Port: PORTC
                          // I2C SDA bit: 6
                          // I2C SCL bit: 4
                          // Bit Rate: 100 kHz
                          // Note: I2C settings are specified in the
                          // Project|Configure|C Compiler|Libraries|I2C menu.
                          i2c_init();

                          eeprom_write(0,16);
                          a=eeprom_read(0);
                          printf("data=%d\n",a);

                          while (1)
                          {

                          }
                          }

                          البته SDA و SCL رو که میبینید کامنت کردم به خاطر اینه که قبلا با این دستورات انتخابشون کرده بودم بعد که کار نکرد، توی تنظیمات کدویژن انتخابشون کردم از اینجا حذف کردم چون اگه دوباره اینجا انتخاب بشن ارور میده.
                          printf ها رو هم برای این گذاشتم تا مرحله به مرحله ببینم کدوم دستورا یک رو بر میگردونن کدوما صفر(میکرو رو با پورت سریال وصل کردم به کامپیوتر).اونا برشون هم داشتم درست نشد.

                          دیدگاه


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

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

                            این سه تا کار رو انجام بده و نتیجه رو اعلام کن.

                            دیدگاه


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

                              خواهش میکنم از دوستان کد ها را در قالب مناسب قرار بدید (از "قراردادن کد" استفاده کنید) :arrow:
                              ----------------------------------
                              دوستمون درست میفرمایند
                              کد:
                              unsigned char eeprom_read(unsigned int address)
                              کد:
                              void eeprom_write(unsigned int address ,unsigned char data)

                              اول : چرا پین SCK رو خروجی تعریف نکردی؟
                              دلیل این حرفشون را متوجه نشدم oo: ارتباط i2c هست کاری به SCK نداره :agree:

                              ولی به نظر من یک سخت افزار با میکرو DIP آماده کن و تست کن (PCB بزن ، هرچند ساده و ابتدایی)

                              درضمن اون موردی که برای CKopt گفتم را مواظب باش اگه این فیوز بیت فعال باشه و خازن خارجی بذاری رسماً کلاک میکرو تعطیل میشه (مقدار خازن بالا میره چون موازی میشه)
                              موفق باشید
                              امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                              دیدگاه


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

                                نوشته اصلی توسط Abbas Sarami
                                دلیل این حرفشون را متوجه نشدم oo: ارتباط i2c هست کاری به SCK نداره :agree:
                                درسته ، عذر میخوام منظورم SCL بود.

                                دیدگاه

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