Ghi vào bộ nhớ EEPROM

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thanhtuandkh
    Thành viên chính thức
    • Oct 2006
    • 35

    #1

    Ghi vào bộ nhớ EEPROM

    chào các bác , em mới tìm hiểu vè AVR nên chưa biết nhiềiu lắm. các bác có thể chỉ cho em cách ghi dữ liệu vào bộ nhớ EEProm và đọc từ nó ra đc ko, nếu có thể cho em xin đoạn chương trình đơn giản để minh họa cho dễ hiểu. Em dùng CosvisionAVR lập trình C, dùng cho con atmega8. Em cám ơn các bác
  • vutricongbka
    Thành viên tích cực
    • Jul 2005
    • 379

    #2
    eeprom unsigned char EVar=0xff;//he he he OKE

    Comment

    • thanhtuandkh
      Thành viên chính thức
      • Oct 2006
      • 35

      #3
      bác nói thế thì làm sao mà em biết đc tại vì em mới học thôi, bác có thể nói rõ hơn ko???

      Comment

      • zemen
        Thành viên tích cực
        • Nov 2005
        • 536

        #4
        Chịu khó đọc lại phần help của codevision đoạn dùng eeprom đi! Nó nói rõ lắm đấy!
        !e

        Comment

        • zemen
          Thành viên tích cực
          • Nov 2005
          • 536

          #5
          Đây, mình minh họa thử cách đọc và viết 1 byte với EEPROM trong. Thực tế cách này codevision không dùng vì nó còn hỗ trợ hơn thế nữa, giống như kiểu khai báo của vutricongbka vậy

          //ham cat giu 1 byte vao eeprom
          void EEPROM_write(unsigned int dchi, unsigned char dlieu)
          {
          while(EECR.1); //cho EEWE = 0;
          EEAR = dchi;
          EEDR = dlieu;
          EECR.2 = 1; //EEMWE = 1;
          EECR.1 = 1; //EEWE = 1;
          }

          //ham doc lai 1 byte tu eeprom
          unsigned char EEPROM_read(unsigned int dchi)
          {
          while(EECR.1);
          EEAR = dchi;
          EECR.0 = 1;
          return EEDR;
          }
          !e

          Comment

          • Arce
            Thành viên mới
            • Apr 2006
            • 11

            #6
            Chào các bác, em có câu hỏi muốn hỏi các bác:
            Để ghi dữ liệu vào EEPROM , ví dụ một chuổi kí tự nào đó, ở đây chuổi cố định và đã biết trước. Nếu dùng hàm EEPROM_write (như của bác zemen) thì có mất Flash để lưu chuổi đó không?
            Em xin cảm ơn các bác

            Comment

            • zemen
              Thành viên tích cực
              • Nov 2005
              • 536

              #7
              Nếu chuỗi cố định và biết trước (hằng?) thì thường lưu vào FLASH. Mà thường Flash của AVR rất lớn, tốn vài byte, vài chục byte, vài trăm byte để lưu hằng chuỗi thì nhằm nhò gì đâu!
              !e

              Comment

              • photoman
                Thành viên tích cực
                • Oct 2005
                • 100

                #8
                tiện đây các bác cho em hỏi : nếu mình thực hiện việc ghi ,đọc , tính toán dư liệu trực tiếp trên eeprom nhiều thì có vấn đề gì không ah ? em cũng thấy trong datasheet của nó nói không nên dùng địa chỉ đầu tiên của eeprom vì dễ gây sai lệch dữ liệu . không hiểu nguyên nhân tại sao? bác nào rõ thì cho em biết với !!!!
                Biển học mênh mông , quay đầu lại là!

                Comment

                • minhhieu
                  Thành viên tích cực
                  • Mar 2006
                  • 499

                  #9
                  Nguyên văn bởi photoman Xem bài viết
                  tiện đây các bác cho em hỏi : nếu mình thực hiện việc ghi ,đọc , tính toán dư liệu trực tiếp trên eeprom nhiều thì có vấn đề gì không ah ? em cũng thấy trong datasheet của nó nói không nên dùng địa chỉ đầu tiên của eeprom vì dễ gây sai lệch dữ liệu . không hiểu nguyên nhân tại sao? bác nào rõ thì cho em biết với !!!!

                  Việc đọc thì thoải mái không phải lo lắng. Còn việc ghi thi eeprom tùy theo loại mà có số lần ghi xóa khác nhau. ví dụ: Atmega16 ghi vào eeprom được 10000 lần còn atmega162 ghi được 100.000 lần. Bạn không phải lo lắng nhiều quá đâu.
                  Địa chỉ đầu tiên của eeprom là 0x0000; Việc sai lệch dữ liệu là do bạn đưa địa chỉ không đúng thôi.
                  n
                  ĐT: 0986 492 489

                  Tham khảo:

                  Comment

                  • dangdung
                    Thành viên tích cực
                    • Apr 2007
                    • 164

                    #10
                    việc cảnh báo sai lenh về địa chỉ đầu tiên của eeprom là 0x0000 là có thật.
                    tốt nhất là bạn không nên sử dụng vùng nhớ này. ATmel đã cảnh báo như vậy, đây chắc là do lỗi phần cứng.
                    chúc bạn thành công
                    Điện thoại:
                    email:

                    Comment

                    • Le Thi Bich
                      Thành viên tích cực
                      • Sep 2008
                      • 304

                      #11
                      Nguyên văn bởi vutricongbka Xem bài viết
                      eeprom unsigned char EVar=0xff;//he he he OKE
                      Khái báo kiểu này thì muốn ghi dữ liệu vào một địa chỉ cụ thể của EEPROM mình phải làm thế nào các bác nhỉ!
                      ví dụ muốn ghi 0x22 vào vị trí 0x01 chẳng hạn!
                      Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                      Comment

                      • dt_love
                        Thành viên tích cực
                        • Feb 2007
                        • 509

                        #12
                        để sử dụng eep trong codevision thì khai báo như sau:
                        thêm dòng eeprom trước các khai báo biến bình thường.
                        vd: eeprom unsigned char eep_var;
                        khi đó trình biên dịch sẽ tự động định địa chỉ cho biến này.

                        nếu muốn đặt biến này vào địa chỉ a trong eeprom thì khai báo như sau:
                        eeprom unsigned char eep_var @a;

                        Comment

                        • Le Thi Bich
                          Thành viên tích cực
                          • Sep 2008
                          • 304

                          #13
                          Nguyên văn bởi dt_love Xem bài viết
                          để sử dụng eep trong codevision thì khai báo như sau:
                          thêm dòng eeprom trước các khai báo biến bình thường.
                          vd: eeprom unsigned char eep_var;
                          khi đó trình biên dịch sẽ tự động định địa chỉ cho biến này.

                          nếu muốn đặt biến này vào địa chỉ a trong eeprom thì khai báo như sau:
                          eeprom unsigned char eep_var @a;
                          à như vậy mỗi địa chỉ lại phải đặt trước cho một biến riêng riêng vậy thì thật ra cũng không tiện lợi hơn các dùng chương trình con hàm khai báo
                          ví dụ muốn gi dữ liệu lần lượt vào địa chỉ 0x01;0x02;0x03....
                          thì cũng phải khai báo
                          eeprom unsigned char eep_var1 @0x01
                          eeprom unsigned char eep_var2 @0x02
                          eeprom unsigned char eep_var3 @0x03
                          .............
                          như vậy nếu phải lưu 100 giá trị khác nhau thì cồng kềnh lắm và tương ứng khi làm việc lại khai báo biến trong ram nữa thì chết
                          Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                          Comment

                          • dt_love
                            Thành viên tích cực
                            • Feb 2007
                            • 509

                            #14
                            Nguyên văn bởi Le Thi Bich Xem bài viết
                            à như vậy mỗi địa chỉ lại phải đặt trước cho một biến riêng riêng vậy thì thật ra cũng không tiện lợi hơn các dùng chương trình con hàm khai báo
                            ví dụ muốn gi dữ liệu lần lượt vào địa chỉ 0x01;0x02;0x03....
                            thì cũng phải khai báo
                            eeprom unsigned char eep_var1 @0x01
                            eeprom unsigned char eep_var2 @0x02
                            eeprom unsigned char eep_var3 @0x03
                            .............
                            như vậy nếu phải lưu 100 giá trị khác nhau thì cồng kềnh lắm và tương ứng khi làm việc lại khai báo biến trong ram nữa thì chết
                            ý bạn là sao nhỉ..? ko tiện lợi?
                            khi bạn khai báo biến trong eep thì đâu nhất thiết bạn phải định địa chỉ của nó để làm j nhỉ..? bạn chỉ cần quản lí theo tên biến là đủ rồi. ?
                            lúc đó bạn khai báo cả mảng int 2 chiều vài trăm byte cũng chẳng sao.
                            hầu hết các phép tính cho biến trên ram đều sử dụng được cho biến trên eep

                            Comment

                            • Le Thi Bich
                              Thành viên tích cực
                              • Sep 2008
                              • 304

                              #15
                              Nguyên văn bởi dt_love Xem bài viết
                              ý bạn là sao nhỉ..? ko tiện lợi?
                              khi bạn khai báo biến trong eep thì đâu nhất thiết bạn phải định địa chỉ của nó để làm j nhỉ..? bạn chỉ cần quản lí theo tên biến là đủ rồi. ?
                              lúc đó bạn khai báo cả mảng int 2 chiều vài trăm byte cũng chẳng sao.
                              hầu hết các phép tính cho biến trên ram đều sử dụng được cho biến trên eep
                              Nếu viết một chương trình còn eeprom_doc, hoặc eeprom viết
                              trong chương trình chính khi cần đọc dữ liệu ở một địa chỉ em chỉ cần dug lệnh i=eeprom_doc(0x0xxx) và dùng lệnh này em có thể đặt vào một chương trình con khác để có thể đọc dữ liệu nhiều lần ở nhiều địa chỉ khác nhau. Còn dùng cách khai báo trên mỗi lần muốn gi đọc ở một địa chỉ nào thì lại phải khai báo một biến cho một địa chỉ đó
                              Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                              Comment

                              Về tác giả

                              Collapse

                              thanhtuandkh Tìm hiểu thêm về thanhtuandkh

                              Bài viết mới nhất

                              Collapse

                              Đang tải...