اطلاعیه

Collapse
No announcement yet.

دیمر دیجیتال با نمایشگر

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

    دیمر دیجیتال با نمایشگر

    با درود خدمت دوستان
    طرح یه دیمر دیجیتال رو توی یه سایت خارجی پیدا کردم. البته دقیقا همین طرح رو ، بدون کوچکترین تغییری توی یه سایت داخلی هم ، دیدم. چون نمیدونم کدومشون اول طراحیش کردند ، بخاطر حمایت هموطنمون ، اون سایت داخلی رو مرجع قرار میدم.



    کد:
    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Config Pinb.1 = Output    ' Gate Triac
    Config Pind.7 = Input     ' Key Up
    Config Pinb.0 = Input     ' Key Dn
    
    Config Int0 = Rising
    On Int0 Int0_int
    
    Enable Interrupts
    Enable Int0
    
    Dim E As Eram Byte
    Dim B As Byte
    Dim D As Byte
    
    If E > 9 Then E = 9
    B = E
    D = 0
    Set Portb.1
    
    Do
      If Pind.7 = 0 Then
        If B > 1 Then Decr B
        Waitms 10
        E = B
      End If
    
      If Pinb.0 = 0 Then
        If B < 9 Then Incr B
        Waitms 10
        E = B
      End If
    Loop
    End 'end program
    
    Int0_int:
    
    Set Portb.1
    For D = 0 To B
      Waitus 200 
    Next D
    Reset Portb.1
     
    Return
    من این مدار رو بستم ، بخوبی کار میکنه. فقط دوتا تغییر کوچولو تو متن برنامش اعمال کردم که کارش بهتر شد. برای کامل تر شدن طرح باید دوتا قسمت اساسی بهش اضافه بشه.
    1- کلید روشن و خاموش
    2- اضافه کردن یه 7segment برای نشان دادن درصد هدایت موج

    طرز کار این برنامه اینطوریه که بعد از هر بار استفاده از کلیدها ، مقدار جدید در eeprom ذخیره میشه و با قطع شدن برق نیاز به تنظیم مجدد نیست. میخوام با اضافه کردن یه کلید ، بدون اینکه نیاز به قطع برق کل مدار باشه ، فقط خروجی قطع بشه و با فشار مجدد اون کلید ، دوباره خروجی فعال بشه و همون مقدار قبل از خاموش شدن رو داشته باشه. یعنی با خاموش و روشن شدن ریست نشه.

    برای نمایشگر هم ، حتما از 7segment استفاده کنیم تا از دور هم قابل خواندن باشه.
    این برنامه توی 10 پله توان رو کنترل میکنه. اگه از یه 7segment یک رقمی استفاده بکنیم با حساب کردن عدد صفر ، میتونیم با همین یک رقم هم 10 حالت خروجی رو نشون بدیم. البته resolution با 10 پله خیلی بالا نیست ولی خوب کار رو انجام میده. من با تغییری که توی برنامه دادم ، با 100 پله توان رو کنترل میکنم ، که خیلی بهتر شده و تغییرات بصورت کاملا هموار انجام میشه. ولی در اینصورت باید با 7segment دورقمی میزان توان رو نشون بدیم. این دیگه بستگی به نظر دوستان داره.
    لطفا شما فقط تغییرات رو بنویسید ، برنامه جدیدتون رو خودم عملا تستش میکنم و نتیجه رو اعلام میکنم.
    با سپاس

    #2
    پاسخ : دیمر دیجیتال با نمایشگر

    برای اضافه کردن 7segment پورت b رو خلوت کردم و قطعات اتصالی رو به پورت d انتقال دادم.

    "عکس از هاست پلود شده، حذف شده"

    کدهای مربوط به اعداد 0 تا 9 رو هم به شکل زیر نوشتم.

    کد:
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim F As Byte
    Dim G As Byte
    Dim H As Byte
    Dim I As Byte
    Dim J As Byte
    Dim K As Byte
    B = &B00111111
    C = &B00000110
    D = &B01011011
    E = &B01001111
    F = &B01100110
    G = &B01101101
    H = &B01111101
    I = &B00000111
    J = &B01111111
    K = &B01101111
    حالا موندم این کدهای مربوط به اعداد رو در کجای برنامه اصلی استفاده کنم تا در 7segment اعدادی متناظر با مقدار توان خروجی داشته باشم.
    چون توی برنامه برای هر پله محل مشخصی نیست. هر پله با دریافت پالس از INTO شروع میشه و با تعدادی تاخیرهای 200 میکرو ثانیه ، تعیین میشه.
    چجوری این اعداد خودم رو با اون پله ها مچ کنم؟
    با سپاس

    دیدگاه


      #3
      پاسخ : دیمر دیجیتال با نمایشگر

      سلام دوست عزیز
      یه سوال فنی دارم
      زمین های مدار رو جدا کردی یا همه ی زمین ها را به هم متصل کردی؟ (زمین مدار ZERRo CROSSING و زمین مدار میکرو)
      برای تغزیه ی میکرو از چی استفاده کردی؟ میخوام با هزینه ی کم برق دیسی میکرو را از بعد از پل دیود بگیرم؛ امکانش هست؟
      Reveng will surely come... Your hard time are ahead
      // - - - - - - - - - -
      برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
      // - - - - - - - - - -
      اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
      // - - - - - - - - - -

      دیدگاه


        #4
        پاسخ : دیمر دیجیتال با نمایشگر

        از دستور SELECT CASE استفاده کن .من از کد زیر استفاده میکنم

        Config Porta = Output >> تعیین پورت A به عنوان خروجی
        Dim A As Byte >> تعیین متغیر A

        Select Case A


        Case 0 :
        B = &B00111111
        Case 1 :
        B = &B00000110
        Case 2 :
        B = &B01011011
        Case 3 :
        B = &B01001111
        Case 4 :
        B = &B01100110
        Case 5 :
        B = &B01101101
        Case 6 :
        B = &B01111101
        Case 7 :
        B = &B00000111
        Case 8 :
        B = &B01111111
        Case 9 :
        B = &B01101111

        End Select





        دیدگاه


          #5
          پاسخ : دیمر دیجیتال با نمایشگر

          نوشته اصلی توسط سعید خیری
          یه سوال فنی دارم
          زمین های مدار رو جدا کردی یا همه ی زمین ها را به هم متصل کردی؟ (زمین مدار ZERRo CROSSING و زمین مدار میکرو)
          زمینهای این دو قسمت از مدار باید از هم کاملا مجزا باشند.

          برای تغزیه ی میکرو از چی استفاده کردی؟
          من هم قبلا به این موضوع فکر کرده بودم.
          برای تغذیه میکرو از مدار تغذیه خازنی استفاده کردم.

          میخوام با هزینه ی کم برق دیسی میکرو را از بعد از پل دیود بگیرم؛ امکانش هست؟
          از اون نقطه ای که فرمودید تقریبا امکانش نیست.
          چون توی اون نقطه باید موج سینوسی 100Hz بدون دستکاری داشته باشیم تا لحظه گذر از صفر درست تشخیص داده بشه.
          از اون نقطه ، فقط میشه با مقاومت و تقسیم ولتاژ مقاومتی استفاده کنی که در اون صورت ، تلفات بسیار بالا و مقرون به صرفه نخواهد بود.
          من یه تغذیه خازنی مستقل به ورودی اضافه کردم و میکرو رو با اون تغذیه کردم.

          دیدگاه


            #6
            پاسخ : دیمر دیجیتال با نمایشگر

            نوشته اصلی توسط Majid-BN
            از دستور SELECT CASE استفاده کن .من از کد زیر استفاده میکنم

            Config Porta = Output >> تعیین پورت A به عنوان خروجی
            مگه پورتی هم با نام A داریم؟ :surprised:
            البته همونطور که ار پستهای اولم معلومه ، من تازه دارم سعی میکنم ، برنامه نویسی رو یاد بگیرم. و امکان داره بعضی از استنباط هام درست نباشه. در اینصورت به دوستان با تجربه ، بر نخوره لطفا! :biggrin:

            Case 0 :
            B = &B00111111
            منظور شما از = B چیه؟
            آیا منظور همون پورت B هست؟
            اگه جواب مثبت باشه ، ولی قبلش که این پورت انتخاب نشده!! (پورت A فعال شده بوده)

            دیدگاه


              #7
              پاسخ : دیمر دیجیتال با نمایشگر

              شرمنده،حواسم نبود با mega8 طراحی شده؛چون سون سگمنت به پورت B وصل شده اصلاح بفرمایید، B هم متغیریه که اول برنامه تعریف میکنی، بعد از اجرای SELECT CASE مقدار متناسب با A داخل B قرار میگیره و در آخر B به پورت B ریخته میشه، میتونی بجای اینکه مقدار باینری رو به B منتقل کنی و در آخر بریزی داخل پورت، اون مقدار مورد نظر رو مستقیم بریزی داخل پورت یعنی بجای B = &B00111111 از PORTB = &B00111111 استفاده کنی

              دیدگاه


                #8
                پاسخ : دیمر دیجیتال با نمایشگر

                مرسی آقا Majid-BN
                دارم کم کم بیسیک رو یاد میگیرم. ولی پیشرفتم خیلی کنده! :sad:
                چند روزه ، بشدت داشتم مطالعه میکردم. برای اضافه کردن نمایشگر برای عدد 0 تا 9 اوایل که چیزی حالیم نبود از دستور if استفاده کردم. به شکل زیر
                If A = 0 Then Portb = &H3F
                If A = 1 Then Portb = &H06
                If A = 2 Then Portb = &H5B
                If A = 3 Then Portb = &H4F
                If A = 4 Then Portb = &H66
                If A = 5 Then Portb = &H6D
                If A = 6 Then Portb = &H7D
                If A = 7 Then Portb = &H07
                If A = 8 Then Portb = &H7F
                If A = 9 Then Portb = &H6F
                البته در عمل کار کرد. ولی الان میبینم هر کسی با دیدنش میفهمه ، این روش از یه فرد آماتور بوده!
                بعد با مطالعه بیشتر متوجه شدم ، روش اصولی اینکار ، دستور جدول lookup میباشد. با چقدر تمرین خفن ، موفق شدم با اون دستور هم ، انجامش بدم.
                دیشب هم با دستور SELECT CASE پیشنهادی شما ، تمرین کردم ، که در نهایت اون هم با موفقیت اجرا شد.

                حالا میرسیم به اصل قضیه ، برای بالا بردن resolution فاصله بین حداقل و حداکثر رو 10 برابر کردم. حالا 100 شماره داریم که میخوام با 7segment دوتایی به روش multiplex این اعداد رو نشون بدم.
                با اصول این نمایشگرها آشنا هستم. حالا سوالی که دارم اینه ، با دستور if اگه بخوام اجرا کنم ، باید برای هر 100 رقم ، یه دستور مجزا بنویسم. که البته انتخاب این روش ، دور از عقل خواهد بود. دستور SELECT CASE هم فکر میکنم همونطور باشه. یعنی برای هر رقم ، حداقل یک خط بصورت دستی باید نوشته بشه. در تعداد ارقام کم ، عملی هست ، ولی برای 100 تا مناسب نیست. آیا من این دستور رو درست درک کرده ام یا نوع دیگر استفاده ازش هم ، وجود داره؟
                اگه گفته هام تا اینجا درست باشه ، در اینصورت راه ایده آل همون جدول lookup خواهد بود.
                اگه تایید می کنید ، برم با اون دستور کار کنم.
                چون حجم کار بالا خواهد بود ، بدلیل دو رقمی بودن ، اون هم با روش multiplex بعد از پایان کار یه وقت نیایید بگید ، یه دستور ساده تر هم وجود داشته ها !!!

                دیدگاه


                  #9
                  پاسخ : دیمر دیجیتال با نمایشگر

                  برای 100 رقم به 100 تا دستور select case یا if نیازی نیست، شما ابتدا باید مقدار مربوط به متغیر مورد نظر رو به یکان و دهگان و صدگان تبدیل کنی و هر کدوم رو داخل یه متغیر قرار بدی و در آخر هر متغیر رو به ترتیب نشون بدی،اگر از روش مالتی پلکس استفاده کنی که بهتره، به یه نمونه اشاره میکنم :

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

                  Dim A As Byte

                  Dim B As Byte

                  Dim C As Byte

                  Dim D As Byte




                  Dim Yekan As Byte

                  Dim Dahgan As Byte

                  Dim Sadgan As Byte


                  Config Portb = Output

                  Config Portc = Output

                  Sadgan_dig Alias Portc.0

                  Dahgan_dig Alias Portc.1

                  Yekan_dig Alias Portc.2




                  Do



                  Incr C

                  If C = 101 Then

                  C = 0

                  End If



                  ' tajziyeye moteghayere C be YEKAN ,DAHGAN va SADGAN

                  Sadgan = C / 100
                  D = C Mod 100
                  Dahgan = D / 10
                  Yekan = D Mod 10

                  '------------------namayeshe adade sadgan------------------------------

                  A = Sadgan 'gharra dadane sadgan dakhele moteghayere A baraye peyda kardane meghdare ghabele namayesh

                  Gosub Find_digit 'raftan be zir revale peyda kardane meghdare monasebe baraye namayesh

                  Portb = B

                  Set Sadgan_dig 'entekhabe anode 7segmente sadgan

                  Waitus 800 'in meghdar takhir baraye namayesh behineye adad va nadashtane paresh mibashad( meghdare tajrobi )

                  Reset Sadgan_dig


                  '------------------namayeshe adade dahgan------------------------------

                  A = Dahgan 'gharra dadane sadgan dakhele moteghayere A baraye peyda kardane meghdare ghabele namayesh

                  Gosub Find_digit 'raftan be zir revale peyda kardane meghdare monasebe baraye namayesh

                  Portb = B

                  Set Dahgan_dig 'entekhabe anode 7segmente dahgan

                  Waitus 800 'in meghdar takhir baraye namayesh behineye adad va nadashtane paresh mibashad( meghdare tajrobi )

                  Reset Dahgan_dig

                  '------------------namayeshe adade yekan ------------------------------

                  A = Yekan 'gharra dadane sadgan dakhele moteghayere A baraye peyda kardane meghdare ghabele namayesh

                  Gosub Find_digit 'raftan be zir revale peyda kardane meghdare monasebe baraye namayesh

                  Portb = B

                  Set Yekan_dig 'entekhabe anode 7segmente yekan

                  Waitus 800 'in meghdar takhir baraye namayesh behineye adad va nadashtane paresh mibashad( meghdare tajrobi )

                  Reset Yekan_dig



                  Waitms 500


                  Loop






                  Find_digit:


                  Select Case A


                  Case 0 :
                  B = &B00111111
                  Case 1 :
                  B = &B00000110
                  Case 2 :
                  B = &B01011011
                  Case 3 :
                  B = &B01001111
                  Case 4 :
                  B = &B01100110
                  Case 5 :
                  B = &B01101101
                  Case 6 :
                  B = &B01111101
                  Case 7 :
                  B = &B00000111
                  Case 8 :
                  B = &B01111111
                  Case 9 :
                  B = &B01101111

                  End Select

                  Return
















                  این برنامه خیلی حرفه ای نیست، فقط برای توضیح گفته هام بود

                  دیدگاه


                    #10
                    پاسخ : دیمر دیجیتال با نمایشگر

                    بسار ممنونم
                    منم بورد مدار رو کشیدم و چاپ کردم و تغذیه ها رو جدا گذاشتم؛ به میکرو یک ال سی دی و یک کیبورد وصل کردم ؛ اما الان میترسم که بزنم به برق!
                    تغذیه ی دی سی را از یک آداپتور جدا گرفتم(فعلا)
                    اما این مدار تغذیه خازنی قضیه ش چیه؟ :angry:
                    Reveng will surely come... Your hard time are ahead
                    // - - - - - - - - - -
                    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                    // - - - - - - - - - -
                    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                    // - - - - - - - - - -

                    دیدگاه


                      #11
                      پاسخ : دیمر دیجیتال با نمایشگر

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

                      دیدگاه


                        #12
                        پاسخ : دیمر دیجیتال با نمایشگر

                        اگه کارکرد مطمئن مد نظرتون هست از تغذیه سوئیچینگ آماده استفاده کنید ( آداپتور موبایل مناسبه) چون تغذیه خازنی تلفات بالا و عمر کم داره و مدارتون هم نویزپذیر میشه

                        دیدگاه


                          #13
                          پاسخ : دیمر دیجیتال با نمایشگر

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

                          اما این مدار نباید اینگونه باشه ؛ باید نور لامپ باقی بمونه تا توی سیکل بعدی دوباره گیت ترایاک تحریک بشه
                          به نظر شما اشکال از کجاست؟ تمامی جزئیات مدار کامله و هیچ کم و کاستی نداره
                          اینم سورس:

                          کد:
                           $regfile = "m8def.dat"
                          $crystal = 10000000
                          
                          Config Pind.6 = Output                   ' Gate Triac 1
                          Config Pind.7 = Output                   ' Gate Triac 2
                          Config Lcd = 16 * 2
                          Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , _
                          Db7 = Portc.5 , Rs = Portd.1 , E = Portd.0
                          Cursor Off
                          Config Kbd = Portb , Debounce = 10
                          
                          
                          Config Int0 = Rising
                          On Int0 Int0_int                      ' Initialise the INT0 Interrupt
                          
                          Enable Interrupts
                          Enable Int0
                          
                          
                          Dim Set_key As Byte
                          Dim System_mod As Byte
                          Dim Key As Byte
                          Dim E As Eram Byte
                          Dim B As Byte , I As Byte
                          Dim D As Byte , _min As Byte , _sec As Byte
                          Dim Sum As Byte
                          
                          If E > 9 Then E = 9
                          E = B
                          D = 0                            '
                          Set Portd.7
                          
                          
                          
                          
                          Do
                          
                          Home1:
                          Key = Getkbd()
                          Gosub Key_convert
                          If Key > 15 Then Goto Home1
                          
                          B = Key
                          E = B
                          Home
                          Lcd B
                          
                           Loop
                          
                           End
                          
                           Int0_int:
                          
                          Set Portd.7
                          For D = 0 To B
                          
                          Waitus 200
                          
                          
                          Next D
                          Reset Portd.7
                           D = 0
                          Return
                          
                                                     '
                            Key_convert:
                            Select Case Key
                          
                            Case 0:
                            Key = 10
                            Case 1:
                            Key = 0
                            Case 2:
                            Key = 11
                            Case 4:
                            Key = 7
                            Case 5:
                            Key = 8
                            Case 6:
                            Key = 9
                            Case 7:
                            Key = 7
                            Case 8:
                            Key = 1
                            Case 9:
                            Key = 2
                            Case 10:
                            Key = 3
                            Case 12:
                            Key = 4
                            Case 13:
                            Key = 5
                            Case 14:
                            Key = 6
                            End Select
                          Return
                          Reveng will surely come... Your hard time are ahead
                          // - - - - - - - - - -
                          برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                          // - - - - - - - - - -
                          اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                          // - - - - - - - - - -

                          دیدگاه


                            #14
                            پاسخ : دیمر دیجیتال با نمایشگر

                            منظورم رو که متوجه شدید چیه؟
                            من با کیبورد عدد میدم و اعداد هرچه زیاد تر باشه زیر برنامه ی وقفه بیشتر طول میکشه و در نتیجه زاویه ی آتش ترایاک بیشتر میشه
                            بنابراین لامپ در یک سیکل کمر روشن میمونه؛ حالا بجای اینکه لامپ نور کمتری داشته باشه چشمک میزنه :angry:
                            راه چاره چیه؟
                            Reveng will surely come... Your hard time are ahead
                            // - - - - - - - - - -
                            برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                            // - - - - - - - - - -
                            اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                            // - - - - - - - - - -

                            دیدگاه


                              #15
                              پاسخ : دیمر دیجیتال با نمایشگر

                              هدف من از بستن این مدار اینه که در مدت زمانی که توسط کیبورد تعیین میشه ؛ نور لامپ از مقدار ماکسیمم به مقدار مینیمم برسه و در نهایت خاموش بشه
                              Reveng will surely come... Your hard time are ahead
                              // - - - - - - - - - -
                              برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                              // - - - - - - - - - -
                              اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                              // - - - - - - - - - -

                              دیدگاه

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