اطلاعیه

Collapse
No announcement yet.

ساعت با 7 سگمنت وds 1307

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ساعت با 7 سگمنت وds 1307

    با سلام خدمت اسلاتید
    من یک ساعت با سون سگمنت درست کردم پالس 1 ثانیه رو هم از کریستال 32678 میگیره
    با مگا 32 و زبان بیسیک حالا می خوام یک ds 1307 استفاده کنم تو بسکام هم گشتم چیزی سر در نیاوردم
    در ضمن از آی سی 74247 برای درایو 7 سگمنتها استفاده می کنم
    لطفا اساتید یک راهنمایی کنند

    #2
    پاسخ : ساعت با 7 سگمنت وds 1307

    کسی چواب ما رو نمی ده :؟؟؟

    دیدگاه


      #3
      پاسخ : ساعت با 7 سگمنت وds 1307

      مشکل شما کار با ds1307 هستش؟؟؟؟؟؟؟؟
      کار با هاش خیلی سادست
      فقط این چند خط رو به برنامت اضافه کن




      $lib "mcsbyte.lbx"
      $lib "ds1307clock.lib"
      Enable Interrupts

      Config Sda = Portd.6
      Config Scl = Portd.5
      Const Ds1307w = &HD0
      Const Ds1307r = &HD1
      Config Clock = User

      Dim Weekday As Byte


      Do
      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)
      _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
      Weekday = Makebcd(weekday)

      Return

      Setdate:
      _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 4
      I2cwbyte _day
      I2cwbyte _month
      I2cwbyte _year
      I2cwbyte Weekday
      I2cstop
      Return

      Settime:
      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : Weekday = Makebcd(weekday)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cwbyte _sec
      I2cwbyte _min
      I2cwbyte _hour
      I2cwbyte Weekday
      I2cstop
      Return

      بعد هر وقت خواستی ساعت رو بخونی به زیر برنامه Getdatetime برو
      مشکلی بود در خدمتیم

      پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

      دیدگاه


        #4
        پاسخ : ساعت با 7 سگمنت وds 1307

        خدمت دوست عزیز عرض کنم
        برنامه به شکل زیر است 7سگمنت ها رو به شکل زیر رفرش میکنم
        بعداز هر بار سرریز شدن تایمر یکی به متغییر اضافه می شه تا انتها
        حالا با ds1307چه طوری این کار رو انجام بدم



        $regfile = "m32def.dat"
        $crystal = 1000000
        Config Portc.0 = Input
        Config Portc.1 = Input
        Config Portc.2 = Input
        Config Portc.3 = Input
        Config Portc.4 = Input
        Config Portc.5 = Output

        Config Portd = Output
        Config Portb = Output
        Config Debounce = 32
        Enable Interrupts
        Config Clock = Soft , Gosub = Sectic
        Dim S As Byte
        Dim M As Byte
        Dim H As Byte
        Dim T As Byte
        Dim D As Byte
        Dim G As Byte
        Dim J As Byte
        Set Portc.5

        Do


        Portb = Lookup(0 , Dd)

        Portd = S

        Waitms 1

        If S > 9 Then
        S = 0
        Incr M
        End If
        Portb = Lookup(1 , Dd)


        Portd = M
        Waitms 1

        If M > 5 Then
        M = 0
        Incr H
        End If
        Portb = Lookup(2 , Dd)

        Portd = H
        Waitms 1
        If H > 9 Then
        H = 0
        Incr T
        End If

        Portb = Lookup(3 , Dd)


        Portd = T
        Waitms 1
        If T > 5 Then
        T = 0
        Incr D
        End If
        Portb = Lookup(4 , Dd)

        Portd = D
        Waitms 1

        If D > 9 Then
        D = 0
        Incr G
        End If
        Portb = Lookup(5 , Dd)

        Portd = G
        Waitms 1
        If G > 2 Then
        If D > 4 Then
        G = 0
        D = 0
        End If
        End If


        Loop
        Sectic:
        Incr S
        Toggle Portc.5
        Return
        Dd:
        Data &B00000001
        Data &B00000010
        Data &B00000100
        Data &B00001000
        Data &B00010000
        Data &B00100000

        دیدگاه


          #5
          پاسخ : ساعت با 7 سگمنت وds 1307

          سلام
          اول بگو با چه سون سگمنت هایی یعنی با چه ابعادی می خوای کار کنی؟ اگر با سگمنت های کوچک داری کار می کنی به صورت رفرشری جواب میده ولی اگه با بزرگش کار میکنه رفرشی جواب نمیده، باید از لچ استفاده کنی، در حت=الت رفرشی الگوریتمش تقریبا همونیه که خودت رفتی یه تایمر فعال میکنی و رو سگمنت ها نشون میدی.
          " علت هر شكستي عمل كردن بدون فكر است" الكس مكنزي


          [move](---> موسیقی ایرانی <---) [/move]

          دیدگاه


            #6
            پاسخ : ساعت با 7 سگمنت وds 1307

            کد:
            طبق خود lib که bascom واسه ds1307 نوشته تو متغیر [code]_hour
            ساعت رو میریزه و داخل
            کد:
            _min
            دقیقه و داخا [code_sec[/code] هم ثانیه
            حالا دیگه شما به این d و s و... که تو برنامه نوشتی نیازی نداری و فقط کافیه این سه تا متغیر رو که از جنس بایت هم هست رو بریزی رو 7 سگمنت
            علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

            دیدگاه


              #7
              پاسخ : ساعت با 7 سگمنت وds 1307

              نوشته اصلی توسط حامد مهربان
              سلام
              اول بگو با چه سون سگمنت هایی یعنی با چه ابعادی می خوای کار کنی؟ اگر با سگمنت های کوچک داری کار می کنی به صورت رفرشری جواب میده ولی اگه با بزرگش کار میکنه رفرشی جواب نمیده، باید از لچ استفاده کنی، در حت=الت رفرشی الگوریتمش تقریبا همونیه که خودت رفتی یه تایمر فعال میکنی و رو سگمنت ها نشون میدی.
              چرا به روش رفرش جواب نمیده؟
              منظور شما چه اندازه ای هست؟ من که با سون سگمنت های 8 ولتی که اندازه اش هم حدود 10*6 سانتی بود به خوبی جواب گرفتم!!


              برای اضافه کردن برنامه ds1307به برنامه خودت تایمر رو از برنامت حذف کن و زیر برنامه سکتیک رو هم همینطور بعد برنامه خودتوتو داخل do loop برنامه ds1307 بذار
              البته قبل از این باید ds1307 رو تنظیم کنی بعد از اون هربار که خواستی ساعت رو بخونی به زیر برنامه getdate برو
              متغیرهای _sec و _min و _hour به ترتیب ثانیه دقیقه و ساعت رو بهت میدن حالا میتونی روی سون سگمنت نشون بدی
              برای تنظیم هم به هرکدوم از متغییرهای بالا یه عدد بده بعد به زیر برنامه settime برو
              پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

              دیدگاه


                #8
                پاسخ : ساعت با 7 سگمنت وds 1307

                7 سگمنت ها بزرگ است ولی مشکلی با اونا ندارم
                مشکل 6 عدد 7سگمنت است برای ثانیه یا دقیقه و ساعت هر کدام 2تا
                نتونستم اونا رو رفرش کنم
                لیبل گت تایم هم می زارم میکرو هنگ میکنه
                توشبیه سازی بسکام درسته ولی تو پرنئوس نه

                دیدگاه


                  #9
                  پاسخ : ساعت با 7 سگمنت وds 1307

                  اون برنامه که گفتم اینه اگه لطف کنین اشکالاشو بگین ممنون میشم

                  $regfile = "M32def.dat"
                  $crystal = 8000000
                  $lib "ds1307clock.lib"
                  $lib "mcsbyte.lbx"
                  Config Scl = Portc.0
                  Config Sda = Portc.1

                  Config Portd = Output
                  Config Portb = Output
                  Const Ds1307w = &HD0
                  Const Ds1307r = &HD1
                  Config Pina.0 = Input
                  Config Pina.1 = Input
                  Config Pina.2 = Input

                  Dim _sec As Byte
                  Dim _min As Byte
                  Dim _hour As Byte
                  Dim Strg1 As Word
                  Dim Strg2 As Word
                  Dim Strg3 As Word
                  Dim Saniye1 As Word
                  Dim Saniye2 As Word
                  Dim Daghighe1 As Word
                  Dim Daghighe2 As Word
                  Dim Saat1 As Word
                  Dim Saat2 As Word
                  Dim Minute As Word
                  Dim Hour As Word
                  Dim K As Word


                  Main:
                  Do
                  Gosub Getdatetime
                  Strg1 = Makedec(_sec)
                  Strg2 = Makedec(_min)
                  Strg3 = Makedec(_hour)
                  Saniye1 = Strg1 / 10
                  Saniye2 = Strg1 Mod 10
                  Daghighe1 = Strg2 / 10
                  Daghighe2 = Strg2 Mod 10
                  Saat1 = Strg3 / 10
                  Saat2 = Strg3 Mod 10
                  Portb = &B00000001
                  Portd = Saniye2
                  Waitms 5
                  Portb = &B00000010
                  Portd = Saniye1
                  Waitms 5
                  Portb = &B00000100
                  Portd = Daghighe2
                  Waitms 5
                  Portb = &B00001000
                  Portd = Daghighe1
                  Waitms 5
                  Portb = &B00010000
                  Portd = Saat2
                  Waitms 5
                  Portb = &B00100000
                  Portd = Saat1
                  Waitms 5
                  Debounce Pina.0 , 0 , Settime1
                  Loop




                  Settime1:
                  Gosub Getdatetime
                  Time1:
                  Do
                  Strg1 = Makedec(_sec)
                  Strg2 = Makedec(_min)
                  Strg3 = Makedec(_hour)
                  Saniye1 = Strg1 / 10
                  Saniye2 = Strg1 Mod 10
                  Daghighe1 = Strg2 / 10
                  Daghighe2 = Strg2 Mod 10
                  Saat1 = Strg3 / 10
                  Saat2 = Strg3 Mod 10
                  Portb = &B00000001
                  Portd = Saniye2
                  Waitms 5
                  Portb = &B00000010
                  Portd = Saniye1
                  Waitms 5
                  Portb = &B00000100
                  Portd = Daghighe2
                  Waitms 5
                  Portb = &B00001000
                  Portd = Daghighe1
                  Waitms 5
                  Portb = &B00010000
                  Portd = Saat2
                  Waitms 5
                  Portb = &B00100000
                  Portd = Saat1
                  Waitms 5
                  Debounce Pina.1 , 0 , Minute
                  Debounce Pina.2 , 0 , Hour
                  Debounce Pina.0 , 0 , Settime
                  Loop
                  End


                  Minute:
                  Incr _min
                  If _min > 59 Then
                  _min = 0
                  End If
                  jmp time1


                  Hour:
                  Incr _hour
                  If _hour > 23 Then
                  _hour = 0
                  End If
                  jmp time1







                  Getdatetime:
                  I2cstart
                  I2cwbyte Ds1307w
                  I2cwbyte 0
                  I2cstart
                  I2cwbyte Ds1307r
                  I2crbyte _sec , Ack
                  I2crbyte _min , Ack
                  I2crbyte _hour , Nack
                  I2cstop
                  Return

                  Settime:
                  _sec = Makebcd(_sec)
                  _min = Makebcd(_min)
                  _hour = Makebcd(_hour)

                  I2cstart
                  I2cwbyte Ds1307w
                  I2cwbyte 0
                  I2cwbyte _sec
                  I2cwbyte _min
                  I2cwbyte _hour
                  I2cstop
                  Goto Main
                  Return

                  دیدگاه


                    #10
                    پاسخ : ساعت با 7 سگمنت وds 1307

                    سلام
                    من یه برنامه ساده ساعت نوشتم با 7 سگمنت برنامه درسته .رو lcd اونو امتحان کردم درست بود .منظورم اعداد بدست اومده که باید رو 7سگمنتها رخته بشه ولی نمیدونم چرا رو 7سگمنت جواب نمیده؟از این روش برای دماسنج استفاده کردم بخوبی جواب داد ولی اینجا نه :cry: در حدی که فقط دقیقه و ساعت رو نشون بده.
                    دمتون گرم

                    $regfile = "m8def.dat"
                    $crystal = 8000000
                    Config Debounce = 1
                    Config Clock = Soft
                    Config Date = Ymd , Separator = /
                    Config Portd = Output
                    Config Portc = Output
                    Dim A As Long , B As Byte , C As Byte , D As Byte , E As Long , F As Byte

                    Enable Interrupts
                    Time$ = "1150"

                    Do

                    B = _hour / 10
                    C = B * 10
                    D = _hour - C

                    Reset Portc.0
                    Portd = Lookup(b , Dta)
                    Waitms 1
                    Set Portc.0
                    Reset Portc.1
                    Portd = Lookup(d , Dta)
                    Waitms 1
                    Set Portc.1

                    B = _min / 10
                    C = B * 10
                    D = _min - C

                    Reset Portc.2
                    Portd = Lookup(b , Dta)
                    Waitms 1
                    Set Portc.2
                    Reset Portc.3
                    Portd = Lookup(d , Dta)
                    Waitms 1
                    Set Portc.3

                    Debounce Pinb.0 , 0 , Incrt , Sub
                    Debounce Pinb.1 , 0 , Incrh , Sub

                    Loop
                    End

                    Dta:
                    Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111

                    Incrt:
                    Incr _min
                    If _min = 60 Then _min = 0

                    Incrh:
                    Incr _hour
                    If _hour = 13 Then _hour = 0
                    Return
                    سه توصیه دارم:
                    1.کار 2.کار 3.کار
                    ادیسون

                    دیدگاه


                      #11
                      پاسخ : ساعت با 7 سگمنت وds 1307

                      برادر من چرا شما داری از خودت اختراع میکنی؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                      همون کاری که من به شما گفتم بکن
                      نیازی نیست متغیرهای_sec, ..... تعریف کنی
                      بعد هم گفتم اول باید ساعت رو تنظیم کنی
                      از همه مهمتر نباید سرعت خوندن از روی ds1307 زیاد باشه حد اکثر هر 100میلی ثانیه یک بار
                      شما چرا زیر برنامه ها رو تغییر دادی ؟ :eek: :eek: :eek:
                      این مشکلها رو برطرف کن اگه بازم مشکلی بود درخدمتیم
                      پروردگارا: به من زيستني عطا کن که در لحظه مرگ بر بي ثمري لحظه اي که براي زيستن گذشته است حسرت نخورم، و مردني عطا کن که بر بيهودگيش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست ميداري

                      دیدگاه

                      لطفا صبر کنید...
                      X