Thông báo

Collapse
No announcement yet.

Giúp em về I2C của Psoc với!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giúp em về I2C của Psoc với!

    Em đang dùng con 29466 để đọc thời gian của con DS1307.Em chọn modun I2Cm
    mà.Em đã khai báo là CPU clock là clksync/256 với clksync là 5.0V/24Mhz.chân P0.5 là SCL và P0.7 là SCK(2 chân này để ở trạng thái High Z) và nối với con DS1307 nhưng đến lúc lập trình để đọc và ghi thì chân 7 (SQW) của DS chẳng có hiện tượng gì cả.Đến mức em treo 2 chân SCL và SCK của DS bằng trở 10k lên Vcc và lấy luôn cái code Example trong cái datasheet về I2C của Psoc để dịch thế mà con Psoc của em cứ ì ra trong khi cũng nó vẫn sống nhăn răng ra đấy.Rất mong các bác đã làm về I2C của PSoC chỉ giáo cho em,cảm ơn các bác rất nhiều ạ!



    include "m8c.inc" ; part specific constants and macros
    include "PSoCAPI.inc" ; PSoC API definitions for all User Modules
    export _main
    area bss (RAM)
    sRxData: blk 16
    area text (ROM,REL)
    .LITERAL
    sTxData:
    db 0x00 ; Slave internal address 0
    db 0x12,0x34,0x08 ; Seconds and minutes in BCD 8:34:12am
    db 0x01 ; Day of Week, Monday
    db 0x15,0x03,0x02 ; Day-Month-year 15-Mar-02
    db 0x93 ; Enable clock output
    .ENDLITERAL
    _main:
    call I2Cm_Start ; Initialize I2C master
    mov A,I2Cm_ComleteXfer ; Pass normal transfer mode
    push A
    mov A,0x09 ; Pass all 9 bytes of sTxData
    push A
    mov A,>sTxData ; Load the MSB of the sTxData pointer
    push A
    mov A,<sTxData ; Load the LSB of the sTxData pointer
    push A
    mov X,SP ; Get the stack location +1
    dec X ; That points to the last byte pushed
    mov A,0x68 ; Pass slave address 0x68
    call _I2Cm_bWriteCBytes ; Call function to write data to slave
    ; A contains return value.
    add SP,-4 ; Restore the stack

    RxLoop: ; Keep reading the time from the
    ; Dallas DS1307
    ; Do a combined transfer, write then read
    ; The write sets the sub-address value to 0x00. The read then
    ; starts reading the values starting at the sub-address 0x00.
    ;
    mov A,I2Cm_NoStop ; Don't generate a stop sequence
    push A
    mov A,01h ; Write only the first byte of the string
    push A ; which is the internal sub-address.
    mov A,>sTxData ; Load the MSB of the sTxData pointer
    push A
    mov A,<sTxData ; Load the LSB of the sTxData pointer
    push A
    mov X,SP ; Get the stack location +1
    dec X ; Dec the pointer to point to the last byte
    mov A,0x68 ; Pass slave address 0x68
    call _I2Cm_bWriteCBytes ; Call function to write data to slave
    ; Reg A contains return value.
    add SP,-4 ; Restore the stack

    mov A,I2Cm_RepStart ; Start with a Repeat start
    push A
    mov A,0x07 ; Read just the 7 time bytes back
    push A
    mov A,>sRxData ; Load the MSB of the sRxData pointer
    push A
    mov A,<sRxData ; Load the LSB of the sRsData pointer
    push A
    mov X,SP ; Get the stack location +1
    dec X ; That points to the last byte pushed
    mov A,0x68 ; Pass slave address 0x68
    call _I2Cm_fReadBytes ; Call function to read data from slave
    ; A contains return value.
    add SP,-4 ; Restore the stack
    jmp RxLoop ; Setting a breakpoint here, you should
    ; be able to see the returned time data
    ; in the sRxData RAM locations.
    ret
    Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
    Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
    DT:098 861 4347

  • #2
    bạn tìm trong diễn đàn xem.mình nhớ không nhầm thì các bạn đã post code của PIC,AVR,PSoC cho DS1307 rồi đấy.cả schematic nữa.chịu khó tìm vậy.chắc chắn sẽ thấy

    Comment


    • #3
      Code viết bằng asm khó đọc quá. Nhưng bạn hãy kiểm tra lại sơ đồ nguyên lý xem. Nhất định 2 chân SCL và SDA phải có trở treo. Thường thì từ 1K8 đến 2k2. Còn về phần mềm mềm thì bạn chú ý xem lại các chân SCL và SDA đã được cấu hình đúng hay chưa. Tiếp theo là cách khởi tạo DS đã đúng và đủ chưa. Mình nghĩ chỉ có mấy vấn đề đó thôi. Nhu vậy là đủ để DS chạy rùi. Chúc bạn thành công.
      Kel'Thuzads
      Mail:minhnguyen.ac@gmail.com

      Comment


      • #4
        Về vấn đề khởi tạo DS em cũng không rõ lắm bởi vì trong datasheet của DS không nói tới cái địa chỉ của DS mà chỉ đề cập đến thanh ghi ở địa chỉ 07H thôi.Em khởi tạo DS bằng cách ghi giá trị 0x90 vào thanh ghi này nhưng chẳng thấy cái chân SQW có xung gì cả!
        Trong chương trình VD của PSoc lại đề cập đến địa chỉ của DS trên bus I2C là 0x68.Vậy địa chỉ đó là thế nào vậy ạ?
        Còn về trở treo thì em sẽ thử với giá trị như bác Kel'Thuzads nói xem vì hiện tại em đang thử với trở 10k mà.
        Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
        Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
        DT:098 861 4347

        Comment


        • #5
          Địa chỉ Slave của DS1307 là 0xD0. Địa chỉ này đã được nhà sản xuất quy định từ trước.
          - Nếu ghi dữ liệu và DS1307 thì địa chỉ của nó là 0xD0
          - Nếu đọc dữ liệu thì địa chỉ của nó là 0xD1
          - Việc quy định địa chỉ này bạn hãy xem kỹ lại datasheet
          Trong hàm khởi tạo cho DS1307 bạn làm như sau:
          - ghi 0xd0 tới ds để chọn ds
          - ghi 0x00 để chọn địa chỉ của dữ liệu cần ghi (ở đây là vị trí giây). Con trỏ địa chỉ trỏ vào vùng địa chỉ 0x00.
          - ghi giá trị giây cần khởi tạo
          - ghi giá trị phút cần khởi tạo
          - ghi giá trị giờ cần khởi tạo
          - ghi giá trị thứ cần khởi tạo
          - ghi giá trị ngày cần khởi tạo
          - ghi giá trị tháng cần khởi tạo
          - ghi giá trị năm cần khởi tạo
          - sau cuối là ghi 0x90 (là byte điều khiển) cần khởi tạo
          Chú ý, nếu ghi lần lượt các byte liên tiếp thì con trỏ địa chỉ tự động tăng lên. Chính vì vậy mà ở trên ta chỉ cần chọn địa chỉ cần ghi là giây thôi.
          Chúc bạn thành công!
          Kel'Thuzads
          Mail:minhnguyen.ac@gmail.com

          Comment


          • #6
            Cảm ơn bác Kel'Thuzads rất nhiều.để em thử lại đã nhé.Hóa ra cái địa chỉ của DS lại là 0xD0.Em đọc kỹ cái Datasheet nhưng ko thấy nói.chắc người ta quên mất hoặc em down phải cái bản rút gọn chăng.Vậy tất cả các con DS1307xxx đều có địa chỉ như nhau phải không ạ hay là địa chỉ của DS1307 khác với DS1307N?
            Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
            Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
            DT:098 861 4347

            Comment


            • #7
              Nếu mình không nhầm thì đúng như vậy, kể các đống DS1337 cũng thế. Để biết đc có đúng hay không bạn hãy xem lại qui tắc ghi và đọc dữ liệu có trong Datasheet đó. (những con nào có giao tiếp I2C đều đưa ra quy tắc như vậy)
              Chúc thành công.
              Attached Files
              Kel'Thuzads
              Mail:minhnguyen.ac@gmail.com

              Comment


              • #8
                Nguyên văn bởi emut Xem bài viết
                Cảm ơn bác Kel'Thuzads rất nhiều.để em thử lại đã nhé.Hóa ra cái địa chỉ của DS lại là 0xD0.Em đọc kỹ cái Datasheet nhưng ko thấy nói.chắc người ta quên mất hoặc em down phải cái bản rút gọn chăng.Vậy tất cả các con DS1307xxx đều có địa chỉ như nhau phải không ạ hay là địa chỉ của DS1307 khác với DS1307N?
                Địa chỉ 0xD0 là địa chỉ DS1307 do nhà sản xuất quy định, khi sử dụng với các hàm trong PSoC thì phải dịch địa chỉ này đi 1 bit. 0xD0 >> 1 = 0x68. Thế nên khi lập trình vẫn phải để 0x68 mới chính xác.
                CUNG CẤP PSOC, MẠCH NẠP
                CHUYỂN ĐỔI USB <-> RS485 AutoBaud
                RS232 <-> RS485 MultiBaud
                MẠCH NẠP USBPPI S7-200
                Mobile: 0906076116
                Email:

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                • mansion123
                  Bật mí những điều ít ai biết về thi công gỗ óc chó
                  bởi mansion123
                  Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                  ...
                  hôm nay, 16:08
                • tuyennhan
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi tuyennhan
                  Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                  Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                  hôm nay, 07:44
                • vi van pham
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi vi van pham
                  Cám ơn những lời chúc tốt đẹp của em.

                  Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                  Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                  hôm nay, 02:00
                • nhathung1101
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi nhathung1101
                  Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                  Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                  Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                  Hôm qua, 22:18
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                  Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                  Hôm qua, 14:51
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                  Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                  Hôm qua, 14:39
                • dinhthuong80
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi dinhthuong80
                  Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                  Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                  Hôm qua, 14:28
                • bqviet
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi bqviet
                  Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                  21-02-2025, 20:26
                • mèomướp
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi mèomướp
                  Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                  21-02-2025, 12:32
                • vi van pham
                  Trả lời cho Tiếng Anh cho người Việt
                  bởi vi van pham
                  Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                  Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                  20-02-2025, 21:31
                Đang tải...
                X