اطلاعیه

Collapse
No announcement yet.

مشکل با ای سی ds1307 و میکرو

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

    مشکل با ای سی ds1307 و میکرو

    سلام
    دوستان خسته نباشین.یه مداری بامیکرو بستم که تو اون با ای سی ds1307 و با استفاده از پروتکل سریال و i2c ساعتو رو یه lcdنشون میده.اما تو عمل فقط یه عدد ثابت رو صفحه میاد و تغییراتی نداریم.همین مدار و برنامه را تو برنامه پروتیوس اجرا کردم.درست کار میکنه ولی تو عمل نه.میشه کمکم کنید
    قسمتی از برنامه هم براتون میذارم
    Dim s as byte
    dim _min as byte
    dim_hour as byte
    روز و هفته و سوال هم متغییراشو تعرف کردم و در ادامه
    Do
    Gosub er
    locate 1,1
    lcd"time:";_huor;":";"_mi n;":";s
    locate 2,1
    رو lcdتاریخو نشون میده
    Loop
    end
    er:
    I2cstart
    i2cwbyte &hd0
    i2cwbyte 0
    i2cstart
    i2crbyte s,ack
    i2crbyte _min,ack
    i2crbyte _hour,ack
    i2c _m.month,ack
    i2crbyte _date,ack
    i2crbyte _year,nack
    i2cstop
    بعد توسط دستور makedec از متغییرات فوق اونا را به دسمال تبدیل کردم و در اخر
    Return

    #2
    پاسخ : مشکل با ای سی ds1307 و میکرو

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

    دیدگاه


      #3
      پاسخ : مشکل با ای سی ds1307 و میکرو

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

      به زبان سی
      اومدم اول برنامه ثانیه رو صفر کردم که هر بار تغذیه وصل میشد ثانیه صفر میشد و شروع میکرد به شمارش.

      یه بار امتحان کنید ثانیه رو صفر کنید ببینید جواب میده یا نه
      "زمان خط است نه دایره" چه ایده بدی بوده گرد ساختن ساعت. احساس میکنی همیشه فرصت تکرار است.
      ساعت دروغ میگوید. دروغ. زمان بر گرد یک دایره نمی چرخد! زمان بر روی خطی مستقیم میدود. و هیچگاه، هیچگاه، هیچگاه باز نمیگردد.
      ساعت خوب، ساعت شنی است! هر لحظه به تو یادآوری میکند که دانه ای که افتاد دیگر باز نمیگردد.
      پس بهتره یکم به ثانیه هایی که داریم فکر کنیم تا به راحتی از دستشون ندیم....

      دیدگاه


        #4
        پاسخ : مشکل با ای سی ds1307 و میکرو

        نوشته اصلی توسط میثم قاسمی نیا
        با این دستوری که شما نوشتی مسلمه کار نمیکنه,کل برنامه وو بزارید ببینیم چیکار کردید
        $regfile = "M8def.dat"
        $crystal = 1000000
        Config Lcd = 16 * 2
        Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2
        Dim _sec As Byte
        Dim _min As Byte
        Dim _hour As Byte
        Dim _d.day As Word
        Dim _m.month As Byte
        Dim _year As Byte
        Config Sda = Portd.7
        Config Scl = Portd.6

        Do
        Gosub Re
        Locate 1 , 1
        Lcd "time=" ; _hour ; ":" ; _min ; ":"_sec
        Locate 2 , 1
        Lcd "DATE=" ; _year ; "/" ; _m.month ; "/" ; _d.day
        Loop
        End


        Re:
        I2cstart
        I2cwbyte &HD0
        I2cwbyte 0
        I2cstart
        i2crbyte _sec,ack
        I2crbyte _min , Ack
        I2crbyte _hour , Ack
        I2crbyte _d.day , Ack
        I2crbyte _m.month , Ack
        I2crbyte _year , Nack
        I2cstop

        _sec = Makedec(_sec)
        _min = Makedec(_min)
        _hour = Makedec(_hour)
        _d.day = Makedec(_d.day)
        _m.month = Makedec(_m.month)
        _year = Makedec(_year)
        _year = Year + 2000
        Return

        دیدگاه


          #5
          پاسخ : مشکل با ای سی ds1307 و میکرو

          سلام دوست عزیز .. متاسفانه بیسیک بلد نیستم .... من این مشکل رو داشتم ... این مشکل سخت افزاریه و نشان از درست متصل نبودن کریستاله ... البته یه چیز دیگه هم می تونه باشه .. اگه باطری بکاپ نزاشتی پایش رو حتما باید یا صفر یا یک کنی ...درست یادم نیست .. :agree:

          دیدگاه


            #6
            پاسخ : مشکل با ای سی ds1307 و میکرو

            سلام
            در ریجستر ثانیه بیت 7 ریجستری وجود داره به اسمه CH
            اگه تغذیه برای DS قطع شده باشه این ریجستر 1 میمونه
            حالا نکته اینجاس برای اینکه DS شروع به کار کنه باید این بیت صفر بشه
            حالا چطوری اینکارو بکنیم؟
            من بیسک بلد نیستم اینطوری براتون بگم که یه شرط میزاریم که اگه مقدار ثانیه بیشتر از 59 بود بیاد تو ریجستر ثانیه صفر بنویسه...
            و پایه باتری هم باید به باتری وصل شه و الی درست عمل نمیکنه
            .The best question deserves a better answer
            =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
            «پناه»می برم «به خدا»
            از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
            محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

            دیدگاه


              #7
              پاسخ : پاسخ : مشکل با ای سی ds1307 و میکرو

              نوشته اصلی توسط •.´™ مَسِِــــح`.•
              سلام
              در ریجستر ثانیه بیت 7 ریجستری وجود داره به اسمه CH
              اگه تغذیه برای DS قطع شده باشه این ریجستر 1 میمونه
              حالا نکته اینجاس برای اینکه DS شروع به کار کنه باید این بیت صفر بشه
              حالا چطوری اینکارو بکنیم؟
              من بیسک بلد نیستم اینطوری براتون بگم که یه شرط میزاریم که اگه مقدار ثانیه بیشتر از 59 بود بیاد تو ریجستر ثانیه صفر بنویسه...
              و پایه باتری هم باید به باتری وصل شه و الی درست عمل نمیکنه
              پایه باتری هم به باتری3 ولتی وصل کردم.ولی جواب نداد

              دیدگاه


                #8
                پاسخ : مشکل با ای سی ds1307 و میکرو

                پایه هارو پول اپ کردین؟
                .The best question deserves a better answer
                =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                «پناه»می برم «به خدا»
                از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                دیدگاه


                  #9
                  پاسخ : مشکل با ای سی ds1307 و میکرو

                  خوب حق هم داشته کار نمیکرده....برنامتون مشکل داره
                  اول اینکه کتابخانه 1307 رو معرفی نکردید برای ارتباط
                  دوم ریجسترهای خواندن ونوشتن در 1307 رو تعیین نکردید در برنامه
                  سوم برای شروع به کار 1307 شما باید برای بار اول یک عدد رو در ریجستر ثانیه قرار بدی
                  برنامه رو میزارم..این برنامه رو خودم نوشتم وکاملاتست شده است وبرحسب نیازتون تغییر بدبید

                  کد:
                  [/$regfile = "m8adef.dat"
                  $crystal = 4000000
                  $hwstack = 40
                  $swstack = 16
                  $framesize = 32
                  $lib "ds1307clock.lib"
                  Const Ds1307w = &HD0---------------->رجیستر نوشتن
                  Const Ds1307r = &HD1-------------------->رجیسترخواندن
                  Config Lcdbus = 4
                  Config Lcd = 16 * 2
                  Cursor Off
                  Config Lcdpin = Pin , Db4 = Pinb.3 , Db5 = Pinb.4 , Db6 = Pinb.5 , Db7 = Pinc.0 , Rs = Pinb.1 , E = Pinb.2
                  
                  Deflcdchar 0 , 224 , 226 , 230 , 238 , 255 , 238 , 230 , 226    ' replace [x] with number (0-7)
                  
                  
                  
                  
                  Cls
                  Config Scl = Portc.5
                  Config Sda = Portc.4
                  Config Portb.0 = Output
                   Config Pind.7 = Input
                   Config Pind.5 = Input
                    Config Pind.6 = Input
                    Config Debounce = 20
                  
                  Portb.0 = 1
                  
                  Dim D As Byte
                  Dim C As Byte
                  Dim B As Byte
                  Dim A As Byte
                  Dim Second As Byte
                  Dim Minute As Byte
                  Dim Hour As Byte
                  Dim Saat As Byte
                  Dim Esaat As Eram Byte
                  Dim Dagh As Byte
                  Dim Edagh As Eram Byte
                  Dim Offmin As Byte
                   Dim Offhour As Byte
                   Dim Offtime As Byte
                   If C <> 12 Then ......> تو این چند خط من میخواستم فرکانس 1هرتز رو روی پایه خروجی 1307 داشته باشم وبنابراین یکبار این برنامه اجرا میشود والبته برای راه اندازی 1307 باید یک عدد رو روی ثانیه قرار بدبد تا شروع بکار کنه ومن تو همین عدد صفر رو توی رجیستر ریختم تا شروع بکار کنه که اینم یکبار اجرا میشه برا همیشه
                  I2cstart
                  I2cwbyte Ds1307w
                  I2cwbyte 7-------->رجیستر مربوط به فرکانس یک هرتز
                  I2cwbyte 00010000---->نوشتن کد فعال سازی آن
                  I2cstop
                  Second = 0 مقدار صفر ثانیه
                  I2cstart
                  I2cwbyte Ds1307w آماده سازی 1307 برای نوشتن
                  I2cwbyte 0 انتخاب نوشتن رجیستر صفر مربوط به ثانیه
                  I2cwbyte Second نوشتن مقدار ثانیهدر رجیستر
                  I2cstop
                  C = 12
                  End If
                  
                  do
                  
                  
                  
                  
                  I2cstart
                  I2cwbyte Ds1307w
                  I2cwbyte 0
                  I2cstart
                  I2cwbyte Ds1307r
                  I2crbyte Second , Ack
                  I2crbyte Minute , Ack
                  I2crbyte Hour , Nack
                  I2cstop
                  
                  Second = Makedec(second)
                  Minute = Makedec(minute)
                  Hour = Makedec(hour)
                  
                  
                   Locate 1 , 1
                       Lcd "Time = " ; Hour ; ":" ; Minute ; ":" ; Second ; "   "
                  
                         
                  Loop
                  End

                  دیدگاه


                    #10
                    پاسخ : مشکل با ای سی ds1307 و میکرو

                    [quote author=•.´™ مَسِِــــح`.• link=topic=104468.msg672268#msg672268 date=1421693173]
                    پایه هارو پول اپ کردین؟
                    [/quote
                    بله.پول اپ کردم]

                    دیدگاه


                      #11
                      پاسخ : مشکل با ای سی ds1307 و میکرو

                      نوشته اصلی توسط میثم قاسمی نیا
                      خوب حق هم داشته کار نمیکرده....برنامتون مشکل داره
                      اول اینکه کتابخانه 1307 رو معرفی نکردید برای ارتباط
                      دوم ریجسترهای خواندن ونوشتن در 1307 رو تعیین نکردید در برنامه
                      سوم برای شروع به کار 1307 شما باید برای بار اول یک عدد رو در ریجستر ثانیه قرار بدی
                      برنامه رو میزارم..این برنامه رو خودم نوشتم وکاملاتست شده است وبرحسب نیازتون تغییر بدبید

                      کد:
                      [/$regfile = "m8adef.dat"
                      $crystal = 4000000
                      $hwstack = 40
                      $swstack = 16
                      $framesize = 32
                      $lib "ds1307clock.lib"
                      Const Ds1307w = &HD0---------------->رجیستر نوشتن
                      Const Ds1307r = &HD1-------------------->رجیسترخواندن
                      Config Lcdbus = 4
                      Config Lcd = 16 * 2
                      Cursor Off
                      Config Lcdpin = Pin , Db4 = Pinb.3 , Db5 = Pinb.4 , Db6 = Pinb.5 , Db7 = Pinc.0 , Rs = Pinb.1 , E = Pinb.2
                      
                      Deflcdchar 0 , 224 , 226 , 230 , 238 , 255 , 238 , 230 , 226    ' replace [x] with number (0-7)
                      
                      
                      
                      
                      Cls
                      Config Scl = Portc.5
                      Config Sda = Portc.4
                      Config Portb.0 = Output
                       Config Pind.7 = Input
                       Config Pind.5 = Input
                        Config Pind.6 = Input
                        Config Debounce = 20
                      
                      Portb.0 = 1
                      
                      Dim D As Byte
                      Dim C As Byte
                      Dim B As Byte
                      Dim A As Byte
                      Dim Second As Byte
                      Dim Minute As Byte
                      Dim Hour As Byte
                      Dim Saat As Byte
                      Dim Esaat As Eram Byte
                      Dim Dagh As Byte
                      Dim Edagh As Eram Byte
                      Dim Offmin As Byte
                       Dim Offhour As Byte
                       Dim Offtime As Byte
                       If C <> 12 Then ......> تو این چند خط من میخواستم فرکانس 1هرتز رو روی پایه خروجی 1307 داشته باشم وبنابراین یکبار این برنامه اجرا میشود والبته برای راه اندازی 1307 باید یک عدد رو روی ثانیه قرار بدبد تا شروع بکار کنه ومن تو همین عدد صفر رو توی رجیستر ریختم تا شروع بکار کنه که اینم یکبار اجرا میشه برا همیشه
                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 7-------->رجیستر مربوط به فرکانس یک هرتز
                      I2cwbyte 00010000---->نوشتن کد فعال سازی آن
                      I2cstop
                      Second = 0 مقدار صفر ثانیه
                      I2cstart
                      I2cwbyte Ds1307w آماده سازی 1307 برای نوشتن
                      I2cwbyte 0 انتخاب نوشتن رجیستر صفر مربوط به ثانیه
                      I2cwbyte Second نوشتن مقدار ثانیهدر رجیستر
                      I2cstop
                      C = 12
                      End If
                      
                      do
                      
                      
                      
                      
                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 0
                      I2cstart
                      I2cwbyte Ds1307r
                      I2crbyte Second , Ack
                      I2crbyte Minute , Ack
                      I2crbyte Hour , Nack
                      I2cstop
                      
                      Second = Makedec(second)
                      Minute = Makedec(minute)
                      Hour = Makedec(hour)
                      
                      
                       Locate 1 , 1
                           Lcd "Time = " ; Hour ; ":" ; Minute ; ":" ; Second ; "   "
                      
                             
                      Loop
                      End
                      اقا میثم دستتون دردنکنه برنامه ای که ززحمت کشیدین هنوز اجرا نکردم.امتحان میکنم خبرش بهتون میدم.اما چندتاسوال
                      1.بابت ادرس رجیستر فراموش کردم.ولی تو برنامه اصلی خودم قید شده بود که جواب نداد
                      2.برنامه من که تو پرتیوس جواب داده.پس چراعملی جواب نداد
                      3.اگر فرکانس تو برنامه فرضکنیم بذارم روی 8مگاهرتز ولی فیوز بیتم روی فرکانس 1مگاهرتز تنظیم باشه ایا مشکلی پیش میاد

                      دیدگاه


                        #12
                        پاسخ : مشکل با ای سی ds1307 و میکرو

                        با تشکر از اقا میثم اولا لابریری رو نذاشتی دوما باید بری تو قسمت ست کردن مقادیر و به ثانیه شمار برای بار اول مقدار بدی اونم بجز صفر خواستی بگو تا برات برنامه رو کامل بذارم
                        { خلاف قوانین - پاک شد }

                        دیدگاه


                          #13
                          پاسخ : مشکل با ای سی ds1307 و میکرو

                          نوشته اصلی توسط r-el
                          با تشکر از اقا میثم اولا لابریری رو نذاشتی دوما باید بری تو قسمت ست کردن مقادیر و به ثانیه شمار برای بار اول مقدار بدی اونم بجز صفر خواستی بگو تا برات برنامه رو کامل بذارم
                          ممنون.اگر زحمتی نیست برنامه را برام بذارین

                          دیدگاه


                            #14
                            پاسخ : مشکل با ای سی ds1307 و میکرو

                            نوشته اصلی توسط میثم قاسمی نیا
                            خوب حق هم داشته کار نمیکرده....برنامتون مشکل داره
                            اول اینکه کتابخانه 1307 رو معرفی نکردید برای ارتباط
                            دوم ریجسترهای خواندن ونوشتن در 1307 رو تعیین نکردید در برنامه
                            سوم برای شروع به کار 1307 شما باید برای بار اول یک عدد رو در ریجستر ثانیه قرار بدی
                            برنامه رو میزارم..این برنامه رو خودم نوشتم وکاملاتست شده است وبرحسب نیازتون تغییر بدبید

                            کد:
                            [/$regfile = "m8adef.dat"
                            $crystal = 4000000
                            $hwstack = 40
                            $swstack = 16
                            $framesize = 32
                            $lib "ds1307clock.lib"
                            Const Ds1307w = &HD0---------------->رجیستر نوشتن
                            Const Ds1307r = &HD1-------------------->رجیسترخواندن
                            Config Lcdbus = 4
                            Config Lcd = 16 * 2
                            Cursor Off
                            Config Lcdpin = Pin , Db4 = Pinb.3 , Db5 = Pinb.4 , Db6 = Pinb.5 , Db7 = Pinc.0 , Rs = Pinb.1 , E = Pinb.2
                            
                            Deflcdchar 0 , 224 , 226 , 230 , 238 , 255 , 238 , 230 , 226    ' replace [x] with number (0-7)
                            
                            
                            
                            
                            Cls
                            Config Scl = Portc.5
                            Config Sda = Portc.4
                            Config Portb.0 = Output
                             Config Pind.7 = Input
                             Config Pind.5 = Input
                              Config Pind.6 = Input
                              Config Debounce = 20
                            
                            Portb.0 = 1
                            
                            Dim D As Byte
                            Dim C As Byte
                            Dim B As Byte
                            Dim A As Byte
                            Dim Second As Byte
                            Dim Minute As Byte
                            Dim Hour As Byte
                            Dim Saat As Byte
                            Dim Esaat As Eram Byte
                            Dim Dagh As Byte
                            Dim Edagh As Eram Byte
                            Dim Offmin As Byte
                             Dim Offhour As Byte
                             Dim Offtime As Byte
                             If C <> 12 Then ......> تو این چند خط من میخواستم فرکانس 1هرتز رو روی پایه خروجی 1307 داشته باشم وبنابراین یکبار این برنامه اجرا میشود والبته برای راه اندازی 1307 باید یک عدد رو روی ثانیه قرار بدبد تا شروع بکار کنه ومن تو همین عدد صفر رو توی رجیستر ریختم تا شروع بکار کنه که اینم یکبار اجرا میشه برا همیشه
                            I2cstart
                            I2cwbyte Ds1307w
                            I2cwbyte 7-------->رجیستر مربوط به فرکانس یک هرتز
                            I2cwbyte 00010000---->نوشتن کد فعال سازی آن
                            I2cstop
                            Second = 0 مقدار صفر ثانیه
                            I2cstart
                            I2cwbyte Ds1307w آماده سازی 1307 برای نوشتن
                            I2cwbyte 0 انتخاب نوشتن رجیستر صفر مربوط به ثانیه
                            I2cwbyte Second نوشتن مقدار ثانیهدر رجیستر
                            I2cstop
                            C = 12
                            End If
                            
                            do
                            
                            
                            
                            
                            I2cstart
                            I2cwbyte Ds1307w
                            I2cwbyte 0
                            I2cstart
                            I2cwbyte Ds1307r
                            I2crbyte Second , Ack
                            I2crbyte Minute , Ack
                            I2crbyte Hour , Nack
                            I2cstop
                            
                            Second = Makedec(second)
                            Minute = Makedec(minute)
                            Hour = Makedec(hour)
                            
                            
                             Locate 1 , 1
                                 Lcd "Time = " ; Hour ; ":" ; Minute ; ":" ; Second ; "   "
                            
                                   
                            Loop
                            End
                            من زیادبسکام وارد نیستم میشه درباره خطوطی که نوشتین یه کم توضیح بدین.مرسی

                            دیدگاه


                              #15
                              پاسخ : مشکل با ای سی ds1307 و میکرو

                              امشب یه برنامه برات میذارم الان دارم میرم سرکار
                              { خلاف قوانین - پاک شد }

                              دیدگاه

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