اطلاعیه

Collapse
No announcement yet.

مشکل با eeprom خارجی

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

    مشکل با eeprom خارجی

    سلام
    من یه eeprom مدل 24c04 دارم و احتیاج به راه اندازیش دارم
    ارتباط دهیش ار نوع i2c هست
    تا اینجا تونستم برنامه مو پیش ببرم ولی نمیدونم چرا همیشه مقدار 255 برگردونده میشه..
    میشه لطف کنین بگین اشکال ار کجاست؟؟
    ممنون
    اینم سورس و پروتیوس:
    http://s5.picofile.com/file/8144313184/eeprom.rar.html
    تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
    علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

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

    تو تعریف تابع write من نمی بینم شما کجا از data استفاده کردین؟ در واقع چیزی ننشوتین توش.
    وقتی 255 یا 0xFF نشون بده یعنی اون قسمت از حافظه خالیه.

    دیدگاه


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

      میشه اصلاح شده شو واسم بذارین؟ میخوام ببینم مشکلم حل میشه یا نه با این چیزی که گفتین..
      ممنون.تشکر.
      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

      دیدگاه


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

        این کد عبارت m رو داخل خونه شماره 10 میریزه و اونو میخونه
        کد:
        #include <16f877A.h>
        #use delay(clock=20000000)
        #use i2c(master,sda=pin_c4,scl=pin_c3)
        #define write_address_bus 160
        #define read_address_bus 161
        void write_eeprom(unsigned char data,unsigned int address);
        unsigned char read_eeprom(unsigned int address);
        
        void write_eeprom(unsigned char data,unsigned int address)
        {
        i2c_start();
        i2c_write(write_address_bus);
        i2c_write((address&0xff00)>>8);
        i2c_write(address&0x00ff);
        i2c_write(data);
        i2c_stop();
        delay_ms(10);
        }
        unsigned char read_eeprom(unsigned int address)
        {
        unsigned char data_read;
        i2c_start();
        i2c_write(write_address_bus);
        i2c_write((address & 0xff00)>>8);
        i2c_write(address & 0x00ff);
        i2c_start();
        i2c_write(read_address_bus);
        data_read=i2c_read(0);
        i2c_stop();
        return data_read;}
        
        
        
        
        
        
        
        
        
        
        #fuses hs
        #define LCD_ENABLE_PIN PIN_D1
        #define LCD_RS_PIN PIN_D2
        #define LCD_RW_PIN PIN_D3
        #define LCD_DATA4 PIN_D4
        #define LCD_DATA5 PIN_D5
        #define LCD_DATA6 PIN_D6
        #define LCD_DATA7 PIN_D7
        
        #include <lcd.c>
        
        void main()
        {
        unsigned char read_data,write_data;
        int i;
        
          lcd_init();
        
          while(TRUE)
          {
          write_eeprom('m',10);
          read_data=read_eeprom(10);
          lcd_gotoxy(1,1);
          printf(lcd_putc,"%s",read_data);  //TODO: User Code
          }
        
        }

        دیدگاه


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

          سلام
          ممنون از همکاریتون ..
          ولی این برنامه تو پروتیوس جواب نمیده ..
          میشه ببینین اشکال از کجاست؟؟
          ممنونم
          تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
          علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

          دیدگاه


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

            سینا جان برنامه شما مشکل زیاد داره.

            1- یکیش همون که mohammadfa91 اول گفت. شما اصلاً دیتا رو نمینویسین.
            2- بعد از نوشتن تاخیر ندارید.
            3- تابع خوندنتون void هست و اصلاً مقداری بر نمیگردونه!
            4- فیوزها باید بلافاصله بعد از include تعریف بشن.
            5- توی تابع main به جای eeprom_read از i2c_read استفاده کردید.

            برنامه ای که mohammadfa91 گذاشته برای eeprom های بزرگتر از 256 بایته که برای شما صدق نمی کنه.

            از این حرفها که بگذریم من چندین بار دیدم شما اینجا مشکلات خودتونو مطرح میکنید و وقتی راهنمایی میشید اصلاً به نکته ها توجه نمی کنید و همون اشتباهات رو دوباره تکرار می کنید. توصیه میکنم به یک کتاب مرجع C مراجعه کنید تا اصل مطلب رو مسلط بشید.

            دیدگاه


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

              سلام خدمت جناب freedom_truth
              آقا ما خیلی دوستتون داریم .. بارها دیدم که همون سوالات تکراری بنده رو با حوصله تموم جواب دادین و کارمو راه انداختین.. هرچی تشکر کنم کمه ..
              جسارتا این برنامه ای که دوستمون زحمت کشیدن و برنامه منو اصلاح کردن و گذاشتن ، اینو کامپایل کردم و یه اشکال دیگه داره که وقتی میخواد مقدار خونده شده رو بزنه رو lcd اون جنس متغیر رو تو printf اشتباه زده بودن ..
              درستش کردم و دوباره کامپایل کردم و باز مقدار 255 برگردونده میشه..
              راستی کتاب مرجع بنده هم کتاب آقای چهرقانی هست که پر از غلطه!!!!!!!!!!!!!!!!!!
              اگه قبلا AVR کار نکرده بودم با این کتاب حسابی سر در گم میشدم
              در آخر دوتا درخواست:
              1)برنامه رو اگه زحمتی نباشه اصلاحش کنین تا ببینم کارم از کجا میلنگه
              2)اگه مرجع فارسی خوب واسه CCS دارین بگین اونو تهیه کنم
              ممنون
              تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
              علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

              دیدگاه


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

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

                1)برنامه رو اگه زحمتی نباشه اصلاحش کنین تا ببینم کارم از کجا میلنگه
                شما همون مواردی که گفتم اصلاح کن درست میشه. اگر بازم مشکلی داشت همینجا بپرس هر کی بلد بود جواب میده.

                2)اگه مرجع فارسی خوب واسه CCS دارین بگین اونو تهیه کنم
                اطلاعی ندارم. ظاهراً همون کتاب آقای چهرقانی تنها مورد موجوده.
                ممکنه اشکال داشته باشه ولی نه در اون حد فاحش که مثل کدی که شما گذاشتی باشه.

                دیدگاه


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

                  سلام
                  فکر کنم این برنامه ای که جناب mohammadfa91 زحمت کشیدن و واسم ویرایش کردن فکر کنم درست باشه ولی تو پروتیوس جواب نمیده ..
                  هر کی میدونه دردش کجاس ، بگه تا دعاش کنم ...
                  اگه لطف کنین ویرایش شده شو واسم بذارین ..
                  ممنون
                  تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                  علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                  دیدگاه


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

                    نوشته اصلی توسط sinaitg
                    سلام
                    فکر کنم این برنامه ای که جناب mohammadfa91 زحمت کشیدن و واسم ویرایش کردن فکر کنم درست باشه ولی تو پروتیوس جواب نمیده ..
                    هر کی میدونه دردش کجاس ، بگه تا دعاش کنم ...
                    اگه لطف کنین ویرایش شده شو واسم بذارین ..
                    ممنون
                    سینا جان یه لطف شخصی به من میکنی؟ واقعاً ممنون میشم اگر این کارو بکنی.
                    اون مواردی که گفتم رو لطفاً اصلاح کن و کدت رو اینجا بذار.

                    دیدگاه


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

                      با سلام و خسته نباشید
                      اینم کد ، البته فکر کنم تمام چیزایی رو که گفتین رعایت شده ..
                      [code=text]#include <16f877A.h>
                      #fuses hs
                      #use delay(clock=20000000)

                      #use i2c(master,sda=pin_c4,scl=pin_c3)

                      void eeprom_write(unsigned char address,unsigned char data){
                      i2c_start();
                      i2c_write(0xa0);
                      i2c_write(address);
                      i2c_stop();
                      delay_ms(10);
                      }


                      unsigned char eeprom_read(unsigned char address){
                      unsigned char data;
                      i2c_start();
                      i2c_write(0xa0);
                      i2c_write(address);
                      i2c_start();
                      i2c_write(0xa1);
                      data=i2c_read(0);
                      i2c_stop();
                      return data;
                      }










                      #define LCD_ENABLE_PIN PIN_D1
                      #define LCD_RS_PIN PIN_D2
                      #define LCD_RW_PIN PIN_D3
                      #define LCD_DATA4 PIN_D4
                      #define LCD_DATA5 PIN_D5
                      #define LCD_DATA6 PIN_D6
                      #define LCD_DATA7 PIN_D7

                      #include <lcd.c>

                      void main()
                      {
                      unsigned char i;

                      lcd_init();

                      while(TRUE)
                      {
                      eeprom_write(0x10,4);
                      i=eeprom_read(0x10);
                      lcd_gotoxy(1,1);
                      printf(lcd_putc,"%u",i); //TODO: User Code
                      }

                      }[/code]
                      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                      دیدگاه


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

                        تشکر میکنم که بالاخره خودتون دست به کار شدین که کد رو اصلاح کنید. درستش هم همینه.
                        منتها یک مشکل کوچیک داره اونم اینکه مورد اول رو اصلاح نکردید.
                        1- یکیش همون که mohammadfa91 اول گفت. شما اصلاً دیتا رو نمینویسین.
                        باید بعد از فرستادن آدرس مقصد، خود بایت رو هم بفرستید تا eeprom اون رو بنویسه دیگه! یه جوریایی بدیهیه.
                        کد:
                        i2c_write(data);

                        دیدگاه


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

                          سلام خدمت جناب freedom_truth

                          آقا یه دنیا ممنون .. تو پروتیوس که جواب داده ، ایشالله تو عمل هم جواب میده .. مثل همیشه خیلی مخلصیم..
                          تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                          علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                          دیدگاه


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

                            سلام
                            مدار در عمل جواب نداد متاسفانه ....
                            اینم فایل های برنامه و شبیه سازش:
                            http://s5.picofile.com/file/81172239...chive.zip.html

                            تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                            علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                            دیدگاه

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