اطلاعیه

Collapse
No announcement yet.

[پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلادی) + دما + سون سگمنت + منبع ت

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

    #61
    پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

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

    اضافه شده در تاریخ :
    [shadow=red,left]93.10.22
    شروع برنامه نویسی پروژه به زبان C :
    افزودن برخی امکانات + اضافه شدن ورودی تاریخ شمسی[/shadow]
    - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
    ارتباط با من : ir02x6
    طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

    دیدگاه


      #62
      پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلادی) + دما + سون سگمنت + منبع تغذیه خا

      درود بر ایرانیان
      آقا من تغییراتی در کد دادم و کاملا مشخص هست که کدوم قسمتها را تغییر دادم
      از اونجایی که این سون سگمنت ساعتی مخصوص نتونستم جور کنم فقط تونستم با همون سون سگمنتی که قبلا از تهران خرید کرده بودم کار کنم
      و برنامه من هم با کدویژن و بدون آی سی ساعت DS1307 هست ولی هدف این هست که یه سنسور فتوسل بگذاریم و نور سون سگمنتها را با توجه به نور محیط کنترل کنیم ...
      دوستانی که مدار را با BQ-M362RD-A ساخته اند برنامه ای که میگذارم امتحان کنند تا ببینم مشکلی داره یا نه ...
      [code=vb]'******************************************** ***********************************
      '* Digital DS1307 Clock and Date (Jalali and AD) and Thermometer + 7seg *
      '* Compiler: BASCOM-AVR 2.0.7.3 *
      '* Creation Date: 2010.01.10 - Author: Behnam Zakizadeh - www.AVR64.com *
      '* Updated and Improved by : Ir02x6 ( Vahid Asadi ) - 2014.11.20 *
      '* © ir02x6 - www.ECA.ir *
      '* Ver: 2.0 ( 7SEG : BQ-M362RD-A ) *
      '******************************************** ***********************************
      $regfile = "m8def.dat"
      $crystal = 4000000
      '$projecttime = 0
      $hwstack = 64
      $swstack = 64
      $framesize = 64
      $lib "ds1307clock.lib"

      ' Miladi be Shamsi{
      $lib "mcsbyteint.lbx"
      ' } Miladi be Shamsi

      ' Sub {
      Declare Sub Refresh
      Declare Sub Refreshtime
      Declare Sub Refreshdate
      Declare Sub Send
      Declare Sub Keyscan
      Declare Sub Wait4key
      Declare Sub Wait4keytime
      Declare Sub Wait4keydate
      Declare Sub Tabdil
      ' } Sub

      ' A2D {
      Config Adc = Single , Prescaler = Auto , Reference = Internal
      Enable Adc
      Start Adc
      ' } A2D

      ' Var {

      '============================================ ===========================
      DIM Photocell AS Byte , X AS Byte , X2 AS Word 'for photocell
      '============================================ ===========================

      Dim Temp As Byte , Sec_blink As Bit
      Dim W As Word , Temp_clock As Byte
      Dim Menu1 As Bit
      Menu1 = 0
      Dim Menu2 As Bit
      Menu2 = 0
      Dim Kelid As Bit
      Dim Kelid2 As Bit
      Dim Kelid3 As Bit
      Kelid = 0
      Kelid2 = 0
      Kelid3 = 0
      ' } Var

      ' Miladi be Shamsi {
      Dim Myear As Integer 'input Miladi(gregorian) Year
      Dim Mday As Integer 'input Miladi Day
      Dim Mmonth As Integer 'input Miladi Month
      Dim Mdayofyear As Integer
      Dim Myear_ As Integer
      Dim Jday As Integer 'output Jalali(shamsi) Day
      Dim Jmonth As Integer 'output Jalali Month
      Dim Jyear As Integer 'output Jalali Year
      Dim Jdayofyear As Integer
      Dim Gnumdayofyear As Integer
      Dim Isleapyear As Bit
      Dim Isleapyearp As Bit
      Dim Iloop As Byte
      Dim Temp3 As Integer
      Dim Temp4 As Integer
      Dim Temp5 As Integer
      Dim Temp6 As Integer
      Dim Jmonth_a(12) As Byte
      Dim Mmonth_a(12) As Byte
      ' } Miladi be Shamsi


      Config Sda = Portc.4
      Config Scl = Portc.3

      ' address of ds1307 {
      Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
      Const Ds1307r = &HD1
      ' } address of ds1307

      Config Clock = User

      ' dim other needed variables {
      Dim Weekday As Byte
      '} dim other needed variables

      Waitms 100

      ' For Blink LED {
      Config Timer1 = Timer , Prescale = 64
      Enable Interrupts
      Enable Timer1
      Timer1 = 34276
      On Ovf1 Ov1
      Stop Timer1
      ' } For Blink LED

      ' I/O {
      Ddrd = &B00011111
      Portd = &B11100000

      Min_day_key Alias Pind.7
      Hour_month_key Alias Pind.6
      Dip_key Alias Pind.5
      Menu_key Alias Pinb.0

      Com4 Alias Portd.4
      Com3 Alias Portd.3
      Com2 Alias Portd.1
      Com1 Alias Portd.0
      Com_dot Alias Portd.2

      Ddrb = &B00111110
      Portb = &HFF

      Seg_a Alias Portb.1
      Seg_g Alias Portb.2
      Seg_b Alias Portb.3
      Seg_c Alias Portb.4
      Seg_f Alias Portb.5

      Point_up Alias Portb.1
      Point_dg Alias Portb.4

      Ddrc = &B00000111

      Point_dn Alias Portc.2
      Seg_e Alias Portc.0
      Seg_d Alias Portc.1
      ' } I/O

      'Main prog start here:

      ' Tanzime meghdare avaliye sa@ va tarikh {
      If Dip_key = 0 Then
      Time$ = "20:00:00"
      Date$ = "12-29-14" ' 29 december 2014
      End If
      ' } Tanzime meghdare avaliye sa@ va tarikh

      Start Timer1

      Point_dn = 1

      ' namayeshe avaliye {
      Call Wait4key
      ' } namayeshe avaliye

      ' Loope Asli {
      Do
      Call Keyscan
      Loop
      ' } Loope Asli

      End

      ' tabe'e tabdile shamsi {
      Sub Tabdil
      Mmonth_a(1) = 31
      '——–28 Ya 29 Agar Sall Kabiseh Bashad In Mah 29 Roz Mibashad—————— –
      Mmonth_a(2) = 28
      Mmonth_a(3) = 31

      Mmonth_a(4) = 30
      Mmonth_a(5) = 31
      Mmonth_a(6) = 30

      Mmonth_a(7) = 31
      Mmonth_a(8) = 31
      Mmonth_a(9) = 30

      Mmonth_a(10) = 31
      Mmonth_a(11) = 30
      Mmonth_a(12) = 31

      Gnumdayofyear = 365


      Myear = _year + 2000 'sample Miladi(gregorian) Year
      Mday = _day 'sample Miladi Day
      Mmonth = _month 'sample Miladi Month
      Mdayofyear = 0
      '————–shart Kabiseh Bodane Sall———— -
      Temp3 = Myear Mod 4
      Temp4 = Myear Mod 100
      Temp5 = Myear Mod 400
      Temp6 = Temp3 And Temp4

      If Temp6 <> 0 Or Temp5 = 0 Then
      Mmonth_a(2) = 28
      Else
      Mmonth_a(2) = 29
      End If

      Myear_ = Myear - 1
      Temp3 = Myear_ Mod 4
      Temp4 = Myear_ Mod 100
      Temp5 = Myear_ Mod 400
      Temp6 = Temp3 And Temp4

      If Temp6 <> 0 Or Temp5 = 0 Then
      Reset Isleapyearp
      Else
      Set Isleapyearp
      End If

      Temp3 = Mmonth - 1

      For Iloop = 1 To Temp3
      Mdayofyear = Mmonth_a(iloop) + Mdayofyear
      Next
      Mdayofyear = Mday + Mdayofyear

      If Mdayofyear > 79 Then

      Temp3 = Mdayofyear - 79
      Jyear = Myear - 621

      If Temp3 < 186 Then

      Temp4 = Temp3 Mod 31
      Temp5 = Temp3 / 31

      If Temp4 = 0 Then
      Jmonth = Temp5
      Jday = 31
      Else
      Jmonth = Temp5 + 1
      Jday = Temp4
      End If

      Else

      Temp4 = Temp3 - 186
      Temp5 = Temp4 Mod 30
      Temp6 = Temp4 / 30

      If Temp5 = 0 Then
      Jmonth = Temp6 + 6
      Jday = 30
      Else
      Jmonth = Temp6 + 7
      Jday = Temp5
      End If

      End If

      Else

      Jyear = Myear - 622

      If Isleapyearp = 1 Then
      Mdayofyear = Mdayofyear + 11
      Else
      Mdayofyear = Mdayofyear + 10
      End If

      Temp4 = Mdayofyear Mod 30
      Temp5 = Mdayofyear / 30

      If Temp4 = 0 Then
      Jmonth = Temp5 + 9
      Jday = 30
      Else
      Jmonth = Temp5 + 10
      Jday = Temp4
      End If

      Waitms 1

      End If
      End Sub
      ' } tabe'e tabdile shamsi

      Sub Refresh
      Gosub Getdatetime
      Gosub Tabdil

      ' Show Temp {
      If Temp_clock >= 22 And Temp_clock <= 26 Then
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = W \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = W Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
      Point_dg = 0
      Waitms 2
      Point_dg = 1
      ' } Show Temp

      ' Show Date miladi {
      Elseif Temp_clock >= 17 And Temp_clock <= 21 Then
      Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _month \ 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _month Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = _day \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = _day Mod 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Point_dn = 0
      Waitms 2
      Point_dn = 1
      ' } Show Date miladi


      ' Show Date shamsi {
      Elseif Temp_clock >= 12 And Temp_clock <= 16 Then
      Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = Jmonth \ 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = Jmonth Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = Jday \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = Jday Mod 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Point_dn = 0
      Waitms 2
      Point_dn = 1
      ' } Show Date shamsi


      ' Show Time {
      Else
      ' Mohasebate Temp {
      W = Getadc(5)
      W = W / 4
      W = W - 2 ' Temp Calibration
      ' } Mohasebate Temp

      Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _hour \ 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _hour Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = _min \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = _min Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
      Point_up = Sec_blink
      Waitms 2
      Point_up = 1
      ' }Show Time

      End If

      End Sub

      ' ijade menu {
      Sub Refreshtime
      Gosub Getdatetime
      If Temp_clock >= 0 And Temp_clock <= 26 Then
      Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _hour \ 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _hour Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = _min \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = _min Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 1
      Point_up = Sec_blink
      Waitms 2
      Point_up = 1
      End If
      End Sub

      Sub Refreshdate
      Gosub Getdatetime
      If Temp_clock >= 0 And Temp_clock <= 26 Then
      Com1 = 1 : Com2 = 0 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _month \ 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Temp = _month Mod 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 1 : Com4 = 0 : Com_dot = 0
      Temp = _day \ 10 : Call Send
      Com1 = 0 : Com2 = 0 : Com3 = 0 : Com4 = 1 : Com_dot = 0
      Temp = _day Mod 10 : Call Send
      Com1 = 0 : Com2 = 1 : Com3 = 0 : Com4 = 0 : Com_dot = 0
      Point_dn = 0
      Waitms 2
      Point_dn = 1
      End If
      End Sub
      ' } ijade menu

      Sub Send
      Select Case Temp
      Case 0:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 1
      Case 1:
      Seg_a = 1
      Seg_b = 0
      Seg_c = 0
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1
      Case 2:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 1
      Seg_g = 0
      Case 3:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 0
      Seg_e = 1
      Seg_f = 1
      Seg_g = 0
      Case 4:
      Seg_a = 1
      Seg_b = 0
      Seg_c = 0
      Seg_d = 1
      Seg_e = 1
      Seg_f = 0
      Seg_g = 0
      Case 5:
      Seg_a = 0
      Seg_b = 1
      Seg_c = 0
      Seg_d = 0
      Seg_e = 1
      Seg_f = 0
      Seg_g = 0
      Case 6:
      Seg_a = 0
      Seg_b = 1
      Seg_c = 0
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 0
      Case 7:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1
      Case 8:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 0
      Case 9:
      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 0
      Seg_e = 1
      Seg_f = 0
      Seg_g = 0
      Case 10:
      'C
      Seg_a = 0
      Seg_b = 1
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 1
      End Select

      '============================================ ===========================
      For X = 0 To 255
      Waitus 7
      If X = Photocell Then Exit For
      Next
      '============================================ ===========================

      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1

      '============================================ ===========================
      For X = X To 255
      Waitus 7
      Next
      '============================================ ===========================

      End Sub

      Ov1:
      Timer1 = 34276
      Toggle Sec_blink
      Incr Temp_clock
      If Temp_clock > 26 Then Temp_clock = 0 ' modate namayesh saat - tarikh ha - dama

      '============================================ ===========================
      X2 = Getadc(7) / 4
      Photocell = 255 - X2
      '============================================ ===========================

      Return

      ' DS1307 {
      Getdatetime:
      I2cstart ' Generate start code
      I2cwbyte Ds1307w ' send address
      I2cwbyte 0 ' start address in 1307

      I2cstart ' Generate start code
      I2cwbyte Ds1307r ' send address
      I2crbyte _sec , Ack
      I2crbyte _min , Ack ' MINUTES
      I2crbyte _hour , Ack ' Hours
      I2crbyte Weekday , Ack ' Day of Week
      I2crbyte _day , Ack ' Day of Month
      I2crbyte _month , Ack ' Month of Year
      I2crbyte _year , Nack ' Year
      I2cstop
      _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 ' Generate start code
      I2cwbyte Ds1307w ' send address
      I2cwbyte 4 ' starting address in 1307
      I2cwbyte _day ' Send Data to SECONDS
      I2cwbyte _month ' MINUTES
      I2cwbyte _year ' Hours
      I2cstop
      Return

      Settime:
      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
      I2cstart ' Generate start code
      I2cwbyte Ds1307w ' send address
      I2cwbyte 0 ' starting address in 1307
      I2cwbyte _sec ' Send Data to SECONDS
      I2cwbyte _min ' MINUTES
      I2cwbyte _hour ' Hours
      I2cstop
      Return
      ' } DS1307

      Sub Keyscan
      ' Date and time setting in menu mode {
      If Hour_month_key = 0 And Kelid2 = 0 Then
      Kelid2 = 1
      If Menu1 = 1 And Menu2 = 0 Then Incr _hour
      If _hour > 23 Then _hour = 0
      If Menu1 = 1 And Menu2 = 1 Then Incr _month
      If _month > 12 Then _month = 1
      Gosub Setdate
      Gosub Settime
      End If

      If Min_day_key = 0 And Kelid3 = 0 Then
      Kelid3 = 1
      If Menu1 = 1 And Menu2 = 0 Then Incr _min
      If _min > 59 Then _min = 0
      If Menu1 = 1 And Menu2 = 1 Then Incr _day
      If _day > 31 Then _day = 1
      Gosub Settime
      Gosub Setdate
      End If
      ' } Date and time setting in menu mode

      ' marboot be menu ( entekhabe halat ) {
      If Menu_key = 0 And Menu1 = 0 And Kelid = 0 Then
      Kelid = 1
      Menu1 = 1
      Menu2 = 0
      Call Wait4keytime
      End If

      If Menu_key = 0 And Menu1 = 1 And Menu2 = 0 And Kelid = 0 Then
      Kelid = 1
      Menu2 = 1
      Call Wait4keydate
      End If

      If Menu_key = 0 And Menu1 = 1 And Menu2 = 1 And Kelid = 0 Then
      Kelid = 1
      Menu1 = 0
      Menu2 = 0
      Call Wait4key
      End If



      If Menu_key <> 0 Then
      Kelid = 0
      End If

      If Hour_month_key <> 0 Then
      Kelid2 = 0
      End If

      If Min_day_key <> 0 Then
      Kelid3 = 0
      End If
      ' } marboot be menu ( entekhabe halat )

      End Sub
      '-----------------------
      '-----------------------
      '-----------------------
      Sub Wait4key
      Do
      Call Refresh
      Call Keyscan
      Loop
      End Sub
      '-----------------------
      Sub Wait4keytime
      Do
      Call Refreshtime
      Call Keyscan
      Loop
      End Sub
      '-----------------------
      Sub Wait4keydate
      Do
      Call Refreshdate
      Call Keyscan
      Loop
      End Sub[/code]
      این هم مدارش

      مقدار خازن هم 100نانو خوبه نگذاشتین هم مهم نیست ... ولی باشه بهتره ...

      فقط یه چیزی ...
      چون پایه ADC خالی نداشتیم فعلا کانال 7 گذاشتم که باید خودتون برنامه را اصلاح کنید ...
      کد:
      Photocell = Getadc(7) / 4
      این هم فیلم گرفته شده از مدار من ...
      http://s5.picofile.com/file/8163421000/Photocell_7segment.mp4.html
      اگر بد شده به بزرگواری خودتون ببخشید ...

      پیروز باد ایرانیان

      برنامه در تاریخ 1393/11/07 ویرایش شد
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


        #63
        پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلادی) + دما + سون سگمنت + منبع تغذیه خا

        مثل همیشه عالی است سامان
        http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

        دیدگاه


          #64
          پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

          سلام
          وای تو این سفارش آخرم یادم رفت فتوسل بگیرم :(
          خب من فعلا چند قطعه از مدار ساعتم نرسیده واسه همین نتونستم تغییری بدم و تست کنم
          برای همین روی یک LCD کم کردن کلیدهارو تست کردم
          خب بجای کدهای مربوط به کلید Dip_key کدهای زیر بنویسیم، اینجوری یک پورت باز داریم و هم جای کمتر میگیره و کلید اضافه نمیزاریم :
          [code=vb]' Tanzime meghdare avaliye sa@ va tarikh {
          If Min_day_key = 0 And Hour_month_key = 0 Then
          Time$ = "20:00:00"
          Date$ = "12-29-14" ' 29 december 2014
          End If
          ' } Tanzime meghdare avaliye sa@ va tarikh[/code]
          اینجوری انجام میدیم :
          قبل وصل کردن تغذیه مدار، دو کلید متصل به PORTD.6 و PORTD.7 همزمان پایین نگه میداریم و سپس تغذیه مدار در همین حالت وصل میکنیم و بعد چند ثانیه کلیدهارو رها میکنیم
          حالا فعلا دوستان تست کنند ببینند جواب میده، سفارشم برسه هم اینو تست میکنم هم PIR و دوباره کم کردن یک کلید دیگه اگر بشه

          اضافه شده در تاریخ : 24 دی 1393 - 01:08:30
          سلام دوباره
          این کد اصلاح شده مربوط به کلید Dip_key هست که فکر کنم هیچ مشکلی نداره دیگه :
          [code=vb]' Tanzime meghdare avaliye sa@ va tarikh {
          If Min_day_key = 0 And Hour_month_key = 0 Then
          Time$ = "20:00:00"
          Date$ = "12-29-14" ' 29 december 2014
          While Pind.7 = 0 : Wend
          While Pinb.6 = 0 : Wend
          End If
          ' } Tanzime meghdare avaliye sa@ va tarikh[/code]
          فقط حتما باید قبل اینکه تغذیه مدار وصل کنیم دو کلید رو پایین نگه داریم و تغذیه وصل کنیم و چند ثانیه بعد از وصل کردن تغذیه کلیدهارو رها کنیم.

          دیدگاه


            #65
            پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

            نوشته اصلی توسط hamidelectroniic
            این کد اصلاح شده مربوط به کلید Dip_key هست که فکر کنم هیچ مشکلی نداره دیگه :
            [code=vb]' Tanzime meghdare avaliye sa@ va tarikh {
            If Min_day_key = 0 And Hour_month_key = 0 Then
            Time$ = "20:00:00"
            Date$ = "12-29-14" ' 29 december 2014
            While Pind.7 = 1 : Wend
            While Pinb.6 = 1 : Wend
            End If
            ' } Tanzime meghdare avaliye sa@ va tarikh[/code]
            فقط حتما باید قبل اینکه تغذیه مدار وصل کنیم دو کلید رو پایین نگه داریم و تغذیه وصل کنیم و چند ثانیه بعد از وصل کردن تغذیه کلیدهارو رها کنیم.
            سلام ، دوست عزیز من دلیل تغییر کد قبلیتون رو متوجه نشدم ، ممنون میشم بیشتر توضیح بدید ...

            آقا سامان شما هم لطف کنید بیشتر در مورد کدهاتون توضیح بدید ، روند کلی رو متوجه نشدم ...
            باتشکر
            - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
            ارتباط با من : ir02x6
            طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

            دیدگاه


              #66
              پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

              نوشته اصلی توسط ir02x6
              سلام ، دوست عزیز من دلیل تغییر کد قبلیتون رو متوجه نشدم ، ممنون میشم بیشتر توضیح بدید ...

              آقا سامان شما هم لطف کنید بیشتر در مورد کدهاتون توضیح بدید ، روند کلی رو متوجه نشدم ...
              باتشکر
              سلام
              کد قبلی مشکلش این بود که، در دستورات دیگه اختلال ایجاد میکرد، یعنی وقتی ما دو کلید با هم فشار میدیم هم شرط قبلی که گذاشتم اجرا میشد هم شرط مربوط به دو کلید Min_day_key و Hour_month_key اجرا میشدند. یعنی شرط های زیر هم با شرط قبلی اجرا میشدند :
              [code=vb]' Date and time setting in menu mode {
              If Hour_month_key = 0 And Kelid2 = 0 Then
              Kelid2 = 1
              If Menu1 = 1 And Menu2 = 0 Then Incr _hour
              If _hour > 23 Then _hour = 0
              If Menu1 = 1 And Menu2 = 1 Then Incr _month
              If _month > 12 Then _month = 1
              Gosub Setdate
              Gosub Settime
              End If

              If Min_day_key = 0 And Kelid3 = 0 Then
              Kelid3 = 1
              If Menu1 = 1 And Menu2 = 0 Then Incr _min
              If _min > 59 Then _min = 0
              If Menu1 = 1 And Menu2 = 1 Then Incr _day
              If _day > 31 Then _day = 1
              Gosub Settime
              Gosub Setdate
              End If
              ' } Date and time setting in menu mode[/code]
              و :
              [code=vb] If Hour_month_key <> 0 Then
              Kelid2 = 0
              End If

              If Min_day_key <> 0 Then
              Kelid3 = 0
              End If[/code]

              اما در کد جدید که از حلقه While استفاده شده میاد بررسی میکنه اگر دو کلید پایین باشن و وصل باشن ادامه برنامه اجرا نمیشه و تا وقتی دو کلید رها نکنیم به ادامه برنامه نمیره (در پست قبلیم اشتباهی Pind.7 = 1 و Pind.6 = 1 نوشتم، فکر کردم ورودی هستتند پورتها اما خروجی هستند و باید مساوی 0 باشند) :
              [code=vb]While Pind.7 = 0 : Wend
              While Pinb.6 = 0 : Wend[/code]
              این دو خط هم میشه اینجوری هم بنویسیم :
              [code=vb]While Min_day_key = 0 : Wend
              While Hour_month_key = 0 : Wend[/code]

              دیدگاه


                #67
                پاسخ : پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاری&#

                نوشته اصلی توسط ir02x6
                آقا سامان شما هم لطف کنید بیشتر در مورد کدهاتون توضیح بدید ، روند کلی رو متوجه نشدم ...
                درود
                به روی چشم آقای اسدی
                تغییرات خاصی ندادم ...
                دو تا متغیر تعریف کردم ...
                [code=vb]'============================================ ===========================
                DIM Photocell AS Byte , X AS Byte , X2 AS Word 'for photocell
                '============================================ ===========================[/code]
                از طریق یکی از کانالهای ADC شدت نور تابیده شده بر روی حسگر فتوسل اندازه گیری میشود و بعد مکمل گیری هم کردم ...
                با دستور NOT هم میشه مکمل گیری کرد ...
                دلیل اینکه مکمل گیری کردم این هست که موقعی که نور به حسگر تابیده میشود عدد خوانده شده از ADC به صفر نزدیکتر است ...
                پس باید شدت نور نمایشگر بیشتر باشد ...
                [code=vb]'============================================ ===========================
                X2 = Getadc(7) / 4
                Photocell = 255 - X2
                '============================================ ===========================[/code]
                توی زیر برنامه Sub Send که وظیفه آن نمایش اعداد و علایم روی نمایشگر 7segment هست یک سری تغییراتی دادم ...
                ببینید دوستان برای نمایش دادن باید ابتدا پورت را مساوی یک عددی کنیم که نمایش بده و بعد تاخیر و بعد همه پایه های پورت را صفر یا یک میکنیم که خاموش بشه ...
                حالا ما برای اینکه بخواهیم شدت نور صفحه نمایشگر 7Segment را کم یا زیاد کنیم باید ابتدا یک زمانی را در نظر بگیریم مثلا اگر همان زمان تاخیر 2 میلی ثانیه باشد و آن را به 256 قسمت کنیم حدودا میشه 7.8 میکرو ثانیه ...
                حالا اگر ما بیایم به جای اینکه 2 میلی ثانیه تاخیر ایجاد کنیم به اندازه چند تا 7.8 میکرو ثانیه تاخیر در روشن و به اندازه 255 منهای اون چندتا 7.8 میکروثانیه تاخیر در خاموش ماندن نمایشگر ایجاد کنیم ...
                به عبارت بهتر بگم که میخوایم یه PWM مصنوعی درست کنیم یا اینکه PWM نرم افزاری درست کنیم ...
                یه مثال میزنم که بهتر متوجه بشوید ...
                مثلا عدد خوانده شده از ADC توسط حسگر فتوسل 150 است ...
                255-150=105
                پس باید به اندازه 150 ضرب در 7.8 میکروثانیه تاخیر در روشن بودن ایجاد شود که باید کد زیر ایجاد شود
                [code=vb]'============================================ ===========================
                For X = 0 To 255
                Waitus 7
                If X = Photocell Then Exit For
                Next
                '============================================ ===========================[/code]
                به جای کد بالا قبلا 2 میلی ثانیه بود که به جای اون این را نوشتم ...
                و بعد خاموش
                [code=vb] Seg_a = 1
                Seg_b = 1
                Seg_c = 1
                Seg_d = 1
                Seg_e = 1
                Seg_f = 1
                Seg_g = 1[/code]
                و به اندازه 105 ضرب در 7.8 میکروثانیه تاخیر در خاموش ماندن ایجاد گردد
                [code=vb]'============================================ ===========================
                For X = X To 255
                Waitus 7
                Next
                '============================================ ===========================[/code]
                دلیل اینکه 7 میکروثانیه گذاشتم این بود که 0.8 میکروثانیه را گذاشتم برای تاخیر در اجرای دستورات ... البته بیشتر میشه ولی دیگه همین خوبه ...

                خوب حالا رسیدیم به مدار :
                مداری که گذاشتم تحلیلش خیلی سادست ...
                از اونجایی که در مدار ساعت دیجیتالی یک سنسور دمای LM35 و از ولتاژ مرجع داخلی 2.56 ولت به کار رفته باید مدار را طوری طراحی کنیم که از حد 2.56 ولت بیشتر نشود ...
                با یک تقسیم ولتاژ بسیار ساده میتوان به این مدار دست پیدا کرد یعنی دو مقاومت سری شده مساوی (10کیلو اهم)
                حالا طرز کارکرد حسگر فتوسل به این صورت است که در تاریکی مطلق مقاومت آن به بالای 500 کیلو اهم میرسد و در زمان روشنایی کامل مقاومت آن به صفر نزدیکتر میشود ...
                حالا باید این حسگر را با مقاومت 10 کیلوی پایینی موازی کنیم که ولتاژ نقطه وسط بین 0 تا 2.5 ولت تغییر پیدا کند ...
                برای تنظیم کردن آن هم از یک پتانسیومتر استفاده شده که باید آن را به جای مقاومت پایینی 10 کیلو قرار داد ...
                برای تثبیت ولتاژ باید یک خازن را موازی با فتوسل گذاشت تا ناگهان ولتاژ آن تغییر نکند ...
                برای جلوگیری از پردازش در خواندن ADC روی تایمر تنظیم شده هر نیم ثانیه یکبار از روی حسگر خوانده میشود ...
                [code=vb]Ov1:
                Timer1 = 34276
                Toggle Sec_blink
                Incr Temp_clock
                If Temp_clock > 26 Then Temp_clock = 0 ' modate namayesh saat - tarikh ha - dama

                '============================================ ===========================
                X2 = Getadc(7) / 4
                Photocell = 255 - X2
                '============================================ ===========================

                Return[/code]

                دیگه ... فکر نکنم چیزی را جا انداخته باشم ...

                پیروزباد ایرانیان

                برنامه در تاریخ 1393/11/07 ویرایش شد
                [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                معرفی نرم افزار Codewizard PWM
                با من بیشتر آشنا شوید

                دیدگاه


                  #68
                  پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

                  نوشته اصلی توسط hamidelectroniic
                  کد قبلی مشکلش این بود که، در دستورات دیگه اختلال ایجاد میکرد، یعنی وقتی ما دو کلید با هم فشار میدیم هم شرط قبلی که گذاشتم اجرا میشد هم شرط مربوط به دو کلید Min_day_key و Hour_month_key اجرا میشدند. یعنی شرط های زیر هم با شرط قبلی اجرا میشدند :
                  سلام ممنون بابت توضیحات اما فکر کنم کد اول هم به درستی کار کنه ، چرا ؟ چون وقتی مدار به برق زده میشه فقط یک بار دستورات مربوط به تنظیمات اولیه چک میشه ، و بعد از اینکه مدار تو لوپ اصلی بیفته دیگه فشار دادن باهم اون کلید ها هیچ تاثیری نخواهد داشت ...
                  ضمنا کلید های Hour_month_key و Min_day_key فقط و فقط هنگامی که مدار در حالت های منو ( تنظیم ساعت و تاریخ باشه ) عمل میکنن ، و در حالت عادی فشردن تک تک یا با هم آنها تاثیری نداره ...
                  اما از ایدتون واقعا خوشم اومد ، احتمالا بشه با ترکیب کلید ها کار های دیگری هم کرد.

                  نوشته اصلی توسط سامان اسدی
                  دیگه ... فکر نکنم چیزی را جا انداخته باشم ...
                  ممنون دوست عزیز ، دیگه تو PWM صاحب سبک شدی شما :job:
                  - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
                  ارتباط با من : ir02x6
                  طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

                  دیدگاه


                    #69
                    پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

                    نوشته اصلی توسط ir02x6
                    ممنون دوست عزیز ، دیگه تو PWM صاحب سبک شدی شما :job:
                    خواهش میکنم ... اختیار دارید دوست خوبم ...
                    همین الان مدرک PHD در رشته PWM رو بدید برم :mrgreen:
                    راستی نظرتون درباره اینکه همه کلیدها رو از یک کانال ADC بگیریم چیه ؟؟
                    اینطوری

                    آقا یه سوال :
                    کسی برنامه من رو امتحان نکرده ؟؟
                    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                    معرفی نرم افزار Codewizard PWM
                    با من بیشتر آشنا شوید

                    دیدگاه


                      #70
                      پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمس

                      نوشته اصلی توسط ir02x6
                      سلام ممنون بابت توضیحات اما فکر کنم کد اول هم به درستی کار کنه ، چرا ؟ چون وقتی مدار به برق زده میشه فقط یک بار دستورات مربوط به تنظیمات اولیه چک میشه ، و بعد از اینکه مدار تو لوپ اصلی بیفته دیگه فشار دادن باهم اون کلید ها هیچ تاثیری نخواهد داشت ...
                      ضمنا کلید های Hour_month_key و Min_day_key فقط و فقط هنگامی که مدار در حالت های منو ( تنظیم ساعت و تاریخ باشه ) عمل میکنن ، و در حالت عادی فشردن تک تک یا با هم آنها تاثیری نداره ...
                      اما از ایدتون واقعا خوشم اومد ، احتمالا بشه با ترکیب کلید ها کار های دیگری هم کرد.
                      ممنون دوست عزیز ، دیگه تو PWM صاحب سبک شدی شما :job:
                      بله حق با شماست، من برنامه رو دقیق نخوندم و فکر کردم بصورت جدا کار میکنند، اینجوری که این دو کلید بعد زدن کلید منو کار میکنند کد اولی هم کار میکنه
                      اما یک مشکل میتونه به وجود بیاد
                      اینکه بعد وصل کردن تغذیه مدار اگر دو کلید زیاد نگه داریم پشت سر هم شرط اجرا میشه و دو متغییر ساعت و تاریخ پی در پی مساوی با رشته مورد نظر میشه که این کار در LCD باعث نامنظم شدن نوشته رو LCD میشه اما در 7 سگمن تست نکردم و شاید اینجوری نباشه
                      ایده هم مال مهندس سامان اسدی عزیز هستش و ایشون برای یک برنامه کمک کردند و این روش حلقه While بهم گقتند
                      بله میشه کلیدهارو ترکیب کرد، مثلا کار کلید منو و کلید Min_day_key توسط یک کلید انجام بشه، (یعنی کلا 2 کلید داشته باشیم،به عنوان مثال یکی برای منو و Min_day_key و یکی هم برای Hour_month_key) این کار رو تو برنامه ی دیگه ای انجام دادم و شده.
                      و همونطور که مهندس اسدی گفتند میتونیم هردو کلید هم به یک ADC وصل کنیم...
                      اگر کسی اینجوری بهتر میدونه من روش کار کنم و دو کلیده کنم با استفاده از یک ADC

                      دیدگاه


                        #71
                        پاسخ : پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلا

                        نوشته اصلی توسط سامان اسدی
                        راستی نظرتون درباره اینکه همه کلیدها رو از یک کانال ADC بگیریم چیه ؟؟
                        آقا یه سوال :
                        کسی برنامه من رو امتحان نکرده ؟؟
                        اونطور که خیلی عالی میشه ...
                        ان شاءالله شنبه دوباره دست به کار میشم و تغییرات رو تست میکنم .



                        اضافه شده در تاریخ :
                        نوشته اصلی توسط hamidelectroniic
                        و همونطور که مهندس اسدی گفتند میتونیم هردو کلید هم به یک ADC وصل کنیم...
                        اگر کسی اینجوری بهتر میدونه من روش کار کنم و دو کلیده کنم با استفاده از یک ADC
                        ممنون ، البته اگر از ADc استفاده کنیم و همه کلید هارو به یک پین وصل کنیم ، کم کردن تعداد کلید شاید کار تنظیم ساعت و تاریخ رو کمی سخت تر کنه ...
                        - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
                        ارتباط با من : ir02x6
                        طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

                        دیدگاه


                          #72
                          پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میل&

                          نوشته اصلی توسط ir02x6
                          اونطور که خیلی عالی میشه ...
                          ان شاءالله شنبه دوباره دست به کار میشم و تغییرات رو تست میکنم .



                          اضافه شده در تاریخ : ممنون ، البته اگر از ADc استفاده کنیم و همه کلید هارو به یک پین وصل کنیم ، کم کردن تعداد کلید شاید کار تنظیم ساعت و تاریخ رو کمی سخت تر کنه ...
                          خیلی سخت نمیشه
                          کلید ترکیبی منو و Min_day_key : اگر این کلید رو 2 ثانیه نگه داریم و بعد رها کنیم یعنی کلید منو زدیم، و اگر بصورت عادی و لحظه ای کلید رو بزنیم یعنی Min_day_key میزنیم
                          کلید Hour_month_key هم تغییری نمیکنه
                          اگر از adc استفاده کنیم لازم به ترکیب کلید نداریم چون در هر دو صورت یک پورت استفاده میشه، اما اگر کسی بخواد امکانات دیگه اضافه کنه و به کلید احتیاج داشته باشه به صورت ترکیبی بهتره که مدار زیاد شلوغ نشه

                          اضافه شده در تاریخ :
                          راستی وقتی از یک adc استفاده کنیم برنامه قبلی که برای راه اندازی اولیه هست دیگه کار نمیکنه چون در حالت استفاده از یک adc فکر کنم نشه فهمید دو کلید زده شدن
                          پس باید 4 کلید باشند یا اینکه 2 کلید رو ترکیب کنیم بشه 3 کلید
                          حالا من تست میکنم نتیجه رو اینجا میزارم

                          دیدگاه


                            #73
                            پاسخ

                            نوشته اصلی توسط ir02x6
                            اونطور که خیلی عالی میشه ...
                            ان شاءالله شنبه دوباره دست به کار میشم و تغییرات رو تست میکنم .


                            اضافه شده در تاریخ : ممنون ، البته اگر از ADc استفاده کنیم و همه کلید هارو به یک پین وصل کنیم ، کم کردن تعداد کلید شاید کار تنظیم ساعت و تاریخ رو کمی سخت تر کنه ...
                            سخت میشه ؟؟؟
                            میخوای کدش رو بنویسم ؟؟؟
                            خیلی راحته هااااا


                            اضافه شده در تاریخ :
                            چند تا کلید میخوای باشه ؟؟
                            3 تا کلید؟؟
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              #74
                              پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میل

                              خب من کلیدهارو به یک adc وصل کردم

                              7 سگمنت SNF-3494FSR :


                              [hr]

                              7 سگمنت BQ-M362RD-A :


                              برنامه تغییر دادم و قسمت کلیدها مدار مهندس اسدی عزیز گذاشتم
                              همونطور که ایشون گفتند مقاومت 1 درصد استفاده کنید.
                              برنامه رو طوری نوشتم که مقاومتها یک خورده هم پایین باشن مشکلی پیش نمیاد (در حد همون 1 درصد)، فقط قبل استفاده از مقاومتها اونارو اندازه بگیرید و حتما نباید از 10 کیلو بیشتر باشن و از 9.92 کیلو کمتر باشند.

                              فقط دوستان من برنامه رو به دلیل موجود نبودن چند قطعه که سفارش دادم و هنوز نرسیده با 7 سگمنت تست نکردم (با lcd تو پروتئوس تست کردم و درست بود).
                              بعدا وقتی تست کردم و درست کار کرد که هیچ، مشکلی هم داشت همین پست رو ویرایش میکنم و برنامه جدید جایگزین میکنم
                              اگر کسی بتونه برنامه تست کنه ممنون میشم چون میخوام بعد تست کلیدها قسمت فتوسلی که مهندس اسدی قرار دادند هم بهش اضافه کنم
                              اگر کسی وقت نکرد برای تست خودم با رسیدن قطعاتم تست میکنم (فعلا که فکر کنم فردا سفارشمو ارسال میکنند).
                              PCB هم بعد تست طراحی میکنم و میزارم اینجا

                              لینک دانلود شماتیک مدار 7 سگمنت SNF-3494FSR به همراه سورس :
                              کد:
                              http://upir.ir/93dey/SNF-3494FSR_e3548.rar
                              لینک دانلود شماتیک مدار 7 سگمنت BQ-M362RD-A به همراه سورس :
                              کد:
                              http://upir.ir/93dey/BQ-M362RD-A.rar

                              دیدگاه


                                #75
                                پاسخ : [پروژه] ساعت دقیق (باDS1307) + تاریخ (شمسی,میلادی) + دما + سون سگمنت + منبع تغذیه

                                نیازی به دیود زنر نیست
                                مدارتون رو اینطوری ببندید
                                [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                                معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                                معرفی نرم افزار Codewizard PWM
                                با من بیشتر آشنا شوید

                                دیدگاه

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