Thông báo

Collapse
No announcement yet.

Kinh nghiệm làm mạch đồng hồ DS1307

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

  • #16
    ban xem thử cái này
    http://machdientu.net/read.php?56
    sống trong đời sống cần có một tấm lòng!
    email:

    Comment


    • #17
      chân 31 để trống thì làm sao mà 8051 hoạt động được. bạn trên lên VCC đi chắc là lỗi ớ đó rồi!

      Comment


      • #18
        nếu ở mức 1, thì at89s52 thi hành chương trình ROM nội nếu ở mức không thì at89s52 thì hành chương trình từ bộ nhớ mở rộng
        nếu bạn không cấp nguồn 5v cho chân 31 IC thì mạch không bao giờ chạy
        sống trong đời sống cần có một tấm lòng!
        email:

        Comment


        • #19
          Cám ơn mấy anh chỉ giúp, em nối chân 31 lên Vcc rồi mà vẫn không chạy luôn, bây giờ mấy anh làm ơn xem lại giúp em cái code xem, trước tiên là cái code lập trình như vậy đã đúng chưa vậy, hay là tại cái code sai nên nãy giờ toàn lo cái mạch(file mô phỏng em làm đã chạy ok, cái file dochangloat.asm là em làm gần như là theo cái giản đồ thời gian của datasheet, chỉ có 1 cái là khi READ thì em phải READ từng thanh ghi một chứ không thể READ 1 loạt giây phút giờ 1 lúc đc, không biết mấy anh có lập trình như vậy ko), còn nếu code đã ok thì việc ráp lại mạch em ráp lại mấy cái nữa cũng ko sao ak.

          SWAP.zip

          Comment


          • #20
            PHP Code:

            ;=====ADD_LOW LA THANH GHI CHUA DIA CHI CUA CUA CAC THANH GHI CUA RTC
            ;=====I2CDATA LA BIEN LUU GIA TRI THU DUOC KHI LAY TU RTC

                ADD_LOW        data    0bH 
            //dia chi ban thay doi tuy` y'
                
            I2CDATA        data    0cH //dia chi ban thay doi tuy` y'

                
            CONT_BYTE_W        EQU        0D0H  //byte dieu khien ghi
                
            CONT_BYTE_R        EQU        0D1H  //byte dieu khien doc

                 
            scl        bit     P1.6    //xung clock cho rtc //dat lai tuy` y'
                 
            sda        bit        P1.7     //dat lai tuy` y'
            //====================================
            ;=====STOP I2C
            I2C_STOP
            :
                
            CLR       SDA
                SETB      SCL
                NOP
                SETB      SDA
                RET
            ;*****************************************************
            WRITE_BYTE:           
                                   
            CLR     SDA                   ;BIT START CHO I2C
                                   CLR     SCL
                                   MOV     A
            ,#CONT_BYTE_W        ;GUI BYTE DIEU KHIEN
                                   
            CALL   LOOP_BYTE
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA
            ,WRITE_BYTE        ;HOI VONG` DE KIEM TRA COBAN
                                   CLR     SCL
                                   MOV     A
            ,ADD_LOW             ;GUI DIA CHI VAO RTC QUA I2C
                                   CALL   LOOP_BYTE              
            ;CHUONG TRINH CON GUI DIA CHI BANG I2C
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA
            ,WRITE_BYTE        ;HOI VONG DE KIEM TRA CO BAN
                                   CLR     SCL
                                   MOV     A
            ,I2CDATA              ;GUI DATA VAO DIA CHI TRONG RTC
                                   CALL   LOOP_BYTE
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA
            ,WRITE_BYTE        ;LAP LAI NEU CO` BAN CHUA DUOC XOA'
                                   CLR     SDA
                                   CLR     SCL
                                   SETB    SCL                   ;STOP BIT
                                   SETB    SDA
                                   RET

            ;******************************************************CHUONG TRINH CON DOC BYTE TU RTC KIEU I2C
            READ_BYTE:             
                                    
                                   CLR     SDA                   ;START BIT
                                   CLR     SCL
                                   MOV     A,#CONT_BYTE_W        ;GUI BYTE DIEU KHIEN
                                   CALL   LOOP_BYTE
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA,READ_BYTE         ;LAP LAI NEU CO
            BAN
                                   CLR     SCL
                                   MOV     A
            ,ADD_LOW             ;GUI DIA CHI
                                   CALL   LOOP_BYTE
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA
            ,READ_BYTE         ;LAP LAI NEU CO` BAN SDA CHUA DC XOA'
                                   CLR     SCL

                                   SETB    SCL
                                   SETB    SDA
                                   CLR     SDA                   ;STOP BIT
                                   CLR     SCL
                                   MOV     A,#CONT_BYTE_R        ;GUI BYTE DIEU KHIEN
                                   CALL   LOOP_BYTE
                                   SETB    SDA
                                   SETB    SCL
                                   JB      SDA,READ_BYTE         ;LAP LAI NEU CO
            BAN CHUA DUOC XOA'
                                   CLR     SCL
                                   CALL   LOOP_READ
                                   SETB    SDA
                                   SETB    SCL
                                   CLR     SCL

                                   SETB    SCL                   ;STOP BIT
                                   SETB    SDA
                                   RET

            ;*******************************************************************************
            ;*                      GHI VAO RTC THEO PHUONG THUC I2C                       *
            ;* INPUT: ACC                                                                     *
            ;*******************************************************************************
            LOOP_BYTE:             PUSH    02H
                                   MOV     R2,#08H
            LOOP_SEND:             RLC     A
                                   MOV     SDA,C
                                   SETB    SCL
                                   CLR     SCL
                                   DJNZ    R2,LOOP_SEND
                                   POP     02H
                                   RET

            ;*******************************************************************************
            ;*                       DOC TU RTC THEO PHUONG THUC I2C                       *
            ;* OUTPUT: ACC                                                                  *
            ;*******************************************************************************
            LOOP_READ:             PUSH   02H
                                   MOV    R2,#08H
            LOOP_READ1:            SETB   SCL
                                   MOV    C,SDA
                                   CLR    SCL
                                   RLC    A
                                   DJNZ   R2,LOOP_READ1
                                   MOV    I2CDATA,A
                                   POP    02H
                                   RET 
            code này chạy RTC DS1307 chuẩn 100 %, nhớ khai báo các thanh ghi

            Comment


            • #21
              Nguyên văn bởi ylotus Xem bài viết
              Cám ơn mấy anh chỉ giúp, em nối chân 31 lên Vcc rồi mà vẫn không chạy luôn, bây giờ mấy anh làm ơn xem lại giúp em cái code xem, trước tiên là cái code lập trình như vậy đã đúng chưa vậy, hay là tại cái code sai nên nãy giờ toàn lo cái mạch(file mô phỏng em làm đã chạy ok, cái file dochangloat.asm là em làm gần như là theo cái giản đồ thời gian của datasheet, chỉ có 1 cái là khi READ thì em phải READ từng thanh ghi một chứ không thể READ 1 loạt giây phút giờ 1 lúc đc, không biết mấy anh có lập trình như vậy ko), còn nếu code đã ok thì việc ráp lại mạch em ráp lại mấy cái nữa cũng ko sao ak.

              [ATTACH]28064[/ATTACH]
              code này viết dựa trên code cả bạn (chumanh) tạo xung 1hz tại chân 7 ds1307 mô phỏng trên proteus ok.
              Code:
                 ;=====ADD_LOW LA THANH GHI CHUA DIA CHI CUA CUA CAC THANH GHI CUA RTC
              ;=====I2CDATA LA BIEN LUU GIA TRI THU DUOC KHI LAY TU RTC
              
                  ADD_LOW        EQU   20H //dia chi ban thay doi tuy` y'
                  I2CDATA        EQU    21H //dia chi ban thay doi tuy` y'
              
                  CONT_BYTE_W        EQU        0D0H  //byte dieu khien ghi
                  CONT_BYTE_R        EQU        0D1H  //byte dieu khien doc
              
                   scl        bit     P3.0    //xung clock cho rtc // nhớ kết nối cho đúng
                   sda        bit        P3.1     //nhớ kết nối cho đúng
              //====================================
                     
                  ORG    0000H
              
              MAIN:
              mov ADD_LOW,#0 ;thanhghi 0
              mov I2CDATA,#0 ;CH=0
              call WRITE_BYTE    
              mov ADD_LOW,#7 ;thanhghi 7
              mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307
              call WRITE_BYTE    
              jmp $
              ;=====STOP I2C
              I2C_STOP:
                  CLR       SDA
                  SETB      SCL
                  NOP
                  SETB      SDA
                  RET
              ;*****************************************************
              WRITE_BYTE:           
                                     CLR     SDA                   ;BIT START CHO I2C
                                     CLR     SCL
                                     MOV     A,#CONT_BYTE_W        ;GUI BYTE DIEU KHIEN
                                     CALL   LOOP_BYTE
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,WRITE_BYTE        ;HOI VONG` DE KIEM TRA CO` BAN
                                     CLR     SCL
                                     MOV     A,ADD_LOW             ;GUI DIA CHI VAO RTC QUA I2C
                                     CALL   LOOP_BYTE              ;CHUONG TRINH CON GUI DIA CHI BANG I2C
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,WRITE_BYTE        ;HOI VONG DE KIEM TRA CO BAN
                                     CLR     SCL
                                     MOV     A,I2CDATA              ;GUI DATA VAO DIA CHI TRONG RTC
                                     CALL   LOOP_BYTE
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,WRITE_BYTE        ;LAP LAI NEU CO` BAN CHUA DUOC XOA'
                                     CLR     SDA
                                     CLR     SCL
                                     SETB    SCL                   ;STOP BIT
                                     SETB    SDA
                                     RET
              
              ;******************************************************CHUONG TRINH CON DOC BYTE TU RTC KIEU I2C
              READ_BYTE:             
                                      
                                     CLR     SDA                   ;START BIT
                                     CLR     SCL
                                     MOV     A,#CONT_BYTE_W        ;GUI BYTE DIEU KHIEN
                                     CALL   LOOP_BYTE
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,READ_BYTE         ;LAP LAI NEU CO` BAN
                                     CLR     SCL
                                     MOV     A,ADD_LOW             ;GUI DIA CHI
                                     CALL   LOOP_BYTE
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,READ_BYTE         ;LAP LAI NEU CO` BAN SDA CHUA DC XOA'
                                     CLR     SCL
              
                                     SETB    SCL
                                     SETB    SDA
                                     CLR     SDA                   ;STOP BIT
                                     CLR     SCL
                                     MOV     A,#CONT_BYTE_R        ;GUI BYTE DIEU KHIEN
                                     CALL   LOOP_BYTE
                                     SETB    SDA
                                     SETB    SCL
                                     JB      SDA,READ_BYTE         ;LAP LAI NEU CO` BAN CHUA DUOC XOA
                                     CLR     SCL
                                     CALL   LOOP_READ
                                     SETB    SDA
                                     SETB    SCL
                                     CLR     SCL
              
                                     SETB    SCL                   ;STOP BIT
                                     SETB    SDA
                                     RET
              
              ;*******************************************************************************
              ;*                      GHI VAO RTC THEO PHUONG THUC I2C                       *
              ;* INPUT: ACC                                                                     *
              ;*******************************************************************************
              LOOP_BYTE:             PUSH    02H
                                     MOV     R2,#08H
              LOOP_SEND:             RLC     A
                                     MOV     SDA,C
                                     SETB    SCL
                                     CLR     SCL
                                     DJNZ    R2,LOOP_SEND
                                     POP     02H
                                     RET
              
              ;*******************************************************************************
              ;*                       DOC TU RTC THEO PHUONG THUC I2C                       *
              ;* OUTPUT: ACC                                                                  *
              ;*******************************************************************************
              LOOP_READ:             PUSH   02H
                                     MOV    R2,#08H
              LOOP_READ1:            SETB   SCL
                                     MOV    C,SDA
                                     CLR    SCL
                                     RLC    A
                                     DJNZ   R2,LOOP_READ1
                                     MOV    I2CDATA,A
                                     POP    02H
                                     RET  
               END
              bạn lên nhớ rằng phần cứng cũng rất quan trọng.
              ngày trước làm ds1307 2 con điện trở kéo lên tại chân 5,6 là 4.7k nó không chạy,thay bằng 10k nó mới chịu chạy.
              1:kiểm tra xung 1hz thì dùng đồng hồ đo vol .
              2:lắp một con led vào chân số 7 xem nó có nhấp nháy hay không.
              Last edited by tdm; 25-03-2011, 11:12.
              |

              Comment


              • #22
                Tình hình là em đã nạp và đo thử chân số 7 của DS1307 nhưng chả thấy tín hiệu j hết, chả lẽ cái modul DS1307 nhỏ xíu vậy mà khó chạy dữ vậy trời.
                Anh tdm cho em hỏi chỗ cái code
                Code:
                MAIN:
                mov ADD_LOW,#0 ;thanhghi 0
                mov I2CDATA,#0 ;CH=0
                call WRITE_BYTE    
                mov ADD_LOW,#7 ;thanhghi 7
                mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307
                call WRITE_BYTE    
                jmp $
                ;=====STOP I2C
                I2C_STOP:
                    CLR       SDA
                    SETB      SCL
                    NOP
                    SETB      SDA
                    RET
                Em nhìn cái giải thuật MAIN thì ko thấy gọi chương trình READ nào mà chỉ có WRITE và nhảy tại chỗ vậy READ RTC ở đâu vậy anh. còn cái I2C_STOP cũng ko thấy gọi chương trình này luôn. hùi trước em có thay con điện trở 4k7 và 10k rồi cũng ko thấy chạy. cái mạch em đã up ở trang 1 chả lẽ sai hả huynh

                Comment


                • #23
                  Nguyên văn bởi ylotus Xem bài viết
                  Tình hình là em đã nạp và đo thử chân số 7 của DS1307 nhưng chả thấy tín hiệu j hết, chả lẽ cái modul DS1307 nhỏ xíu vậy mà khó chạy dữ vậy trời.
                  Anh tdm cho em hỏi chỗ cái code
                  Code:
                  MAIN:
                  mov ADD_LOW,#0 ;thanhghi 0
                  mov I2CDATA,#0 ;CH=0
                  call WRITE_BYTE    
                  mov ADD_LOW,#7 ;thanhghi 7
                  mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307
                  call WRITE_BYTE    
                  jmp $
                  ;=====STOP I2C
                  I2C_STOP:
                      CLR       SDA
                      SETB      SCL
                      NOP
                      SETB      SDA
                      RET
                  Em nhìn cái giải thuật MAIN thì ko thấy gọi chương trình READ nào mà chỉ có WRITE và nhảy tại chỗ vậy READ RTC ở đâu vậy anh. còn cái I2C_STOP cũng ko thấy gọi chương trình này luôn. hùi trước em có thay con điện trở 4k7 và 10k rồi cũng ko thấy chạy. cái mạch em đã up ở trang 1 chả lẽ sai hả huynh
                  code này chỉ để kiểm tra xem ds1307 đã chạy chưa, không cần dùng read_byte.I2C_STOP đã viết sẵn trong ct con WRITE_BYTE.Cũng lâu rồi anh không còn làm 89 nữa lên không còn mạch để chạy thử.
                  |

                  Comment


                  • #24
                    Anh có thể xem qua cái code em viết xem nó có sai ko anh, em cũng ko biết bây giờ phải làm sao với cái mạch này nữa, tại em muốn tự mình viết để có thể đọc và hiểu cách nó hoạt động ntn, em có lấy VOM đo chân p3.0 và p3.1 của 89 mà thấy nó lên 5V rồi đứng im trên đó luôn.

                    Comment


                    • #25
                      thế bạn đã chắc chắn rằng VDK của bạn đã hoạt động chưa??? bạn đã test với 1 ctr đơn giản như chớp tắt 4 port của VĐK chưa???

                      Comment


                      • #26
                        Huhu!Bác này giống em ghê.Nhưng mà em viết bằng ct C.Mô phỏng chạy ngon lành.Chẳng hiểu sao làm mạch thật thì không chạy.
                        Đã có pin 3V, SDA và SCL có R 10k kéo lên Vcc.
                        VDK 89s52 đã rest thử chạy ngon lành.
                        Sao chân 7 nó chẳng có tín hiệu gì cả.
                        ai giúp em với

                        Comment


                        • #27
                          Bác nào hướng dẫn em cái nào

                          Comment


                          • #28
                            không có ai giúp ah.alooooooooooooooooooooooooooooooooooooooooooo

                            Comment


                            • #29
                              Bạn viết ct reset 1307 thử?
                              Mạch nạp Pickit 2 SE ---> 170k BH 1 năm
                              Pic 18F2550 PDIP Thailand bao test 60K/1c


                              Comment


                              • #30
                                Là sao vậy.Bạn nói rõ hơn được không.Cái ct reset như thế nào vậy bạn.Post ví dụ cho mh xem nha

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X