اطلاعیه

Collapse
No announcement yet.

ذخیره عدد در بسکام؟

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

    #16
    پاسخ : ذخیره عدد در بسکام؟

    حالا هیچ راهی نیست که مدام برای چند تا متغییر هی نگیم reed , write ؟؟؟
    با همون دستور eram ??
    بازم خدا رو شکر ...

    دیدگاه


      #17
      پاسخ : ذخیره عدد در بسکام؟

      نوشته اصلی توسط mosi_reali نمایش پست ها
      حالا هیچ راهی نیست که مدام برای چند تا متغییر هی نگیم reed , write ؟؟؟
      با همون دستور eram ??
      شما یکبار موقع خواندن عدد قبلی سراغ ایپرام میرید و عدد رو در یک متغیر جدید می*ریزید ، اگر نیاز به ذخیره بود هم در انتها بعد از تغییرات عدد ، یکبار دستور نوشتن رو اجرا میکنید و عدد جدید رو در حافظه ذخیره میکنید . نیازی نیست مدام سراغ حافظه برید. اینکار شدیداً عمر حافظه رو کم می*کنه

      دیدگاه


        #18
        پاسخ : ذخیره عدد در بسکام؟

        نوشته اصلی توسط Masood Ashoori نمایش پست ها
        شما یکبار موقع خواندن عدد قبلی سراغ ایپرام میرید و عدد رو در یک متغیر جدید می*ریزید ، اگر نیاز به ذخیره بود هم در انتها بعد از تغییرات عدد ، یکبار دستور نوشتن رو اجرا میکنید و عدد جدید رو در حافظه ذخیره میکنید . نیازی نیست مدام سراغ حافظه برید. اینکار شدیداً عمر حافظه رو کم می*کنه

        [FONT=Yekan]Config Adc = Single , Prescaler = Auto , Reference = Avcc[/FONT]


        Start Adc


        Config Portb = Input
        Config Portd = Output


        Dim A As Long
        Dim B As Long


        Dim H As Byte
        Dim L As Byte


        Cursor Off
        Cls
        Asli:


        Do


        Readeeprom H , 0
        Readeeprom L , 1


        Gosub Daryaft_dama
        Gosub Namayesh_dama
        Gosub Namayesh_l
        Gosub Namayesh_h




        Debounce Pinb.0 , 1 , Afzayesh_h , Sub
        Debounce Pinb.1 , 1 , Kahesh_h , Sub
        Debounce Pinb.2 , 1 , Afzayesh_l , Sub
        Debounce Pinb.3 , 1 , Kahesh_l , Sub
        Debounce Pinb.4 , 1 , Clear_lcd , Sub




        If B => H Then Goto H_bala
        If B <= L Then Goto L_payin
        If B < H Then Goto H_payin
        If B > L Then Goto L_bala


        Loop


        Daryaft_dama:
        A = Getadc(0)
        B = A / 10
        Return


        Namayesh_dama:
        Locate 1 , 1
        Lcd "Temp=" ; B ; " C"
        Return


        Namayesh_l:
        Locate 2 , 1
        Lcd "L=" ; L ; " C"
        Return


        Namayesh_h:
        Locate 2 , 8
        Lcd "H=" ; H ; " C"
        Return


        Afzayesh_h:
        Incr H
        Writeeeprom H , 0
        Waitms 10
        Return


        Kahesh_h:
        Decr H
        Writeeeprom H , 0
        Waitms 10
        Return


        Afzayesh_l:
        Incr L
        Writeeeprom L , 1
        Waitms 10
        Return


        Kahesh_l:
        Decr L
        Writeeeprom L , 1
        Waitms 10
        Return


        H_bala:
        Set Portd.0
        Goto Asli


        H_payin:
        Reset Portd.0
        Goto Asli


        L_bala:
        Reset Portd.0
        Goto Asli


        L_payin:
        Set Portd.0
        Goto Asli


        Clear_lcd:
        Cls
        Return




        [FONT=Yekan]End[/FONT]
        این برنامه به آی سی آسیب میزنه ؟؟
        از eram استفاده نکردم یعنی نشد استفاده کنم !!!
        جدیدترین ویرایش توسط mosi_reali; ۱۴:۵۸ ۱۳۹۷/۰۲/۱۸.
        بازم خدا رو شکر ...

        دیدگاه


          #19
          پاسخ : ذخیره عدد در بسکام؟

          نوشته اصلی توسط mosi_reali نمایش پست ها
          این برنامه به آی سی آسیب میزنه ؟؟
          از eram استفاده نکردم یعنی نشد استفاده کنم !!!
          شدیداً از عمر ایپرام کم می*کنه . مهم نیست دستور eram باشه . در نهایت با حافظه ایپرام کار میکنید . خب بریم سراغ مشکل برنامه ،
          مشکل کد اونجاست که با هربار دیبانس کلید های ورودی که مقادیر رو کم و زیاد می*کنه بلافاصله مقدار جدید در حافظه ذخیره میشه . مثلاً اگر دمای فعلی ۱۰ باشه و هدف من تنظیم دمای ۲۰ باشه ، به ازای هربار زدن دکمه زیاد ، یکبار حافظه نوشته میشه ، یعنی در کل ده بار .
          حالا این مشکل برای هر ۴ مولفه وجود داره یعنی ۴ برابر .
          راه حل اینجاست که شما یک کلید پنجم برای پاک کردن lcd و خروج از حالت تنظیم اعداد گذاشتید ، بیاید ذخیره هر ۴ عدد در حافظه رو در اون تابع قرار بدید و اعداد جدید رو بعد از کاهش ها و افزایش های مکرر یکبار در حافظه ذخیره کنید .

          دیدگاه


            #20
            پاسخ : ذخیره عدد در بسکام؟

            نوشته اصلی توسط Masood Ashoori نمایش پست ها
            شدیداً از عمر ایپرام کم می*کنه . مهم نیست دستور eram باشه . در نهایت با حافظه ایپرام کار میکنید . خب بریم سراغ مشکل برنامه ،
            مشکل کد اونجاست که با هربار دیبانس کلید های ورودی که مقادیر رو کم و زیاد می*کنه بلافاصله مقدار جدید در حافظه ذخیره میشه . مثلاً اگر دمای فعلی ۱۰ باشه و هدف من تنظیم دمای ۲۰ باشه ، به ازای هربار زدن دکمه زیاد ، یکبار حافظه نوشته میشه ، یعنی در کل ده بار .
            حالا این مشکل برای هر ۴ مولفه وجود داره یعنی ۴ برابر .
            راه حل اینجاست که شما یک کلید پنجم برای پاک کردن lcd و خروج از حالت تنظیم اعداد گذاشتید ، بیاید ذخیره هر ۴ عدد در حافظه رو در اون تابع قرار بدید و اعداد جدید رو بعد از کاهش ها و افزایش های مکرر یکبار در حافظه ذخیره کنید .
            خیلی ممنون از راهنماییتون
            راستی راهی هست که بشه از آدرس دادن های مداوم فرار کرد.
            یعنی در این برنامه من دو تا متغییر بیشتر نبود ، اگه یه برنامه ای چندین متغییر داشته باشه اون موقع از ( dim a as eram byte ) میشه استفاده کرد ؟؟؟
            که از شًر آدرس دادن فرار کنیم واضح تر بگم یعنی دیگه برنامه این طوری نباشه :
            Readeeprom H , 0
            Readeeprom L , 1
            Writeeeprom H , 0
            Writeeeprom L , 1
            بازم خدا رو شکر ...

            دیدگاه


              #21
              پاسخ : ذخیره عدد در بسکام؟

              این نوع متغیر که خودتون نوشتید و از نوع eram می*سازید نیازی به آدرس دهی نداره . فقط باید یک متغیر دیگه برای کار با اعداد بسازید . Dim b as byte
              این متغیر باید از همون نوع باشه که eram رو می*سازید ، بعد برای خواندن a رو داخل b بریزید ، تغییرات بدید نمایش بدید هر وقت خواستید ذخیره کنید b رو داخل a بریزید ، به اینصورت مقدار جدید در ایپرام ذخیره میشه

              دیدگاه


                #22
                پاسخ : ذخیره عدد در بسکام؟

                نوشته اصلی توسط Masood Ashoori نمایش پست ها
                این نوع متغیر که خودتون نوشتید و از نوع eram می*سازید نیازی به آدرس دهی نداره . فقط باید یک متغیر دیگه برای کار با اعداد بسازید . Dim b as byte
                این متغیر باید از همون نوع باشه که eram رو می*سازید ، بعد برای خواندن a رو داخل b بریزید ، تغییرات بدید نمایش بدید هر وقت خواستید ذخیره کنید b رو داخل a بریزید ، به اینصورت مقدار جدید در ایپرام ذخیره میشه
                یعنی این شکلی ؟؟؟
                [FONT=Yekan]Config Adc = Single , Prescaler = Auto , Reference = Avcc[/FONT]

                Start Adc


                Config Portb = Input
                Config Portd = Output


                Dim A As Long
                Dim B As Long


                Dim C As Eram Byte
                Dim D As Eram Byte


                Dim H As Byte
                Dim L As Byte


                C = H
                D = L


                Cursor Off


                Cls


                Asli:


                Do


                Gosub Daryaft_dama
                Gosub Namayesh_dama
                Gosub Namayesh_l
                Gosub Namayesh_h


                Debounce Pinb.0 , 1 , Afzayesh_h , Sub
                Debounce Pinb.1 , 1 , Kahesh_h , Sub
                Debounce Pinb.2 , 1 , Afzayesh_l , Sub
                Debounce Pinb.3 , 1 , Kahesh_l , Sub
                Debounce Pinb.4 , 1 , Clear_lcd , Sub


                If B => H Then Goto H_bala
                If B <= L Then Goto L_payin
                If B < H Then Goto H_payin
                If B > L Then Goto L_bala


                Loop


                Daryaft_dama:
                A = Getadc(0)
                B = A / 2
                Return


                Namayesh_dama:
                Locate 1 , 1
                Lcd "Temp=" ; B ; " C"
                Return


                Namayesh_l:
                Locate 2 , 1
                Lcd "L=" ; L ; " C"
                Return


                Namayesh_h:
                Locate 2 , 8
                Lcd "H=" ; H ; " C"
                Return


                Afzayesh_h:
                Incr H
                H = C
                Return


                Kahesh_h:
                Decr H
                H = C
                Return


                Afzayesh_l:
                Incr L
                L = D
                Return


                Kahesh_l:
                Decr L
                L = D
                Return


                H_bala:
                Set Portd.0
                Goto Asli


                H_payin:
                Reset Portd.0
                Goto Asli


                L_bala:
                Reset Portd.0
                Goto Asli


                L_payin:
                Set Portd.0
                Goto Asli


                Clear_lcd:
                Cls
                Return


                [FONT=Yekan]End[/FONT]
                بازم خدا رو شکر ...

                دیدگاه


                  #23
                  پاسخ : ذخیره عدد در بسکام؟

                  این که همون شد ، ذخیره در eram رو بذارید توی حلقه clear_lcd . در باقی حلقه ها با مقادیر H و L کار کنید ، مقدار دهی هم از راست به چپ هست ، برعکس نوشتید ، یعنی بعد از تعریف متغیر ها باید بنویسید H=C و L=D

                  بعد توی حلقه clear_lcd این دوتا رو در حافظه ذخیره کنید به اینصورت C=H و D=L
                  در بقیه قسمت ها این مقدار دهی رو حذف کنید ،

                  دیدگاه


                    #24
                    پاسخ : ذخیره عدد در بسکام؟

                    نوشته اصلی توسط Masood Ashoori نمایش پست ها
                    این که همون شد ، ذخیره در eram رو بذارید توی حلقه clear_lcd . در باقی حلقه ها با مقادیر H و L کار کنید ، مقدار دهی هم از راست به چپ هست ، برعکس نوشتید ، یعنی بعد از تعریف متغیر ها باید بنویسید H=C و L=D

                    بعد توی حلقه clear_lcd این دوتا رو در حافظه ذخیره کنید به اینصورت C=H و D=L
                    در بقیه قسمت ها این مقدار دهی رو حذف کنید ،
                    ممنون بابت راهنماییتون
                    این تغییرات رو اعمال کردم با پروتیوس هم که تست میکنم جواب میده .
                    راستی نمیخوام جوری باشه که با رفتن به زیر برنامه clear_lcd اعداد ذخیره بشن ( در واقع با فشار دادن کلید ذخیره بشن ) بلکه میخوام به صورت لحظه ای اطلاعات ذخیره بشن .
                    کاربری که میخواد از این برنامه استفاده کنه نمیخواد همش به دمای بالا و پایین دست بزنه یه بار بیشتر تنظیم نمیکنه رفت تا فصل دیگه ، با این شرایط باز به حافظه فشار میاد ؟؟؟ ( چون دیگه داخل زیر برنامه ها نمیره که هی اطلاعات توو حافظه ریخته یا خونده بشن )
                    یه سوال دیگه هم داشتم اینکه تو شرایط عادی portD.0 مدام ریست میشه این به آی سی فشار میاره ؟؟؟
                    با تشکر
                    [FONT=Yekan]Config Adc = Single , Prescaler = Auto , Reference = Avcc[/FONT]

                    Start Adc

                    Config Portb = Input
                    Config Portd = Output

                    Dim A As Long
                    Dim B As Long

                    Dim C As Eram Byte
                    Dim D As Eram Byte

                    Dim H As Byte
                    Dim L As Byte

                    H = C
                    L = D

                    Cursor Off

                    Cls

                    Asli:

                    Do

                    Gosub Daryaft_dama
                    Gosub Namayesh_dama
                    Gosub Namayesh_l
                    Gosub Namayesh_h

                    Debounce Pinb.0 , 1 , Afzayesh_h , Sub
                    Debounce Pinb.1 , 1 , Kahesh_h , Sub
                    Debounce Pinb.2 , 1 , Afzayesh_l , Sub
                    Debounce Pinb.3 , 1 , Kahesh_l , Sub
                    Debounce Pinb.4 , 1 , Clear_lcd , Sub

                    If B => H Then Goto H_bala
                    If B <= L Then Goto L_payin
                    If B < H Then Goto H_payin
                    If B > L Then Goto L_bala

                    Loop

                    Daryaft_dama:
                    A = Getadc(0)
                    B = A / 2
                    Return

                    Namayesh_dama:
                    Locate 1 , 1
                    Lcd "Temp=" ; B ; " C"
                    Return

                    Namayesh_l:
                    Locate 2 , 1
                    Lcd "L=" ; L ; " C"
                    Return

                    Namayesh_h:
                    Locate 2 , 8
                    Lcd "H=" ; H ; " C"
                    Return

                    Afzayesh_h:
                    Incr H
                    C = H
                    Waitms 10
                    Return

                    Kahesh_h:
                    Decr H
                    C = H
                    Waitms 10
                    Return

                    Afzayesh_l:
                    Incr L
                    D = L
                    Waitms 10
                    Return

                    Kahesh_l:
                    Decr L
                    D = L
                    Waitms 10
                    Return

                    H_bala:
                    Set Portd.0
                    Goto Asli

                    H_payin:
                    Reset Portd.0
                    Goto Asli

                    L_bala:
                    Reset Portd.0
                    Goto Asli

                    L_payin:
                    Set Portd.0
                    Goto Asli

                    Clear_lcd:
                    Cls
                    Return

                    [FONT=Yekan]End[/FONT]
                    بازم خدا رو شکر ...

                    دیدگاه


                      #25
                      پاسخ : ذخیره عدد در بسکام؟

                      یکبار پست شماره ۱۹ مشکل این روش رو توضیح دادم .مجدد مطالعه کنید . در مورد ریست هم مشکلی پیش نمیاد .

                      دیدگاه


                        #26
                        پاسخ : ذخیره عدد در بسکام؟

                        نوشته اصلی توسط Masood Ashoori نمایش پست ها
                        یکبار پست شماره ۱۹ مشکل این روش رو توضیح دادم .مجدد مطالعه کنید . در مورد ریست هم مشکلی پیش نمیاد .
                        یعنی هیچ راهی نیست که انقدر آماتور گونه نشه .
                        راهی هست که به میکرو فرمان بدیم مثلا هر 24 ساعت فلان کار رو کن ( کار ذخیره کردن رو انجام بده ) ؟؟
                        بازم خدا رو شکر ...

                        دیدگاه


                          #27
                          پاسخ : ذخیره عدد در بسکام؟

                          نوشته اصلی توسط mosi_reali نمایش پست ها
                          یعنی هیچ راهی نیست که انقدر آماتور گونه نشه .
                          راهی هست که به میکرو فرمان بدیم مثلا هر 24 ساعت فلان کار رو کن ( کار ذخیره کردن رو انجام بده ) ؟؟
                          شدن که میشه ، فرض کنید قبل از رسیدن زمان مقرر برق قطع شد ، هیچ عددی ذخیره نمیشه ، یا برعکس ، همیشه برق وصل بود و هر ۲۴ ساعت از عمر حافظه کاسته میشه ، در حالی که تغییری در عدد ها ایجاد نشده ، شاید عمر ایپرام زیاد باشه ، اما همیشه به روشی فکر کنید که بهینه باشه .
                          پیشنهاد من استفاده از یک دکمه اضافه برای ذخیره مقادیر هست اگر نمیخواید از تابع clear استفاده کنید

                          البته من کاربرد تابع clear رو متوجه نمیشم ، صفحه خالی میشه ؟ چه فایده داره ؟ بیاید دکمه clear رو به اینصورت تنظیم کنید ، ذخیره اعداد در ایپرام ، نمایش لغت SAVED و بعد نمایش دمای فعلی سنسور و مقادیر حد اقل و حداکثر روی صفحه ، فرضا یک حالت پیشفرض برای نمایشگر .
                          جدیدترین ویرایش توسط Masood Ashoori; ۲۰:۳۲ ۱۳۹۷/۰۲/۲۲.

                          دیدگاه


                            #28
                            پاسخ : ذخیره عدد در بسکام؟

                            نوشته اصلی توسط Masood Ashoori نمایش پست ها
                            شدن که میشه ، فرض کنید قبل از رسیدن زمان مقرر برق قطع شد ، هیچ عددی ذخیره نمیشه ، یا برعکس ، همیشه برق وصل بود و هر ۲۴ ساعت از عمر حافظه کاسته میشه ، در حالی که تغییری در عدد ها ایجاد نشده ، شاید عمر ایپرام زیاد باشه ، اما همیشه به روشی فکر کنید که بهینه باشه .
                            پیشنهاد من استفاده از یک دکمه اضافه برای ذخیره مقادیر هست اگر نمیخواید از تابع clear استفاده کنید

                            البته من کاربرد تابع clear رو متوجه نمیشم ، صفحه خالی میشه ؟ چه فایده داره ؟ بیاید دکمه clear رو به اینصورت تنظیم کنید ، ذخیره اعداد در ایپرام ، نمایش لغت SAVED و بعد نمایش دمای فعلی سنسور و مقادیر حد اقل و حداکثر روی صفحه ، فرضا یک حالت پیشفرض برای نمایشگر .
                            تابع clear برای اینه که اگه عدد رو صفحه دو رقمی باشه بعد تک رقمی بشه یه حرف C زیاد میمونه که اون رو پاک کنه .
                            راستی اینا توو یخچال یا فریزر که برق میره میاد باز ثابت میمونه چیکار میکنن ؟؟؟
                            عمر حافظه چند ساله توو اینا مگه ؟؟ یا چه کلکه دیگه ای میزنن
                            راستی خوندن اطلاعات از حافظه هم عمر حافظه رو کم میکنه یا نه فقط نوشتن ؟؟
                            اگه توو یه حلقه با 10 میلی ثانیه وقفه Readeeprom H ,0 قرار بگیره عمر حافظه کم میشه یا نه نوشتن عمر رو کم میکنه ؟؟
                            با تشکر
                            بازم خدا رو شکر ...

                            دیدگاه


                              #29
                              پاسخ : ذخیره عدد در بسکام؟

                              اصلا فکر قراردادن هر دستور مرتبط با eeprom رو در حلقه از ذهن بیرون کنید . مادامی که چیپ آسیب نبینه اطلاعات پایدار هست ، از طرفی ، نویز تغذیه و شوک و عوامل محیطی می*تونه حافظه رو مخدوش کنه .
                              جدیدترین ویرایش توسط Masood Ashoori; ۱۵:۳۷ ۱۳۹۷/۰۲/۲۳.

                              دیدگاه


                                #30
                                پاسخ : ذخیره عدد در بسکام؟

                                نوشته اصلی توسط Masood Ashoori نمایش پست ها
                                اصلا فکر قراردادن هر دستور مرتبط با eeprom رو در حلقه از ذهن بیرون کنید . مادامی که چیپ آسیب نبینه اطلاعات پایدار هست ، از طرفی ، نویز تغذیه و شوک و عوامل محیطی می*تونه حافظه رو مخدوش کنه .
                                من یه مدار برد فریزر دیدم از آی سی Atmega تووش استفاده شده بود .
                                میخواستم بدونم اینا از چه دستوراتی استفاده میکنن که آی سی آسیب نمیبینه .
                                بازم خدا رو شکر ...

                                دیدگاه

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