اطلاعیه

Collapse
No announcement yet.

یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

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

    #91
    پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

    سلام.

    بچه میشه ببینید مشکل این برنامه چیه؟ من که دیگه عقلم یاری نمیکنه. oo: :angry:

    هم فایل بیسیک هستش و هم فایل پروتئوس

    http://data-sheets.persiangig.com/pr...2%29ds1307.rar
    www.icesi.ir

    دیدگاه


      #92
      پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

      خب نمی خوای بگی مشکلش چیه؟
      من پروتئوس نصب ندارم

      دیدگاه


        #93
        پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

        سلام

        آقا میلاد به نظرم این پروتئوس با مالتی پلکس کردن سون سگمنت مشکل داره . بهتره رو برد برد ببندی . قدیما من یه پروژه کار کرده بودم که تو پروتئوس جواب نمیداد ولی عملی جواب میداد .

        ضمنا برای اینکه زمان های مالتی پلکست درست باشه از تایمر 0 استفاده کن و یه زمانی در حدود 20 میلی ثانیه درست کن و تایمر رو طوری تنظیک کن که هر 20 میلی ثانیه یه بار interrupt بده .

        یه نکته دیگه اینکه سعی کن تمام کار ها رو تو do...loop انجام ندی . موقعی که لازم شدن اونارو refresh کنی .

        مثلا ds1307 پایه هفت ش رو میتونی به عنوان یه وقفه خارجی استفاده کنی (که من انجام دادم و جواب داد ) که هر 1 ثانیه به 1 ثانیه lcd رو رفرش کنه . با این کار دیگه لازم نیست که gosub رو تو حلقه بزاری . ( ضمنا این باعث میشه که lcd لرزش داشته باشه )
        و باز هم ضمنا دستور bits برای درایو به روش مالتی پلکس خیلی مفیده ... تو برنامه دیدم که Portd رو خروجی تعریف کردی در حالی که ِds1307 رو هم به portd وصل کرده بودی oo:
        فعلا همین قدر میدونستم . موفق باشی

        دیدگاه


          #94
          پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

          سلام.

          فرزاد جان ممنون از راهنماییت. مدار رو روی برد بورد هم بستم ننمیدونم چشه فقط عدد 15 رو نشون میده.

          حامد جان دو تا 7سگمنت گذاشتم و میخوام فقط ثانیه رو نشون میده. ولی در واقع نشون نمیده فقط عدد 15 رو نشون میده و هیچ تغییری هم نمیکنه.
          اول گفتم شاید سخت افزارمه که مشکل داره یه برنامه شمارنده 0 تا 99 نوشتم البته با تایمر درست کار کرد.(7 سگمنت ها رو به صورت مالتر پلکس بستم.)

          پس تا اینجا سخت افزارم درسته ولی وقتی ds1307 رو وصل میکنم فقط عدد 15 رو نشون میده.


          برنامه رو نگاه کنی متوجه میشی.


          www.icesi.ir

          دیدگاه


            #95
            پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

            $regfile = "m8def.dat"
            $crystal = 8000000

            Dim A1 As Byte
            Dim A2 As Byte
            Config Timer0 = Timer , Prescale = 1024
            Enable Interrupts
            Enable Timer0
            On Timer0 Multiplex
            Timer0 = 0
            Start Timer0
            Const Ds1307w = &HD0
            Const Ds1307r = &HD1

            Config Sda = Portc.1
            Config Scl = Portc.0

            Config Portb = Output
            Config Portd = Output

            Dim _sec As Byte , _min As Byte , _hour As Byte
            _sec = 10
            _min = 54
            _hour = 10

            _sec = Makebcd(_sec)
            _min = Makebcd(_min)
            _hour = Makebcd(_hour)
            I2cstart
            I2cwbyte Ds1307w
            I2cwbyte 0
            I2cwbyte _sec
            I2cwbyte _min
            I2cwbyte _hour





            Do



            Gosub Milad

            Loop
            End

            Milad:
            I2cstart
            I2cwbyte Ds1307w
            I2cwbyte 0

            I2cstart
            I2cwbyte Ds1307r
            I2crbyte _sec , Ack
            I2crbyte _min , Ack
            I2crbyte _hour , Nack
            I2cstop
            Return


            Multiplex:
            Timer0 = 100
            _sec = Makedec(_sec)

            A2 = _sec / 10

            A1 = _sec Mod 10


            Portd = Bits(0)
            Portb = Lookup(a2 , 7segment)
            Waitms 5

            Portd = Bits(1)
            Portb = Lookup(a1 , 7segment)
            Waitms 5
            Return



            7segment:
            Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110 , &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111

            اینو امتحان کن !

            دیدگاه


              #96
              پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

              فقط توجه کن که ds1307 رو به پورت c وصل کردم !


              راستی مثل اینکه در خط data شما MSB , LSB رو رعایت نکردین . این طور نیست !! :surprised:

              دیدگاه


                #97
                پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

                سلام.

                فرزاد جان اون برنامه شما هم تست کردم ولی بازم ... کار نکرد..

                اصلا دوباره مثل اون اول شده.(برای اون ساعت با lcd وقتی ولتاژ SDA , SCL رو میگرفتم متغییر بود یعنی از صفر تا 5 بالا و پایین میشد. ولی تو این ولتاژ این دوتا پایه 5 ولته و اصلا انگار دیتا نمیاد.)

                این یکی برنامه هم تست کردم ولی بازم نشد.

                $regfile = "m8def.dat"
                $crystal = 8000000
                $lib "ds1307clock.lib"


                Dim A1 As Byte
                Dim A2 As Byte
                Config Timer0 = Timer , Prescale = 1024
                Enable Interrupts
                Enable Timer0
                On Timer0 Milad
                Timer0 = 0
                Start Timer0

                Const Ds1307w = &HD0
                Const Ds1307r = &HD1

                Config Sda = Portd.3
                Config Scl = Portd.4

                Config Portb = Output
                Config Portd.0 = Output
                Config Portd.1 = Output

                Dim Sec1 As Byte


                Sec1 = 10


                Sec1 = Makebcd(sec1)

                I2cstart
                I2cwbyte Ds1307w
                I2cwbyte 0
                I2cwbyte Sec1



                Do



                Sec1 = Makedec(sec1)

                A2 = Sec1 / 10

                A1 = Sec1 Mod 10


                Set Portd.0
                Portb = Lookup(a2 , 7segment)
                Waitms 10
                Reset Portd.0


                Set Portd.1
                Portb = Lookup(a1 , 7segment)
                Waitms 10
                Reset Portd.1


                Loop

                End

                Milad:
                I2cstart
                I2cwbyte Ds1307w
                I2cwbyte 0

                I2cstart
                I2cwbyte Ds1307r
                I2crbyte Sec1 , Nack
                I2cstop
                Timer0 = 0
                Return


                7segment:
                Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110 , &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
                www.icesi.ir

                دیدگاه


                  #98
                  پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                  نوشته اصلی توسط فرزاد ثانی
                  فقط توجه کن که ds1307 رو به پورت c وصل کردم !


                  راستی مثل اینکه در خط data شما MSB , LSB رو رعایت نکردین . این طور نیست !! :surprised:
                  فرزاد جان من از این لحاظ مطمئنم چون اول باهاش یه شمارنده 0 تا 99 بستم دیدیم جواب داد بعد اومدم سر ساعت.
                  www.icesi.ir

                  دیدگاه


                    #99
                    پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                    آقا من اینوبرنامه رو بستم به نظر خودم مشکلی نداره().و فقط روی 7سگمنت عدد 5 رو نشون میده.یعنی مقدار عددی متغییر A1 برابر 5 هستش. و سون سگمتی که باید دهگان رو نشون بده خاموشه که این تعجب داره اگه 0 باشه باید روی 7سگمنت نشون بده چرا خاموشه؟

                    اگه میشه بیسیک کاراش یه نگاهی بکنند. و مارو از علمشون بی نصیب نذارند.

                    $regfile = "m8def.dat"
                    $crystal = 8000000

                    Dim A1 As Byte
                    Dim A2 As Byte

                    Const Ds1307w = &HD0
                    Const Ds1307r = &HD1

                    Config Sda = Portd.7
                    Config Scl = Portd.6

                    Config Portb = Output
                    Config Portd = Output

                    Dim _sec As Byte , _min As Byte , _hour As Byte
                    _sec = 10
                    _min = 54
                    _hour = 10

                    _sec = Makebcd(_sec)
                    _min = Makebcd(_min)
                    _hour = Makebcd(_hour)
                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 0
                    I2cwbyte _sec
                    I2cwbyte _min
                    I2cwbyte _hour





                    Do
                    _sec = Makedec(_sec)

                    A2 = _sec / 10

                    A1 = _sec Mod 10


                    Set Portd.0
                    Portb = Lookup(a2 , 7segment)
                    Waitms 10
                    Reset Portd.0


                    Set Portd.1
                    Portb = Lookup(a1 , 7segment)
                    Waitms 10
                    Reset Portd.1

                    Gosub Milad

                    Loop
                    End

                    Milad:
                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 0

                    I2cstart
                    I2cwbyte Ds1307r
                    I2crbyte _sec , Ack
                    I2crbyte _min , Ack
                    I2crbyte _hour , Nack
                    I2cstop
                    Return

                    7segment:
                    Data &B00111111
                    Data &B00000110
                    Data &B01011011
                    Data &B01001111
                    Data &B01100110
                    Data &B01101101
                    Data &B01111101
                    Data &B00000111
                    Data &B01111111
                    Data &B01101111
                    www.icesi.ir

                    دیدگاه


                      پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

                      من زیاد مطمئن نیستم ولی تا اونجایی که یادمه فکر می کنم نباید وقتی SDA و SCL رو برای I2C استفاده می کنی اونها رو به عنوان خروجی هم تعریف کنی.
                      می دونی ؛ وقتی میگی سخت افزارت با یه برنامه کانتر کار می کنه پس هر چی هست تو این برنامست دیگه. برنامه که ساختارش درسته. فقط می مونه مقادیری که از DS1307 می خونه. اگه این مقادیر درست نباشه اطلاعاتی که نمایش داده میشه همین جوری میشه دیگه.

                      دیدگاه


                        پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)(حل شد)

                        سلام میلاد جان

                        آقا این درایو سون سگمت شما open Emitter هستش pull up میخاد . من گذاشتم عدد 10 رو نشون داد . ولی نمیدونم چرا با لرزش نشون میده .

                        قضیه کمی بو میده ... شما مدار رو عملی بستی ؟؟ اگه نبستی خودم ببندم . در حالت کلی من به پروتئوس اطمینان ندارم :NO:


                        من هم با آقا حامد وموافقم

                        در برنامه من تغییرات زیر رو دادم

                        ddrd.0=1
                        ddrd.1=1

                        ضمنا
                        config pord=output رو هم حذف کردم

                        دیدگاه


                          پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                          [quote author=حامد جعفری]
                          من زیاد مطمئن نیستم ولی تا اونجایی که یادمه فکر می کنم نباید وقتی SDA و SCL رو برای I2C استفاده می کنی اونها رو به عنوان خروجی هم تعریف کنی.
                          [/quote]
                          اینو درست کردم ولی بازم جواب نداد.

                          [quote author=فرزاد ثانی]
                          سلام میلاد جان

                          آقا این درایو سون سگمت شما open Emitter هستش pull up میخاد . من گذاشتم عدد 10 رو نشون داد . ولی نمیدونم چرا با لرزش نشون میده .

                          [/quote]
                          آقا فرزاد من مدار رو عملی بستم و pull up هم نذاشتم و یه برنامه کانتر نوشتم کار کرد(از 0 تا 99 میشمرد بدون هیچ مشکلی کار کرد.)

                          [quote author=فرزاد ثانی]
                          قضیه کمی بو میده ... شما مدار رو عملی بستی ؟؟ اگه نبستی خودم ببندم . در حالت کلی من به پروتئوس اطمینان ندارم :NO:
                          [/quote]

                          فرزاد جان من اصلا با پروتئوس تست نمیکنم من مدار رو عملی بستم و تغییرات رو میدم و ic رو پروگرم میکنم و عملی تست میکنم.

                          این تغییراتی که شما گفتید رو اعمال کردم ولی باز هم جواب نداد. یعنی فقط عدد 5 رو نشون میده.

                          بچه ها من فکر میکنم به خاط اینکه روی برد بورد هستش جواب نمیده نویز میگیره.
                          www.icesi.ir

                          دیدگاه


                            پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                            نه بابا به نویز چه ربطی داره oo: oo:

                            [move]به هر حال موفق باشی [/move]

                            دیدگاه


                              پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                              من میگم از همین DS1307 هست.
                              این جور که تو میگی پس اگه یه کریستال ساعت( 32768 هرتز) بذاری و از RTC خود میکرو استفاده کنی باید جواب بگیری. اگه اونو جواب گرفتی معلوم میشه که اطلاعات دریافتی از DS درست نیست. چون واقعا برنامه تفکیک یکان و دهگان چیز پیچیده ای نداره.

                              دیدگاه


                                پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                                سلام.

                                من همین چند روز پیش با lcd جواب گرفتم نمیدونم چرا با 7سگمنت جواب نمیده.

                                آقای نجفی هم همین راه حل شما رو بهم گفت ولی آقا چیا گفت ds1307 دقیق تره.

                                موندم. :angry:

                                اضافه شده در تاریخ :
                                :angry: :angry: :angry: :angry: :angry:

                                دوباره با همون کریستال و ds1307 و یه lcd مدار رو بستم جواب داد.

                                چرا با 7سگمنت کار نمیکنه؟
                                :angry:
                                www.icesi.ir

                                دیدگاه

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