Thông báo

Collapse
No announcement yet.

Ds1307

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

  • #91
    Nguyên văn bởi koten306 Xem bài viết
    Ngày xưa tớ lập trình Codevisionavr tớ cũng tưởng thế,(vì cũng học qua C++ nên cũng hiểu là phải có tham chiếu &),nhưng nó chỉ đúng trong lập trình C,còn trong codevision,tớ thay lại &h,&m,&s thì nó lại báo lỗi.mà tớ thử dùng cách của mình thì thấy mô phỏng ngon lành mà.hihi,cũng chẳng hiểu tại sao lại như vậy,mong mọi người thì chỉ dạy.
    Oh,

    Sử dụng CodeVisionAVR C Compiler mà.

    Nếu không sử dụng (&h, &m, &s) thì kết quả từ chương trình con (hay hàm) không thể trả về kết quả được.
    khi sử dụng (h,m,s) là chỉ để truyền giá trị từ h, m, s đến chương trình con thôi.

    Nếu báo lỗi thì có thể là vấn đề khác.
    More friends more foods

    Comment


    • #92
      ds1307

      Theo hương dẫn của các bạn minh cũng đã làm dược cái đồng hồ mô phỏng trên proteus nhưng minh muốn thêm ba cái nút bấm để chỉnh các giá trị của DS1307 nhưng khó quá mong các bạn giúp đỡ.
      Còn đây là mạch mô phỏng của mình
      Attached Files
      |

      Comment


      • #93
        cái đồng hồ ds1307 mình làm hiện nó chạy chậm mỗi ngày khoảng vài giây, sờ vô con thạch anh gần ds1307 là đồng hồ đứng lun, thả tay ra lại chạy bình thường. Nhìn vô datasheet ds1307 thấy nó khuyến cáo phải có đường mass xung quanh chân nhận xta, rút kinh nghiệm lần sau phải vẽ lại chỗ này cho chính xác, chứ chạy sai thì cũng kì! còn làm với ds12c887 thì vô tư, chạy chính xác cực kì, nhưng ngẫm lại thì mỗi con đều có cái hay riêng, ko thể so sánh con nào hơn con nào!

        Comment


        • #94
          Nguyên văn bởi bombom Xem bài viết
          Theo hương dẫn của các bạn minh cũng đã làm dược cái đồng hồ mô phỏng trên proteus nhưng minh muốn thêm ba cái nút bấm để chỉnh các giá trị của DS1307 nhưng khó quá mong các bạn giúp đỡ.
          Còn đây là mạch mô phỏng của mình
          việc chỉnh giờ thì hay làm ta lúng túng. Mình khuyên bác thế này nhé, khi xử lý các giá trị chỉnh giờ thì bác hãy đưa các gt ấy về dạng binary chứ đừng xài dạng bcd nén có sẵn của ds1307, khi ấy bác sẽ thấy việc cộng trừ để chỉnh thời gian là 1 công việc hết sức nhẹ nhàng. Lúc này việc của bác bây giờ là làm sao hiển thị cho đẹp (nhấp nháy các gt khi chỉnh) và chống nhiễu nút, chúc bác thành công. demo 1 đoạn phim đồng hồ của mình làm, chức năng giờ phút giây, chỉnh time, chỉnh ngày tháng (năm nhuận, 30, 31 ngày...), hẹn giờ báo thức, đo nhiệt độ.

          http://clip.vn/watch/time-temp-lcd-89v51,WH85
          Last edited by vodangks; 24-05-2009, 16:41.

          Comment


          • #95
            cảm ơn bạn vodangds mình đã làm được rồi.
            |

            Comment


            • #96
              các bạn có thể bày cho mình cách làm các phím điều chỉnh thời gian được không?thanks

              Comment


              • #97
                unsigned char up_dow()
                {
                if(up==0)
                {
                delay(100);
                do
                { if(ud==0)
                {
                delay(10);
                ud++;
                ud1=ud;
                }
                }
                while(!ud);
                }
                if(dow==0)
                {
                delay(100);
                if(dow==0)
                {
                delay(100);
                ud--;
                ud1=ud/1;
                }
                }
                return ud1;
                }
                các bác hộ em đoạn code, ko hiểu sao em chỉ nhấn 1 lần mà nó nhảy 4-5 giá trị, em muốn nó chỉ nhảy 1 giá trị thôi, đây là đoạn code chỉnh giờ,

                Comment


                • #98
                  Mình làm đồng hồ số dùng ds1307 .hiện giây, phút,giờ trên led 7 đoạn.
                  Nhưng nó bị thế này : hiện được đầy đủ và chính xác các giá trị giây, phút, giờ .Nhưng chỉ hiện được trong vài giây đầu ngay sau khi cấp nguồn cho chíp rồi nhấp nháy một hồi sau đó tắt ngúm, khi reset lại thì cũng tương tự như thế. Nếu reset lại ngay thì chỉ được vài giây đầu rồi im lìm, còn nếu đợi một lúc lâu một chút mới reset thì nó hiện được dài hơn rồi lại tương tự,
                  mình chưa thấy kiểu này bao giờ,ko biết là do nguồn ,hay do nhiểu của con ds1307. mình đoán ko phải do lỗi lập trình, vì ít nhất lúc đầu nó chạy vẫn đúng vài chục giây.

                  Bác nào biết cái này xin chỉ dùm với. Em lang thang trên 4lum mãi mà chưa tìm ra

                  Thank !!

                  Comment


                  • #99
                    chào các bác,các bác cho em hỏi chút ít về DS1307 với
                    1.> DS1307 có tự động tính "day"(thứ) khi cho các thông số ngày,tháng,năm kô
                    2.> sao em ghi vào ô 06h giá trị = 9 ,lúc em đọc lại giá trị của nó lại là 7???
                    3.> nếu ta cứ đưa giá trị 70 vào địa chỉ 00H thì hiện tượng gì xảy ra?
                    4.> sai số thời gian của con này với thạch anh 32.786kHz là bao nhiêu trong 1 tháng
                    5.> ở địa chỉ 03H là địa chỉ chứa ngày trong tuần.giá trị này = 0 thì tương ứng T mấy trong tuần? = 1 thì tương ứng với thứ mấy ???

                    Comment


                    • Nguyên văn bởi rongconn2t Xem bài viết
                      chào các bác,các bác cho em hỏi chút ít về DS1307 với
                      1.> DS1307 có tự động tính "day"(thứ) khi cho các thông số ngày,tháng,năm kô
                      2.> sao em ghi vào ô 06h giá trị = 9 ,lúc em đọc lại giá trị của nó lại là 7???
                      3.> nếu ta cứ đưa giá trị 70 vào địa chỉ 00H thì hiện tượng gì xảy ra?
                      4.> sai số thời gian của con này với thạch anh 32.786kHz là bao nhiêu trong 1 tháng
                      5.> ở địa chỉ 03H là địa chỉ chứa ngày trong tuần.giá trị này = 0 thì tương ứng T mấy trong tuần? = 1 thì tương ứng với thứ mấy ???
                      Bạn xem lại datasheet nhé. Lưu ý là dữ liệu là BCD.
                      1. Sử dụng thuật toán để tính ra thứ trong ngày từ Ngày, Tháng, Năm
                      2. Địa chỉ 06H chứa dữ liệu YEAR được lưu ở dạng BCD.
                      3. Địa chỉ 00H chứa dữ liệu SECOND, thao tác đưa giá trị liên tục vào thì hiện tượng là địa chỉ đó sẽ chứa giá trị được đưa vào.
                      4. Sai số thời gian chính là sai số của thạch anh.
                      5. Địa chỉ 03H chứa dữ liệu HOURS
                      Attached Files
                      More friends more foods

                      Comment


                      • Free m8 LCD,DS1307,4Swith,1 Rellay
                        Bascom AVR
                        '================================================= ================
                        $regfile = "m8def.dat"
                        $crystal = 8000000
                        '$lib "mcsbyte.lbx"
                        '$lib "ds1307clock.lib"

                        Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.0 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
                        Config Lcd = 16 * 2

                        Config Date = Dmy , Separator = /
                        Declare Sub Winning_speaker
                        Declare Sub Winning
                        Declare Sub Scan_swmod
                        Declare Sub Scan_swup
                        Declare Sub Scan_swdown
                        Declare Sub Scan_swexit
                        Declare Sub Select_mods
                        Declare Sub Preset_time
                        Declare Sub Preset_date

                        Config Sda = Portc.4
                        Config Scl = Portc.5

                        Relay Alias Portb.1

                        Swmod Alias Pinb.6
                        Swup Alias Pinb.7
                        Swdown Alias Pind.6
                        Swexit Alias Pind.7

                        Const Ds1307w = &HD0
                        Const Ds1307r = &HD1
                        Config Clock = User
                        Dim _weekday As Byte

                        Dim Wsec As Byte
                        Dim Wmin As Byte
                        Dim Whour As Byte

                        Dim Speaker As Byte

                        Dim Countmod As Byte
                        Dim Countx As Byte
                        Dim Countsw As Byte


                        Dim Swmod_cencel As Byte


                        Dim Winning As Bit
                        Dim Mod_quit As Bit



                        '_weekday = 7
                        ' Time$ = "06:54:55"
                        'Date$ = "05-30-09" '
                        Ddrb = &H03
                        Portb = &HFF
                        Ddrd = &H03
                        Portd = &HFF
                        Swmod = 1
                        'portb =&hff
                        Cls
                        Locate 1 , 1
                        Lcd " NTEV 30 May 09"
                        Locate 2 , 1
                        Lcd "Prog: Innovation"
                        Wait 1
                        Cls
                        Locate 1 , 1
                        Lcd "Model: O'clock"
                        Locate 2 , 1
                        Lcd "Mod Up Down Exit"
                        Wait 3
                        Cls

                        Speaker = 0

                        Do
                        Locate 1 , 1
                        Lcd "Thu:" ; _weekday ; " " ; Date$

                        Locate 2 , 1
                        Lcd "Time : " ; Time$ ; " "


                        Waitms 10

                        Call Winning
                        Call Winning_speaker

                        Call Scan_swmod
                        Call Scan_swexit
                        Call Select_mods

                        Loop

                        End
                        '************************************************* ******************************
                        '================================================= ==============================
                        Getdatetime:
                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 0

                        I2cstart
                        I2cwbyte Ds1307r
                        I2crbyte _sec , Ack
                        I2crbyte _min , Ack
                        I2crbyte _hour , Ack
                        I2crbyte _weekday , Ack
                        I2crbyte _day , Ack
                        I2crbyte _month , Ack
                        I2crbyte _year , Nack
                        I2cstop
                        _sec = Makedec(_sec)
                        _min = Makedec(_min)
                        _hour = Makedec(_hour)
                        _weekday = Makedec(_weekday)
                        _day = Makedec(_day)
                        _month = Makedec(_month)
                        _year = Makedec(_year)

                        Return
                        '================================================= ==============================
                        Setdate:
                        _day = Makebcd(_day) :
                        _month = Makebcd(_month) :
                        _year = Makebcd(_year)
                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 3
                        I2cwbyte _weekday
                        I2cwbyte _day
                        I2cwbyte _month
                        I2cwbyte _year
                        I2cstop
                        Return
                        '================================================= ==============================
                        Settime:
                        _sec = Makebcd(_sec) :
                        _min = Makebcd(_min) :
                        _hour = Makebcd(_hour)
                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 0
                        I2cwbyte _sec
                        I2cwbyte _min
                        I2cwbyte _hour
                        I2cstop
                        Return
                        '************************************************* ******************************
                        Sub Winning
                        Select Case _hour
                        'Winning Time: 7:25:00s
                        '-------------------------------------------------------------------------------
                        Case 7
                        If _min = 25 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        'Winning Time 7:30:00s
                        '-------------------------------------------------------------------------------
                        Elseif _min = 30 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        'Winning Time 9:00:00s
                        '-------------------------------------------------------------------------------
                        Case 9
                        If _min = 0 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        'Winning Time 9:10:00s
                        '-------------------------------------------------------------------------------
                        Elseif _min = 10 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        'Winning Time 11:30:00s
                        '-------------------------------------------------------------------------------
                        Case 11
                        If _min = 30 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        'Winning Time 12:25:00s
                        '-------------------------------------------------------------------------------
                        Case 12
                        If _min = 25 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        'Winning Time 12:30:00s
                        '-------------------------------------------------------------------------------
                        Elseif _min = 30 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        'Winning Time 14:00:00s
                        '-------------------------------------------------------------------------------
                        Case 14
                        If _min = 0 Then
                        If _sec = 0 Then
                        Speaker = 100
                        Winning = 1
                        End If
                        'Winning Time 14:05:00s
                        '-------------------------------------------------------------------------------
                        Elseif _min = 5 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        'Winning Time 16:30:00s
                        '-------------------------------------------------------------------------------
                        Case 16
                        If _min = 30 Then
                        If _sec = 0 Then
                        Speaker = 200
                        Winning = 1
                        End If
                        End If
                        Case Else
                        'Relay = 1
                        End Select
                        '-------------------------------------------------------------------------------
                        End Sub
                        '************************************************* ******************************
                        Sub Winning_speaker
                        If Winning = 1 Then
                        Cls
                        Locate 1 , 1
                        Lcd "Winng: " ; Time$
                        Do
                        Locate 2 , 1
                        Lcd " Speaker on:" ; Speaker ; " s "
                        Decr Speaker

                        Relay = 0
                        Waitms 25
                        If Speaker = 0 Then
                        Goto Winning_exit
                        End If
                        Loop
                        End If
                        Winning_exit:
                        Winning = 0
                        Relay = 1
                        End Sub
                        '================================================= ==============================
                        Sub Scan_swmod
                        If Swmod = 0 Then
                        For Countsw = 1 To 200
                        If Swmod = 1 Then
                        Goto Scmod_exit
                        End If
                        Waitms 2
                        Next Countsw
                        Incr Countmod
                        If Countmod = 8 Then
                        Countmod = 0
                        End If

                        Cls
                        Locate 2 , 1
                        Lcd "Mod:[" ; Countmod ; "]"
                        Waitms 500
                        Cls
                        Waitms 250

                        End If
                        Scmod_exit:
                        End Sub
                        '================================================= ==============================
                        Sub Scan_swexit
                        If Swexit = 0 Then
                        For Countsw = 1 To 250
                        If Swexit = 1 Then
                        Goto Scexit_exit
                        End If
                        Waitms 2
                        Next Countsw

                        Countmod = 0
                        Cls
                        Locate 2 , 12
                        Lcd "Exit."
                        Waitms 500

                        End If
                        Scexit_exit:

                        If Mod_quit = 0 Then
                        If Countmod > 0 Then
                        Incr Swmod_cencel
                        Waitms 10
                        If Swmod_cencel = 250 Then
                        Countmod = 0
                        Cls
                        Locate 1 , 1
                        Lcd "Time : " ; Time$ ; " "
                        Locate 2 , 1
                        Lcd "Auto exit Mod[]"
                        Wait 2
                        Cls
                        Else
                        Goto Scexit_cencel
                        End If
                        End If
                        End If
                        Scexit_cencel:

                        End Sub
                        '================================================= ==============================
                        Sub Select_mods
                        Select Case Countmod
                        Case 1
                        'Preset_Timer: _min
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit1
                        End If
                        Waitms 2
                        Next Countsw

                        Incr _min
                        If _min = 60 Then
                        _min = 0
                        End If


                        Call Preset_time

                        End If
                        Swup_exit1:
                        Swup = 1

                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit1
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _min
                        If _min = 255 Then
                        _min = 59
                        End If


                        Call Preset_time
                        End If
                        Swdown_exit1:
                        Swdown = 1
                        '+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
                        Case 2
                        'Preset_Timer: _hour
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit2
                        End If
                        Waitms 2
                        Next Countsw

                        Incr _hour
                        If _hour = 24 Then
                        _hour = 0
                        End If

                        Call Preset_time
                        End If
                        Swup_exit2:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit2
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _hour
                        If _hour = 255 Then
                        _hour = 23
                        End If

                        Call Preset_time
                        End If
                        Swdown_exit2:
                        Swdown = 1
                        '-------------------------------------------------------------------------------
                        Case 3
                        'Preset_Timer: _sec
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit3
                        End If
                        Waitms 2
                        Next Countsw
                        _sec = 59
                        Call Preset_time
                        End If
                        Swup_exit3:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit3
                        End If
                        Waitms 2
                        Next Countsw

                        _sec = 00
                        Call Preset_time
                        End If
                        Swdown_exit3:
                        Swdown = 1
                        '-------------------------------------------------------------------------------
                        Case 4
                        'Preset_Timer: _weekday
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit4
                        End If
                        Waitms 2
                        Next Countsw
                        Incr _weekday
                        If _weekday = 8 Then
                        _weekday = 1
                        End If

                        Call Preset_date
                        End If
                        Swup_exit4:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit4
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _weekday
                        If _weekday = 255 Then
                        _weekday = 7
                        End If

                        Call Preset_date
                        End If
                        Swdown_exit4:
                        Swdown = 1
                        '-------------------------------------------------------------------------------
                        Case 5
                        'Preset_Timer: _day
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit5
                        End If
                        Waitms 2
                        Next Countsw
                        Incr _day
                        If _day = 32 Then
                        _day = 1
                        End If

                        Call Preset_date
                        End If
                        Swup_exit5:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit5
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _day
                        If _day = 255 Then
                        _day = 31
                        End If

                        Call Preset_date
                        End If
                        Swdown_exit5:
                        Swdown = 1

                        '-------------------------------------------------------------------------------
                        Case 6
                        'Preset_Timer: _month
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit6
                        End If
                        Waitms 2
                        Next Countsw
                        Incr _month
                        If _month = 13 Then
                        _month = 1
                        End If

                        Call Preset_date
                        End If
                        Swup_exit6:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit6
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _month
                        If _month = 255 Then
                        _month = 12
                        End If

                        Call Preset_date
                        End If
                        Swdown_exit6:
                        Swdown = 1
                        '-------------------------------------------------------------------------------
                        Case 7
                        'Preset_Timer: _year
                        '-------------------------------------------------------------------------------
                        If Swup = 0 Then
                        For Countsw = 1 To 250
                        If Swup = 1 Then
                        Goto Swup_exit7
                        End If
                        Waitms 2
                        Next Countsw
                        Incr _year
                        If _year = 10 Then
                        _year = 0
                        End If

                        Call Preset_date
                        End If
                        Swup_exit7:
                        Swup = 1
                        '-------------------------------------------------------------------------------
                        If Swdown = 0 Then
                        For Countsw = 1 To 250
                        If Swdown = 1 Then
                        Goto Swdown_exit7
                        End If
                        Waitms 2
                        Next Countsw

                        Decr _year
                        If _year = 255 Then
                        _year = 09
                        End If

                        Call Preset_date
                        End If
                        Swdown_exit7:
                        Swdown = 1
                        '------------------------------------------------------------------------------
                        Case Else
                        End Select
                        Mod_quit = 0
                        End Sub
                        '================================================= ==============================
                        Sub Preset_time
                        Mod_quit = 1
                        _sec = Makebcd(_sec) :
                        _min = Makebcd(_min) :
                        _hour = Makebcd(_hour)
                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 0
                        I2cwbyte _sec
                        I2cwbyte _min
                        I2cwbyte _hour
                        I2cstop
                        End Sub
                        '================================================= ==============================
                        Sub Preset_date
                        Mod_quit = 1
                        _weekday = Makebcd(_weekday)
                        _day = Makebcd(_day) :
                        _month = Makebcd(_month) :
                        _year = Makebcd(_year)

                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 3
                        I2cwbyte _weekday
                        I2cwbyte _day
                        I2cwbyte _month
                        I2cwbyte _year
                        I2cstop
                        End Sub
                        '================================================= ==============================

                        Comment


                        • Toi lam con ds1307 nay roi, chay oke, nhung ngat noi la ko dau pin ngoai vao dc, ban nao biet cach huong dan cho minh voi.Mat dien thi ds1307 tu reset het lun, ko cai dat chi het.

                          Comment


                          • Nguyên văn bởi tranduythai Xem bài viết
                            Toi lam con ds1307 nay roi, chay oke, nhung ngat noi la ko dau pin ngoai vao dc, ban nao biet cach huong dan cho minh voi.Mat dien thi ds1307 tu reset het lun, ko cai dat chi het.
                            nối Vbat chân 3, GND chân 4 chạy ok pin lithium 3v

                            Comment


                            • Nhung pin 3v tron no co 1 chan chu may ban.minh chua biet cách ket noi noi.Minh dung pin cmos ah.

                              Comment


                              • to tranduythai: có viên pin nào mà có một chân đâu bạn? bạn đọc lại câu này.
                                về ds1307 thì có vài vấn đề cần quan tâm:
                                khi mắc thạch anh 32k thì cần hàn vỏ của nó vào chân mass và cần phủ mass bọc 2 chân xtal, mass này càng gần chân mass của ds thì càng tốt, các đường mạch nối chân xtal cũng cần được chạy càng ngắn càng tốt.
                                cần kết nối nguồn pin cho ds, nếu không có nguồn này hoặc nguồn pin này không đủ thì cũng sẽ dẫn đến ds hoạt động bị lỗi (kể cả khi có nguồn 5V vào chân Vcc).
                                tốc độ I2C (hay TWI) của ds tối đa chỉ là 100K, nếu cao hơn thì có con chạy được có con ko, còn thấp hơn thì mình chưa thử.
                                và 2 chân SDA, SCL cũng cần chạy ngắn gọn và phủ mass bọc quanh để hạn chế nhiễu.
                                về phần mềm quét led 7seg:
                                nên dùng ngắt timer để quét để thời gian sáng của các led đều nhau, không bị chớp khi bạn mở rộng ứng dụng này, (cpu sẽ có thời gian xử lí những vấn đề khác mà bạn không phải quan tâm nhiều đến việc tính toán thời gian delay quét led.)
                                dùng ngắt timer khác với thời gian khoảng 500ms để đọc dalas vì đọc nhiều thì cũng chẳng có ích lợi gì. mà tốn thời gian của CPU.(nếu cần chính xác hơn thì giảm thời gian ngắt của timer)

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X