اطلاعیه

Collapse
No announcement yet.

متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

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

    متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

    با سلام
    دوستان چطوری میشه با میکرو LCD رو تست کرد که آیا هنگ کرده یا نه.
    اصلاً تو بسکام چطوری میشه از LCD خوند.دستوری داره واسه این کار؟
    در ضمن LCD که دارم باهاش کار میکنم 20*4 هستش.
    با تشکر
    یا حق
    گیرم گلاب ناب شما اصل قمصر است/اما چه سود، حاصل گلآ‌های پرپر است!-از آن زمان که آیینهآ‌گردان شب شُدید*آیینه دل از دَم دوران مکدر است-وقتی بهار، وصله ناجور فصلآ‌هاست*وقتی تبر، مدافع حق صنوبر است-وقتی به دادگاه عدالت، طناب دار*بر صدر میآ‌نشیند و قاضی و داور است-از من مخواه شعرِ تر، ای بیآ‌خبر ز درد!*شعری که خون از آن نچکد ننگ دفتر است!-ای از تبار هرچه سیاهی، سرشتآ‌تان*رنگ جهنم است تمام بهشتآ‌تان
    "گزیده ابیاتی چند از بیداد خراسانی"

    #2
    پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

    سلام دوست عزیز من هم تو کدویژن یه همچین مشکلی دارم و نتونستم اون رو حل کنم اگه کسی در مورد کدویژن هم می دونه راهنمایی کنه لطفا

    دیدگاه


      #3
      پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

      سلام
      تنها راهی که به ذهن من رسید این هست که lcd رو به دوتا میکرو وصل کنی و بعد برای هر میکرو جدا گانه lcd رو فعال(enable) کنی و دیتا رو بهش بدی مثلا موقع ای به نظرت میاد هنگ کرده میکرو اول رو desable و میکرو دوم رو enable کن و دیتا به lcd بده
      انجام پروژه هاي برنامه نويسي اندرويد
      [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
      http://cafebazaar.ir/app/?id=com.atxdroid

      دیدگاه


        #4
        پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

        گاهی اوقات حتی با خاموش کردن هم مشکل برطرف نمی شود و باید چند بار اینکار رو انجام داد

        دیدگاه


          #5
          پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

          فکر می کنم یه بار پایه E رو تغییر وضعیت بدین درست بشه.( البته اگه ایراد از LCD باشه)

          دیدگاه


            #6
            پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

            با سلام
            و تشکر از توجه دوستان
            محسن جان خودم که میفهمم که lcd هنگ کرده.مشکل من اینه که میکرو باید بفهمه که lcd هنگ کرده.
            در ضمن من تو مدارم از 2 تا avr استفاده کردم و اضافه کردن یه میکرو دیگه فکر نکنم چیز جالبی در بیاد.
            lcd من وقتی نویز میفته تو مدار هنگ میکنه وگر نه مشکل دیگه ای نداره.
            ...
            گیرم گلاب ناب شما اصل قمصر است/اما چه سود، حاصل گلآ‌های پرپر است!-از آن زمان که آیینهآ‌گردان شب شُدید*آیینه دل از دَم دوران مکدر است-وقتی بهار، وصله ناجور فصلآ‌هاست*وقتی تبر، مدافع حق صنوبر است-وقتی به دادگاه عدالت، طناب دار*بر صدر میآ‌نشیند و قاضی و داور است-از من مخواه شعرِ تر، ای بیآ‌خبر ز درد!*شعری که خون از آن نچکد ننگ دفتر است!-ای از تبار هرچه سیاهی، سرشتآ‌تان*رنگ جهنم است تمام بهشتآ‌تان
            "گزیده ابیاتی چند از بیداد خراسانی"

            دیدگاه


              #7
              پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

              واقعا اگه ما یه ذره از برنامه lcd و اینکه چه جوری اطلاعات رو لچ میکنه خبر داشته باشیم همچین سوالی رو مطرح میکنیم؟
              مشکل اصلی ما اینه که اصلا از lcd سردر نمی یاریم و فقط یاد گرفتیم با lcd با تابع lcd_puts() , ... کار کنیم
              برای توضیح بیشتر من تابع اصلی lcd رو از کتابخونه lcd.h براتون میذارم

              void _lcd_ready(void)
              {
              #asm
              in r26,__lcd_direction
              andi r26,0xf ;set as input
              out __lcd_direction,r26
              sbi __lcd_port,__lcd_rd ;RD=1
              cbi __lcd_port,__lcd_rs ;RS=0
              __lcd_busy:
              rcall __lcd_delay
              sbi __lcd_port,__lcd_enable ;EN=1
              rcall __lcd_delay
              in r26,__lcd_pin
              cbi __lcd_port,__lcd_enable ;EN=0
              rcall __lcd_delay
              sbi __lcd_port,__lcd_enable ;EN=1
              rcall __lcd_delay
              cbi __lcd_port,__lcd_enable ;EN=0
              sbrc r26,__lcd_busy_flag
              rjmp __lcd_busy
              #endasm
              }

              اون خط چهارم از پایین که میبینین یه حلقه تکرار ه و شرط خروجش هم اینه که پاییه D7 lcd صفر بشه
              اما طرز کار اصلی خیلی سادست کافیه کد اسکی کاراکتر یا دستور مورد نظر رو روی پورت دیتای lcd قرار بدیم سپس
              rs=1 (رجیستر داخلی 1 رو انتخاب کنیم) و rd=1 (برای خوندن از lcd) و یا rd=0 (برای نوشتن اطلاعات روی lcd) و بعد از این روی enabe یه پالس پایین رونده ایجاد کنیم تا دیتای جدید رو lach کنه و بعد از هر عمل نوشتن روی lcd چون یه کم طول میکشه که دستور رو اجرا کنه یا کاراکتر رو نمایش بده باید پین D7 رو به عنوان ورودی تنظیم کرد و هر چند میلی ثانیه یه بار این پین رو از lcd خوند و منتظر 0 شدنش بود
              حالا یه سوال چرا در تابع بالا این عمل رو 2 بار انجام داده ؟ خوب معلومه چون هر سری فقط 4 بیت رو میخونه یا مینویسه
              (اول 4 بیت باارزش(نیبل بالا) رو خونده و بعد 4 بیت نیبل پایین رو)
              حالا این وسط اگه lcd دوست نداشت به وظیفش عمل کنه هنگ کرد یا اینکه کاربر از lcd خوشش نیومد سیمهاشو قیچی کرد انداخت تو سطل زباله یا... که زیاد هم پیش میاد تکلیف بقیه دستگاه چی میشه باید به اتیش lcd بسوزه؟
              جواب سوال با کار این برنامه نویس کدویژن معلومه بعله
              اما حالا اینکه چیکار کنیم خوب خیلی سادست کل این عملیات داخل یه تاخیر قرار میگیره و در صورتی که مثلا 255 بار این کار رو کرد (اطلاعات رو خوند) و busy 0 نشد بیخیال lcd بشه و به بقیه کاراش برسه حالا خیلی مهم بود؟!!!!!!!!!!
              اما بعضی ها ممکنه بگن با اسمبلی میونه خوبی ندارن باشه این هم تغییری که لازمه

              void _lcd_ready(void)
              {
              #asm
              push r16
              ldi r16,0xff

              in r26,__lcd_direction
              andi r26,0xf ;set as input
              out __lcd_direction,r26
              sbi __lcd_port,__lcd_rd ;RD=1
              cbi __lcd_port,__lcd_rs ;RS=0
              __lcd_busy:
              rcall __lcd_delay
              sbi __lcd_port,__lcd_enable ;EN=1
              rcall __lcd_delay
              in r26,__lcd_pin
              cbi __lcd_port,__lcd_enable ;EN=0
              rcall __lcd_delay
              sbi __lcd_port,__lcd_enable ;EN=1
              rcall __lcd_delay
              cbi __lcd_port,__lcd_enable ;EN=0

              dec r16
              breq time_out

              sbrc r26,__lcd_busy_flag
              rjmp __lcd_busy
              time_out:
              pop r16
              #endasm
              }
              اما اون push , pop چیه این به خاطر اینه که ما که از بقیه توابعی که قبلا استفاده کردیم خبر نداریم که ایا از این رجیستر استفاده کرده یا نه به خاطر همین مجبوریم اول تو پشته یا یه جای دیگه ذخیره کنیم و بعد مقدارشو برگردونیم سر جاش
              دقت کنید که بعضی tiny ها این دستور رو ساپورت نمیکنن (مثلا با tiny 28 و این تابع ممکنه خطای کامپایلری داشته باشین یا یه خطای دیگه بده درست نمیدونم)ولی مهم نیست چون اینطوری که من فهمیدم تقریبا همه با mega کار میکنن
              خوب حالا اینکه 255 دور تو حلقه (که البته تو هر دور 4 بار delay هم فراخونی میکنه) کافیه یا زیاده به نظر من از سرش هم زیاده شاید هم تو سرعتهای بالا کم باشه که مهم اینه که اصول کار و مشکل رو فهمیدین بقیش دیگه با خودتون


              Qt - A cross-platform application and UI framework

              با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

              دیدگاه


                #8
                پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

                نوشته اصلی توسط mohsen.HEX
                سلام
                تنها راهی که به ذهن من رسید این هست که lcd رو به دوتا میکرو وصل کنی و بعد برای هر میکرو جدا گانه lcd رو فعال(enable) کنی و دیتا رو بهش بدی مثلا موقع ای به نظرت میاد هنگ کرده میکرو اول رو desable و میکرو دوم رو enable کن و دیتا به lcd بده
                :surprised: :surprised:


                Qt - A cross-platform application and UI framework

                با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

                دیدگاه


                  #9
                  پاسخ : متوجه شدن میکرو از هنگ کردن LCD ( بسکام )

                  نوشته اصلی توسط dariush_abbasi868
                  گاهی اوقات حتی با خاموش کردن هم مشکل برطرف نمی شود و باید چند بار اینکار رو انجام داد
                  بله دقیقا همینطوره که میفرمایین دلیلش هم اینه که هنوز بعد از چند ثانیه از قطع شدن توی خازن ها تخلیه نمیشه میکرو با اومدن ولتاژ زیر 2.5 ریست میشه و متوقف میشه ولی رجیسترها و مدار داخلی LCD با همین تغذیه هم هنوز مشغولند که جا داره اون موقع یه خسته نباشید بهشون بگید


                  Qt - A cross-platform application and UI framework

                  با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

                  دیدگاه

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