Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về chuẩn truyền thông I2C (cụ thể là 8051 & DS1307)

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

  • Cần giúp đỡ về chuẩn truyền thông I2C (cụ thể là 8051 & DS1307)

    Mình đang học vi điều khiển, và muốn làm một cái đồng hồ thời gian thực có hẹn giờ dùng 8051 và DS1307.
    Mình đã đọc các bài viết có liên quan đến DS1307,sau đó có làm thử, mô phỏng mà không chạy được,
    và còn một số thắc mắc,nên đăng bài này muốn nhờ các bạn, các anh (chị) đã "đi trước" về cái này giúp đỡ.
    1. trong tín hiệu bắt đầu START:
    SDA 1 -> 0 trong khi SCL =1
    vậy sau khi kết thúc tín hiệu khởi động thì trạng thái của các bus SDA và SCl là như thế nào.
    2. trong tín hiệu kết thúc STOP
    SDA 0 -> 1 trong khi SCL =1
    vậy sau khi kết thúc tín hiệu kết thúc thì trạng thái của các bus SDA và SCL là như thế nào.
    3. bit ACK, xác nhận đã truyền xong 1 byte
    với bit ACK, thì trạng thái các bus SDA và SCL "trong" quá trình truyền bit ACK và "sau" quá trình kết thúc bit ACK là như thế nào
    4. khi 8051 truyền dữ liệu và DS1307 nhận dữ liệu, sau khi truyền nhận xong 8 bit,thì DS1307 sẽ gửi bit ACK xác nhận, thì 8051 có cần đọc vào bit ACK không.
    5. khi 8051 nhận dữ liệu và DS1307 truyền dữ liệu, sau khi 8051 nhận xong 8 bit, thì có cần gửi bit ACK không.
    < các câu hỏi trên cho phần cứng chỉ gồm 8051 và DS1307>
    cảm ơn các bạn, các anh (chi ) nhiều.

  • #2
    Chào bạn,mình đang làm mạch đồng hồ số có hẹn giờ.nhưng mình chưa rành cái này lắm,thấy trên diễn đàn bạn đã làm cái này.nếu Bạn có đồ án hay tài liệu về cái này thì gửi cho mình tham khảo với nhe!
    giao tiếp của con DS1307 - 8051-HIỂN THỊ LED 7 ĐOẠN + HẸN GIỜ
    vẽ và chạy mô phỏng trên protues,lập trình bang ngôn ngữ ASM
    CÁC Bạn gửi cho mình theo địa chỉ mail nay nhe : thoisinhvienqnu@gmail.com

    Comment


    • #3
      Chào bạn,mình đang làm mạch đồng hồ số có hẹn giờ.nhưng mình chưa rành cái này lắm,thấy trên diễn đàn bạn đã làm cái này.nếu Bạn có đồ án hay tài liệu về cái này thì gửi cho mình tham khảo với nhe!
      giao tiếp của con DS1307 - 8051-HIỂN THỊ LED 7 ĐOẠN + HẸN GIỜ
      vẽ và chạy mô phỏng trên protues,lập trình bang ngôn ngữ ASM
      CÁC Bạn gửi cho mình theo địa chỉ mail nay nhe : thoisinhvienqnu@gmail.com

      Comment


      • #4
        đọc datasheet của DS1307 nó viết rất rõ START,STOP,ACK thì phải làm gì. nhìn cái hình vẽ đó. bạn nên đọc datasheet trước đọcxong sẽ hiểu, không hểu thì bạn lên diễn đàn hỏi nhé

        Comment


        • #5
          Xin các tiền bối chỉ giáo!

          Mình đang làm cái đồng hồ 8951 và DS1307 nhưng phần code cho HIỂN THỊ NGÀY (thứ 2, 3, 4, ...) cứ loay hoay mãi mà chả xong nên nhờ các Huynh vui lòng chỉ giáo:
          1/ Với đoạn code thứ 1 thì nó hiển thị Giờ, Phút, Giây bình thường nhưng HIỂN THỊ NGÀY THỨ lại chứng cụ thể:
          - Ấn phím điều chỉnh tăng giảm ngày thứ bình thường nhưng khi "enter" thì nó lại tắt led ngày thứ và giá trị ngày thứ về số 0.
          2/ Đoạn code thứ 2 thì lại khác:
          -Led ngày thứ hiển thị bình thường nhưng cứ mỗi khi đến 00 giây thì Led giây lại rung rung con số o của đơn vị giây thành số 8 trước khi chuyển sang số 1. Nghĩa là đồng hồ của mình không có 00 giây mà 00 giây được thay bằng 08 giây rung rung chuyển sang 01.
          Mình nghĩ có thể phần code đọc ngày thứ của mình sai. Nhưng có hay không và sửa lại tưứ nào ... mong các bậc "Cao tăng" giúp đỡ. Thành thật biết ơn nhiều!
          CODE 1:
          acall i2c_start
          mov a,#0D0h
          acall i2c_write
          mov a,#00h
          acall i2c_write
          acall i2c_start
          mov a,#0D1h
          acall i2c_write
          clr i2c_ack_out
          acall i2c_read
          mov sec,a
          setb i2c_ack_out
          acall i2c_read
          mov min,a
          acall i2c_stop;
          MOV A,SEC
          JZ UPDATE_TIME
          mov led1,sec
          mov led2,sec
          anl led1,#0Fh
          anl led2,#0F0h
          mov a,led2
          swap a
          mov led2,a
          mov a,sec
          ret
          UPDATE_TIME:
          acall i2c_start
          mov a,#0D0h
          acall i2c_write
          mov a,#00H
          acall i2c_write
          acall i2c_start
          mov a,#0D1h
          acall i2c_write
          clr i2c_ack_out
          acall i2c_read
          mov sec,a
          acall i2c_read
          mov min,a
          ;SETB i2c_ack_out ;CO LENH NAY LED THU KHONG SANG
          acall i2c_read
          mov hour,a
          acall i2c_read
          mov DAY,a
          acall i2c_stop

          mov led1,sec
          mov led2,sec
          anl led1,#0FH
          anl led2,#0F0H
          mov a,led2
          swap a
          mov led2,a

          CODE2:
          acall i2c_start
          mov a,#0D0h
          acall i2c_write
          mov a,#00h
          acall i2c_write
          acall i2c_start
          mov a,#0D1h
          acall i2c_write
          clr i2c_ack_out
          acall i2c_read
          mov sec,a
          setb i2c_ack_out
          acall i2c_read
          mov min,a
          acall i2c_stop;
          MOV A,SEC
          JZ UPDATE_TIME
          mov led1,sec
          mov led2,sec
          anl led1,#0Fh
          anl led2,#0F0h
          mov a,led2
          swap a
          mov led2,a
          mov a,sec
          ret
          UPDATE_TIME:
          acall i2c_start
          mov a,#0D0h
          acall i2c_write
          mov a,#00H
          acall i2c_write
          acall i2c_start
          mov a,#0D1h
          acall i2c_write
          clr i2c_ack_out
          acall i2c_read
          mov sec,a
          acall i2c_read
          mov min,a
          SETB i2c_ack_out ;CO LENH NAY LED THU KHONG SANG
          acall i2c_read
          mov hour,a
          acall i2c_read
          mov DAY,a
          acall i2c_stop

          mov led1,sec
          mov led2,sec
          anl led1,#0FH
          anl led2,#0F0H
          mov a,led2
          swap a
          mov led2,a

          Comment


          • #6
            THÀNH THẬT XIN LỖI CÁC BẠN: mình nói nhầm đoạn code 1 thành code 2 và ngược lại
            Xin các Bác bỏ qua cho và nghiên cứu giúp đỡ dủm!
            Thanks!

            Comment


            • #7
              file mô phỏng Proteus7.7
              Free File Hosting & Video Downloads, Free File Sharing, Online Friends Network - Ziddu

              codes bằng asm

              Free File Hosting & Video Downloads, Free File Sharing, Online Friends Network - Ziddu

              Comment


              • #8
                Nguyên văn bởi hoadang Xem bài viết
                Mình đang học vi điều khiển, và muốn làm một cái đồng hồ thời gian thực có hẹn giờ dùng 8051 và DS1307.
                Mình đã đọc các bài viết có liên quan đến DS1307,sau đó có làm thử, mô phỏng mà không chạy được,
                và còn một số thắc mắc,nên đăng bài này muốn nhờ các bạn, các anh (chị) đã "đi trước" về cái này giúp đỡ.
                1. trong tín hiệu bắt đầu START:
                SDA 1 -> 0 trong khi SCL =1
                vậy sau khi kết thúc tín hiệu khởi động thì trạng thái của các bus SDA và SCl là như thế nào.
                2. trong tín hiệu kết thúc STOP
                SDA 0 -> 1 trong khi SCL =1
                vậy sau khi kết thúc tín hiệu kết thúc thì trạng thái của các bus SDA và SCL là như thế nào.
                3. bit ACK, xác nhận đã truyền xong 1 byte
                với bit ACK, thì trạng thái các bus SDA và SCL "trong" quá trình truyền bit ACK và "sau" quá trình kết thúc bit ACK là như thế nào
                4. khi 8051 truyền dữ liệu và DS1307 nhận dữ liệu, sau khi truyền nhận xong 8 bit,thì DS1307 sẽ gửi bit ACK xác nhận, thì 8051 có cần đọc vào bit ACK không.
                5. khi 8051 nhận dữ liệu và DS1307 truyền dữ liệu, sau khi 8051 nhận xong 8 bit, thì có cần gửi bit ACK không.
                < các câu hỏi trên cho phần cứng chỉ gồm 8051 và DS1307>
                cảm ơn các bạn, các anh (chi ) nhiều.
                Bạn nên đọc kỹ datasheet của Ds1307 hoặc các tài liệu về chuẩn I2C để biết,thường thì phần I2C trong datasheet của vdk nào cũng nói rõ hết,hoặc bạn có thể tham khảo trang này: Bài 8 - Giao tiếp TWI - I2C để biết thêm về chuẩn I2C nhé
                các vấn đề về sdcard, usb, tcp/ip, upgrate firmware,...
                trên các dòng chip: stm32, lpc of nxp
                please cell phone: 01649895559

                Comment


                • #9
                  Mình có vài lời khuyên cho các bạn giao tiếp 8051 với DS1307 như sau:

                  1. Các bạn nên tìm hiểu I2C, SDA, SCL là gì?

                  2. Tiếp theo các bạn muốn đọc và lưu dữ liệu trong DS1307 chẳng hạn, các bạn nên nghiên cứu kỹ giản đồ xung truyền thông I2C của con DS1307 (trong datasheet). (Tôi giao tiếp được cũng là do nghiên cứu giản đồ xung này).

                  3. Không nên mô phỏng mà các bạn nên làm thực nghiệm trên test board. (vì thực nghiệm khác với mô phỏng nhiều).

                  4. Đối với các bạn mới tìm hiểu con này thì các bạn không nên đọc dữ liệu giờ phút giây con này ngay. Mà hãy học cách lưu 1 giá trị vào 1 ô nhớ (thanh ghi) (ví dụ ô nhớ 0ah) của con DS1307 và sau đó đọc giá trị ô nhớ đó ra cho hiển thị ra led để quan sát (tạo vòng lặp lưu và đọc liên tục). So sánh kết quả nếu giá trị lưu trong ô nhớ DS1307 giống giá trị trên led là coi như bạn đã giao tiếp I2C thành công.

                  5. Sau đó các bạn mới tìm hiểu các ô nhớ (thanh ghi) giờ phút giây ngày tháng năm.

                  Các bạn cứ thực nghiệm đi. Có gì khó khăn mình sẽ hướng dẫn.

                  Comment


                  • #10
                    Nguyên văn bởi mhl167 Xem bài viết
                    Mình có vài lời khuyên cho các bạn giao tiếp 8051 với DS1307 như sau:

                    1. Các bạn nên tìm hiểu I2C, SDA, SCL là gì?

                    2. Tiếp theo các bạn muốn đọc và lưu dữ liệu trong DS1307 chẳng hạn, các bạn nên nghiên cứu kỹ giản đồ xung truyền thông I2C của con DS1307 (trong datasheet). (Tôi giao tiếp được cũng là do nghiên cứu giản đồ xung này).

                    3. Không nên mô phỏng mà các bạn nên làm thực nghiệm trên test board. (vì thực nghiệm khác với mô phỏng nhiều).

                    4. Đối với các bạn mới tìm hiểu con này thì các bạn không nên đọc dữ liệu giờ phút giây con này ngay. Mà hãy học cách lưu 1 giá trị vào 1 ô nhớ (thanh ghi) (ví dụ ô nhớ 0ah) của con DS1307 và sau đó đọc giá trị ô nhớ đó ra cho hiển thị ra led để quan sát (tạo vòng lặp lưu và đọc liên tục). So sánh kết quả nếu giá trị lưu trong ô nhớ DS1307 giống giá trị trên led là coi như bạn đã giao tiếp I2C thành công.

                    5. Sau đó các bạn mới tìm hiểu các ô nhớ (thanh ghi) giờ phút giây ngày tháng năm.

                    Các bạn cứ thực nghiệm đi. Có gì khó khăn mình sẽ hướng dẫn.
                    Application Note 95 . That all we need for interface with DS1307

                    Comment


                    • #11
                      cảm ơn bạn nhiều nha .

                      Comment


                      • #12
                        zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz zzzzzzzzzzzzzzzzz

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X