اطلاعیه

Collapse
No announcement yet.

ارتباط XMEGA با DS1307 درBASCOMAVR

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

    ارتباط XMEGA با DS1307 درBASCOMAVR

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

    کد:
    $regfile = "xm64a3def.dat"
    $crystal = 32000000                     '32MHz
    $hwstack = 64
    $swstack = 40
    $framesize = 40
    
    
    $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
    
    
    Config Osc = Enabled , Pllosc = Disabled , Extosc = Disabled , 32khzosc = Disabled , 32mhzosc = Enabled    '32MHz
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 '32MHz
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
    Cls
    Cursor Off
    
    
    
    'CONFIG saat--------------------------------------------------------------------
    Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled , Hi = Enabled
    
    
    Dim Twi_start As Byte
    Open "TWIC" For Binary As #2
    'PortC.0
    'PortC.1
    Config Twic = 400000
    I2cinit #2
    
    
    
    Dim Seco As Byte , Mine As Byte , Hour As Byte
    'Locate 1 , 1 : Lcd Hour ; ":" ; Mine ; ":" ; Seco
    
    Do
    
    
    I2cstart #2
    I2cwbyte &HD0 , #2
    I2cwbyte 0 , #2
    I2cstart #2
    I2cwbyte &HD1 , #2
    I2crbyte Seco , Ack , #2
    I2crbyte Mine , Ack , #2
    I2crbyte Hour , Nack , #2
    I2cstop #2
    
    
    
    Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
    
    Locate 1 , 1 : Lcd Hour ; ":" ; Mine ; ":" ; Seco
    
    
    
    Loop
    
    
    End
    http://ARTAROBOTIC.IR

    #2
    پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

    سلام دوست عزیز
    نسخه بسکامتون چنده؟
    الهم عجل لولیک الفرج

    فقط 313 نفر...

    دیدگاه


      #3
      پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

      سلام دوست من

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

      http://www.eca.ir/forum2/index.php?topic=90314.15

      - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

      دیدگاه


        #4
        پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

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

        نسخه 2.0.7.5
        http://ARTAROBOTIC.IR

        دیدگاه


          #5
          پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

          سلام

          این کد برای pcf8583 هست که میتونید برای ds1307 تغییر بدین

          کد:
          $regfile = "xm128A1def.dat"
          $crystal = 32000000
                               '32MHz
          $hwstack = 300
          $swstack = 300
          $framesize = 300
          
          $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
          
          
          
          Config Osc = Disabled , 32mhzosc = Enabled         '32MHz
          Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
          
          
          
          
          '************************************** RTC **************************
          
          
          Dim Twi_start As Byte                    ' This Variable is used by the I2C functions
          Open "TWID" For Binary As #10                ' Pull-Up resistor (4K7) on SDA and SCL to Vcc = 3,3V
          Config Twid = 100000
          I2cinit #10
          
          
          
          Dim Weekday As Byte
          
          Dim Year_main As Byte
          Dim Year_temp As Byte
          
          
          
          
          
          Const Pcf85w = &HA0
          Const Pcf85r = &HA1
          
          
          Config Clock = User
          Config Date = Ymd , Separator = /
          
          
          
          
          
          
          Dim V As String * 10
          
          
          Time$ = "12:12:59"
          
          
          
          
          
          Do
          
          V = Time$
          V = Date$
          
          Loop
          
          End
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          Getdatetime:
          
           I2cstart #10                       ' Generate start code
           I2cwbyte Pcf85w , #10                   ' send address
           I2cwbyte 2 , #10                     ' start address in 1307
          
           I2crepstart #10                      ' Generate start code
           I2cwbyte Pcf85r , #10                   ' send address
          
           I2crbyte _sec , Ack , #10
           I2crbyte _min , Ack , #10                 ' MINUTES
           I2crbyte _hour , Ack , #10                ' Hours
          
          
           _hour = _hour And &B00111111
          
          
           I2crbyte Weekday , Ack , #10               ' Day AND YEAR
           _day = Weekday And &B00111111
          
           _year = Weekday And &B11000000
          
          
           I2crbyte Weekday , Nack , #10               ' Month
           _month = Weekday And &B00011111
          
           I2cstop #10
          
          
          
          
          
          
           I2cstart #10                       ' Generate start code
           I2cwbyte Pcf85w , #10                   ' send address
           I2cwbyte &H20 , #10                    ' start address in 1307
          
           I2crepstart #10                      ' Generate start code
           I2cwbyte Pcf85r , #10                   ' send address
          
           I2crbyte Year_main , Ack , #10
           I2crbyte Year_temp , Nack , #10              ' Month of Year
           I2cstop #10
          
          
          
            If Year_temp <> _year Then
          
               Year_main = Year_main + 1
               _year = Year_main Mod 4
               Rotate _year , Left , 6
          
               I2cstart #10                    ' Generate start code
               I2cwbyte Pcf85w , #10               ' send address
               I2cwbyte &H20 , #10                ' starting address in 1307
               I2cwbyte Year_main , #10
               I2cwbyte _year , #10
               I2cstop #10
          
               _year = _year Or _day
          
               I2cstart #10                    ' Generate start code
               I2cwbyte Pcf85w , #10               ' send address
               I2cwbyte 5 , #10                  ' starting address in 1307
               I2cwbyte _year , #10
               I2cstop #10
          
            End If
          
          
          
          
          
            _year = Year_main
          
          
           _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
           _day = Makedec(_day) : _month = Makedec(_month)
          
          Return
          
          
          
          
          Setdate:
          
            Weekday = _year
          
            _year = _year Mod 4
            Rotate _year , Left , 6
          
          
            I2cstart #10                       ' Generate start code
            I2cwbyte Pcf85w , #10                  ' send address
            I2cwbyte &H20 , #10                   ' starting address in 1307
            I2cwbyte Weekday , #10
            I2cwbyte _year , #10
            I2cstop #10
          
          
          
            _day = Makebcd(_day) : _month = Makebcd(_month)
            _day = _year Or _day
          
            I2cstart #10                       ' Generate start code
            I2cwbyte Pcf85w , #10                  ' send address
            I2cwbyte 5 , #10                     ' starting address in 1307
            I2cwbyte _day , #10
            I2cwbyte _month , #10
            I2cstop #10
          
          Return
          
          
          
          
          
          
          
          
          
          
          
          
          
          Settime:
          
           _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
           I2cstart #10                       ' Generate start code
           I2cwbyte Pcf85w , #10                   ' send address
           I2cwbyte 2 , #10                     ' starting address in 1307
           I2cwbyte _sec , #10                    ' Send Data to SECONDS
           I2cwbyte _min , #10                    ' MINUTES
           I2cwbyte _hour , #10                   ' Hours
           I2cstop #10
          
          Return

          دیدگاه


            #6
            پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

            نوشته اصلی توسط mahdi421
            سلام

            این کد برای pcf8583 هست که میتونید برای ds1307 تغییر بدین

            کد:
            $regfile = "xm128A1def.dat"
            $crystal = 32000000
                                 '32MHz
            $hwstack = 300
            $swstack = 300
            $framesize = 300
            
            $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
            
            
            
            Config Osc = Disabled , 32mhzosc = Enabled         '32MHz
            Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
            
            
            
            
            '************************************** RTC **************************
            
            
            Dim Twi_start As Byte                    ' This Variable is used by the I2C functions
            Open "TWID" For Binary As #10                ' Pull-Up resistor (4K7) on SDA and SCL to Vcc = 3,3V
            Config Twid = 100000
            I2cinit #10
            
            
            
            Dim Weekday As Byte
            
            Dim Year_main As Byte
            Dim Year_temp As Byte
            
            
            
            
            
            Const Pcf85w = &HA0
            Const Pcf85r = &HA1
            
            
            Config Clock = User
            Config Date = Ymd , Separator = /
            
            
            
            
            
            
            Dim V As String * 10
            
            
            Time$ = "12:12:59"
            
            
            
            
            
            Do
            
            V = Time$
            V = Date$
            
            Loop
            
            End
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            Getdatetime:
            
             I2cstart #10                       ' Generate start code
             I2cwbyte Pcf85w , #10                   ' send address
             I2cwbyte 2 , #10                     ' start address in 1307
            
             I2crepstart #10                      ' Generate start code
             I2cwbyte Pcf85r , #10                   ' send address
            
             I2crbyte _sec , Ack , #10
             I2crbyte _min , Ack , #10                 ' MINUTES
             I2crbyte _hour , Ack , #10                ' Hours
            
            
             _hour = _hour And &B00111111
            
            
             I2crbyte Weekday , Ack , #10               ' Day AND YEAR
             _day = Weekday And &B00111111
            
             _year = Weekday And &B11000000
            
            
             I2crbyte Weekday , Nack , #10               ' Month
             _month = Weekday And &B00011111
            
             I2cstop #10
            
            
            
            
            
            
             I2cstart #10                       ' Generate start code
             I2cwbyte Pcf85w , #10                   ' send address
             I2cwbyte &H20 , #10                    ' start address in 1307
            
             I2crepstart #10                      ' Generate start code
             I2cwbyte Pcf85r , #10                   ' send address
            
             I2crbyte Year_main , Ack , #10
             I2crbyte Year_temp , Nack , #10              ' Month of Year
             I2cstop #10
            
            
            
              If Year_temp <> _year Then
            
                 Year_main = Year_main + 1
                 _year = Year_main Mod 4
                 Rotate _year , Left , 6
            
                 I2cstart #10                    ' Generate start code
                 I2cwbyte Pcf85w , #10               ' send address
                 I2cwbyte &H20 , #10                ' starting address in 1307
                 I2cwbyte Year_main , #10
                 I2cwbyte _year , #10
                 I2cstop #10
            
                 _year = _year Or _day
            
                 I2cstart #10                    ' Generate start code
                 I2cwbyte Pcf85w , #10               ' send address
                 I2cwbyte 5 , #10                  ' starting address in 1307
                 I2cwbyte _year , #10
                 I2cstop #10
            
              End If
            
            
            
            
            
              _year = Year_main
            
            
             _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
             _day = Makedec(_day) : _month = Makedec(_month)
            
            Return
            
            
            
            
            Setdate:
            
              Weekday = _year
            
              _year = _year Mod 4
              Rotate _year , Left , 6
            
            
              I2cstart #10                       ' Generate start code
              I2cwbyte Pcf85w , #10                  ' send address
              I2cwbyte &H20 , #10                   ' starting address in 1307
              I2cwbyte Weekday , #10
              I2cwbyte _year , #10
              I2cstop #10
            
            
            
              _day = Makebcd(_day) : _month = Makebcd(_month)
              _day = _year Or _day
            
              I2cstart #10                       ' Generate start code
              I2cwbyte Pcf85w , #10                  ' send address
              I2cwbyte 5 , #10                     ' starting address in 1307
              I2cwbyte _day , #10
              I2cwbyte _month , #10
              I2cstop #10
            
            Return
            
            
            
            
            
            
            
            
            
            
            
            
            
            Settime:
            
             _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
             I2cstart #10                       ' Generate start code
             I2cwbyte Pcf85w , #10                   ' send address
             I2cwbyte 2 , #10                     ' starting address in 1307
             I2cwbyte _sec , #10                    ' Send Data to SECONDS
             I2cwbyte _min , #10                    ' MINUTES
             I2cwbyte _hour , #10                   ' Hours
             I2cstop #10
            
            Return
            مهندس جان ممنون ...نقشه مدار رو دارید ؟
            http://ARTAROBOTIC.IR

            دیدگاه


              #7
              پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

              http://s5.picofile.com/file/8127053500/pcf8583.pdf.html

              این هم برای ds1307

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

              کد:
              $regfile = "xm128A1def.dat"
              $crystal = 32000000
                                   '32MHz
              $hwstack = 300
              $swstack = 300
              $framesize = 300
              
              $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
              
              
              
              Config Osc = Disabled , 32mhzosc = Enabled         '32MHz
              Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
              
              
              
              
              
              '**************************************** RTC *******************************
              
              Dim Twi_start As Byte                    ' This Variable is used by the I2C functions
              Open "TWID" For Binary As #10                ' Pull-Up resistor (4K7) on SDA and SCL to Vcc = 3,3V
              Config Twid = 100000
              I2cinit #10
              
              
              Const Ds1307w = &HD0                    ' Addresses of Ds1307 clock
              Const Ds1307r = &HD1
              Config Clock = User                     ' this will dim the bytes automatic
              
              Config Date = Ymd , Separator = /              ' ANSI-Format
              
              Dim Weekday As Byte
              
              
              Dim Time_str As String * 8
              Dim Date_str As String * 8
              Dim Sec_of_day As Dword
              
              
              
              
              
              
              
              
              Time$ = "12:12:59"
              
              
              
              
              
              Do
              
              Time_str = Time$
              Date_str = Date$
              
              
              Loop
              
              End
              
              
              
              
              
              Getdatetime:
               I2cstart #10                       ' Generate start code
              
               I2cwbyte Ds1307w , #10                  ' send address
              
               I2cwbyte 0 , #10                     ' start address in 1307
              
               I2crepstart #10 , #10                   ' Generate start code
              
               I2cwbyte Ds1307r , #10                  ' send address
              
               I2crbyte _sec , Ack , #10
               I2crbyte _min , Ack , #10                 ' MINUTES
               I2crbyte _hour , Ack , #10                ' Hours
               I2crbyte Weekday , Ack , #10               ' Day of Week
               I2crbyte _day , Ack , #10                 ' Day of Month
               I2crbyte _month , Ack , #10                ' Month of Year
               I2crbyte _year , Nack , #10                ' Year
               I2cstop #10
               _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
               _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
              Return
              
              
              
              
              
              
              Setdate:
               _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
               I2cstart #10                       ' Generate start code
               I2cwbyte Ds1307w , #10                  ' send address
               I2cwbyte 4 , #10                     ' starting address in 1307
               I2cwbyte _day , #10                    ' Send Data to SECONDS
               I2cwbyte _month , #10                   ' MINUTES
               I2cwbyte _year , #10                   ' Hours
               I2cstop #10
              Return
              
              
              Settime:
               _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
              
               I2cstart #10                       ' Generate start code
               I2cwbyte Ds1307w , #10                  ' send address
               I2cwbyte 0 , #10                     ' starting address in 1307
               I2cwbyte _sec , #10                    ' Send Data to SECONDS
               I2cwbyte _min , #10                    ' MINUTES
               I2cwbyte _hour , #10                   ' Hours
               I2cstop #10
              
              Return

              دیدگاه


                #8
                پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

                مشکل حل شد ممنون .... :applause:

                برای من یه سوال هستش ....چطوری می تونیم پایه SDA , SCL رو به پورت دیگه انتقال دهیم منظورم اینکه بجایPORTC.0 , PORTC.1از پورت C4, C5 استفاده کنیم ؟؟؟؟؟؟؟؟؟؟
                http://ARTAROBOTIC.IR

                دیدگاه


                  #9
                  پاسخ : ارتباط XMEGA با DS1307 درBASCOMAVR

                  نوشته اصلی توسط H.GHATARI
                  مشکل حل شد ممنون .... :applause:

                  برای من یه سوال هستش ....چطوری می تونیم پایه SDA , SCL رو به پورت دیگه انتقال دهیم منظورم اینکه بجایPORTC.0 , PORTC.1از پورت C4, C5 استفاده کنیم ؟؟؟؟؟؟؟؟؟؟
                  دوست عزیز فکر می کنم اگر بخواهید یه TWI نرم افزاری شبیه سازی کنید می تونید پورت های دلخواه براش انتخاب کنید . اما اگر شما از TWI خود میکرو استفاده کنید قبلا پورت های SDA و SCL رو پین های خاصی در ساختمان میکرو در نظر گرفته شده و قابل تغییر نباشن . ( بازم خیلی مطمئن نیستم ولی توی دیتاشیت هر میکرویی دقیقا ذکر شده که این پین ها روی کدام پین های میکرو هستند برای همین میگم ) .

                  البته Xmega که معمولا چند تا TWI داره که می تونید از پورت های دیگه استفاده کنید .
                  - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                  دیدگاه

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