اطلاعیه

Collapse
No announcement yet.

راه اندازی دو یا چند LCD کارکتری با یک میکرو

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

    راه اندازی دو یا چند LCD کارکتری با یک میکرو

    سلام خدمت دوستان گرامی
    پیشاپیش عیدتون مبارک

    دوستان بفرمایید که چه جوری میشه دو یا چند LCD کارکتری رو با یک میکرو AVR راه اندازی کرد؟

    ترجیحا از زبان C استفاده می کنیم.
    همواره يادمان باشد:
    1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
    2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
    3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

    #2
    پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

    درود :
    شدنش که خیالت راخت 100% میشه . اما من تاحالا بهش بر نخوردم .

    دیدگاه


      #3
      پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

      سلام
      باید توی کتابخونش دست ببری
      کتابخونش رو داری؟
      گفت که دیوانه نهی لایق این خانه نهی

      دیدگاه


        #4
        پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

        سلام دوست عزیز
        من هم با طوفان۸ موافقم
        یکیشو با اسمبلی راه بنداز تو محیط سی که مینویسی ، فقط بدیش اینه که میبینی رو السیدی اسمبلیه چقدر سرعت نمایش بیشتره

        دیدگاه


          #5
          پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

          اینم کتابخونه alcd در کدویژن___فقط تونستم کد زیر رو پیدا کنم

          باید کتابخونه رو کالبد شکافی کنیم!
          به نظرتون کجاش باید دستکاری بشه؟

          کد:
          /************************************************** 
           CodeVisionAVR C Compiler V2.04.9+
           (C) 1998-2010 Pavel Haiduc, HP InfoTech S.R.L.
          
           Universal alphanumeric LCD driver library
           for the HD44780 LCD controller
          
           Supports both ATxmega and non-ATxmega devices
          **************************************************/
          
          
          #ifndef _LCDX_INCLUDED_
          #define _LCDX_INCLUDED_
          
          void _lcd_write_data(unsigned char data);
          /* read a byte from the LCD character generator or display RAM */
          unsigned char lcd_read_byte(unsigned char addr);
          /* write a byte to the LCD character generator or display RAM */
          void lcd_write_byte(unsigned char addr, unsigned char data);
          // set the LCD display position x=0..39 y=0..3
          void lcd_gotoxy(unsigned char x, unsigned char y);
          // clear the LCD
          void lcd_clear(void);
          void lcd_putchar(char c);
          // write the string str located in SRAM to the LCD
          void lcd_puts(char *str);
          // write the string str located in FLASH to the LCD
          void lcd_putsf(char flash *str);
          // write the string str located in EEPROM to the LCD
          void lcd_putse(char eeprom *str);
          // initialize the LCD controller
          void lcd_init(unsigned char lcd_columns);
          
          #pragma library alcd.lib
          
          #endif
          همواره يادمان باشد:
          1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
          2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
          3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

          دیدگاه


            #6
            پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

            این کتابخونه به درد نمیخوره
            باید مستقیم بدنه توابعشو ببینی تا بتونی اونا رو برای 2 lcd تغییرشون بدی و بعد ازشون استفاده کنی
            گفت که دیوانه نهی لایق این خانه نهی

            دیدگاه


              #7
              پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

              دوستان اصلا فکر نمیکنم نیازی به دست بردن توی کتابخونه باشه.شما E یا به قول معروف Cs یا همون چیپ سلکت هر السیدی رو نیاز دارید.
              میدونید که عملکرد E یا Cs اینه که ما وقتی میخوایم چندین دستگاه رو به یک خط باس وصل کنیم, با این پایه میفهمونیم که الان دیتای روی باس مربوط به کدوم دستگاهه و باید از روی باس بخونه.

              خب با این توضیحات شما سه تا السیدی رو وصل میکنید به یه باس و پایه Rs و E رو داخل برنامه تعریف میکنید.اما در عمل پایه ای که مختص E هست رو به هیچکجا وصل نمیکنید.در عوض,E های هر السیدی رو مستقیما وصل میکنید به یکی از پایه های دلخواه میکرو.حالا وقتی میخوایدروی السیدی اول بنویسید E مربوط یه السیدی اول رو 1 میکنید و از دستورات نوشتاری استفاده میکنید.بعد از اتمام نوشتن متنتون E السیدی اول رو 0 میکنید.حالا میرید سراغ السیدی سوم یا دوم یا هرچندوم.

              اینی که میگمو صددرصد تست نکردم ولی فکر میکنم عملی باشه.چون منطقیه.

              دیدگاه


                #8
                پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

                نوشته اصلی توسط Dr.Xylitol
                دوستان اصلا فکر نمیکنم نیازی به دست بردن توی کتابخونه باشه.شما E یا به قول معروف Cs یا همون چیپ سلکت هر السیدی رو نیاز دارید.
                میدونید که عملکرد E یا Cs اینه که ما وقتی میخوایم چندین دستگاه رو به یک خط باس وصل کنیم, با این پایه میفهمونیم که الان دیتای روی باس مربوط به کدوم دستگاهه و باید از روی باس بخونه.

                خب با این توضیحات شما سه تا السیدی رو وصل میکنید به یه باس و پایه Rs و E رو داخل برنامه تعریف میکنید.اما در عمل پایه ای که مختص E هست رو به هیچکجا وصل نمیکنید.در عوض,E های هر السیدی رو مستقیما وصل میکنید به یکی از پایه های دلخواه میکرو.حالا وقتی میخوایدروی السیدی اول بنویسید E مربوط یه السیدی اول رو 1 میکنید و از دستورات نوشتاری استفاده میکنید.بعد از اتمام نوشتن متنتون E السیدی اول رو 0 میکنید.حالا میرید سراغ السیدی سوم یا دوم یا هرچندوم.

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

                دیدگاه


                  #9
                  پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

                  نوشته اصلی توسط Dr.Xylitol
                  دوستان اصلا فکر نمیکنم نیازی به دست بردن توی کتابخونه باشه.شما E یا به قول معروف Cs یا همون چیپ سلکت هر السیدی رو نیاز دارید.
                  میدونید که عملکرد E یا Cs اینه که ما وقتی میخوایم چندین دستگاه رو به یک خط باس وصل کنیم, با این پایه میفهمونیم که الان دیتای روی باس مربوط به کدوم دستگاهه و باید از روی باس بخونه.

                  خب با این توضیحات شما سه تا السیدی رو وصل میکنید به یه باس و پایه Rs و E رو داخل برنامه تعریف میکنید.اما در عمل پایه ای که مختص E هست رو به هیچکجا وصل نمیکنید.در عوض,E های هر السیدی رو مستقیما وصل میکنید به یکی از پایه های دلخواه میکرو.حالا وقتی میخوایدروی السیدی اول بنویسید E مربوط یه السیدی اول رو 1 میکنید و از دستورات نوشتاری استفاده میکنید.بعد از اتمام نوشتن متنتون E السیدی اول رو 0 میکنید.حالا میرید سراغ السیدی سوم یا دوم یا هرچندوم.

                  اینی که میگمو صددرصد تست نکردم ولی فکر میکنم عملی باشه.چون منطقیه.
                  درود بر شما
                  من فکر میکنم منظور شما RS هست که دست خودمون باشه و صفر و یکش کنیم چون اگه E دست خودمون باشه که نمیشه ، یه متن رو که تو کدویژن مینویسیم که بفرسته میاد حرف حرف جدا میکنه و نیبل بالا و پایینشو میفرسته (کتابخونه) بعد با هر نیبل E رو یه لبه پایین رونده میده ، که خب نمیشه E باید دست خودش باشه ، اگر RS رو بخواهیم صفر و یک بدیم هم ، بازم مشکله چون وقتی RS مثلا السیدی اول رو یک میدی یعنی دیتایی که میگیره نوشته است و RS دوتای دیگه رو باید صفر کنی یعنی دیتایی که میگیرند فرمان است
                  حالا مثلا اگه حرف p رو بفرسته ، متنش برای السیدی اول میشه حرف پی و دستورش برای دوتای دیگه میشه شیفت دادن صفحه نمایش به چپ
                  باید کتابخونه رو شخم زد و اساسی تغییرش داد ، اما
                  اسمبلی چیز دیگری است

                  دیدگاه


                    #10
                    پاسخ : راه اندازی دو LCD کارکتری با یک میکرو

                    نوشته اصلی توسط rezaei2191
                    درود بر شما
                    من فکر میکنم منظور شما RS هست که دست خودمون باشه و صفر و یکش کنیم چون اگه E دست خودمون باشه که نمیشه ، یه متن رو که تو کدویژن مینویسیم که بفرسته میاد حرف حرف جدا میکنه و نیبل بالا و پایینشو میفرسته (کتابخونه) بعد با هر نیبل E رو یه لبه پایین رونده میده ، که خب نمیشه E باید دست خودش باشه ، اگر RS رو بخواهیم صفر و یک بدیم هم ، بازم مشکله چون وقتی RS مثلا السیدی اول رو یک میدی یعنی دیتایی که میگیره نوشته است و RS دوتای دیگه رو باید صفر کنی یعنی دیتایی که میگیرند فرمان است
                    حالا مثلا اگه حرف p رو بفرسته ، متنش برای السیدی اول میشه حرف پی و دستورش برای دوتای دیگه میشه شیفت دادن صفحه نمایش به چپ
                    باید کتابخونه رو شخم زد و اساسی تغییرش داد ، اما
                    اسمبلی چیز دیگری است
                    بنده نیز با شما موافقم اصولا باید اطلاعات مربوط به LCD ها و سیگنال های مرتبط با آنها رو فهمید
                    سپس برای اون یه کتابخونه ی جدید تالیف کرد.

                    هدف اینکه با کمترین اتصالات و تجهیزات چند تا lcd با یک میکرو کار کنند.
                    همواره يادمان باشد:
                    1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
                    2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
                    3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

                    دیدگاه


                      #11
                      پاسخ : راه اندازی دو یا چند LCD کارکتری با یک میکرو

                      نوشته اصلی توسط Dr.Xylitol
                      دوستان اصلا فکر نمیکنم نیازی به دست بردن توی کتابخونه باشه.شما E یا به قول معروف Cs یا همون چیپ سلکت هر السیدی رو نیاز دارید.
                      میدونید که عملکرد E یا Cs اینه که ما وقتی میخوایم چندین دستگاه رو به یک خط باس وصل کنیم, با این پایه میفهمونیم که الان دیتای روی باس مربوط به کدوم دستگاهه و باید از روی باس بخونه.

                      خب با این توضیحات شما سه تا السیدی رو وصل میکنید به یه باس و پایه Rs و E رو داخل برنامه تعریف میکنید.اما در عمل پایه ای که مختص E هست رو به هیچکجا وصل نمیکنید.در عوض,E های هر السیدی رو مستقیما وصل میکنید به یکی از پایه های دلخواه میکرو.حالا وقتی میخوایدروی السیدی اول بنویسید E مربوط یه السیدی اول رو 1 میکنید و از دستورات نوشتاری استفاده میکنید.بعد از اتمام نوشتن متنتون E السیدی اول رو 0 میکنید.حالا میرید سراغ السیدی سوم یا دوم یا هرچندوم.

                      اینی که میگمو صددرصد تست نکردم ولی فکر میکنم عملی باشه.چون منطقیه.
                      منطقی هست ولی عملی نیست
                      مخصوصا تو مد 4 بیتی
                      حتما باید کتابخانه دست کاری کنی
                      [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                      دیدگاه


                        #12
                        پاسخ : راه اندازی دو یا چند LCD کارکتری با یک میک&#

                        نوشته اصلی توسط rezaei2191
                        درود بر شما
                        من فکر میکنم منظور شما RS هست که دست خودمون باشه و صفر و یکش کنیم چون اگه E دست خودمون باشه که نمیشه ، یه متن رو که تو کدویژن مینویسیم که بفرسته میاد حرف حرف جدا میکنه و نیبل بالا و پایینشو میفرسته (کتابخونه) بعد با هر نیبل E رو یه لبه پایین رونده میده ، که خب نمیشه E باید دست خودش باشه ، اگر RS رو بخواهیم صفر و یک بدیم هم ، بازم مشکله چون وقتی RS مثلا السیدی اول رو یک میدی یعنی دیتایی که میگیره نوشته است و RS دوتای دیگه رو باید صفر کنی یعنی دیتایی که میگیرند فرمان است
                        حالا مثلا اگه حرف p رو بفرسته ، متنش برای السیدی اول میشه حرف پی و دستورش برای دوتای دیگه میشه شیفت دادن صفحه نمایش به چپ
                        باید کتابخونه رو شخم زد و اساسی تغییرش داد ، اما
                        اسمبلی چیز دیگری است
                        پایه RS برای انتخاب حالت داده یا دستورالعمل هست
                        اگه 1 باشه داده و اگه 0 باشه دستورالعمل هست
                        پایه E وقتی 1 بشه داده در LCD ذخیره میشه
                        اگه نخواهیم کتابخونه دستکاری کنیم با یک گیت AND خارجی میشه پایه E برای تعداد زیاد LCD کنترل کرد


                        [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                        دیدگاه


                          #13
                          راه اندازی دو یا چند LCD کارکتری با یک میکرو

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

                          طبق گفته ی دیتا شیت lcd2*16 که پیوست شده است پایه E حساس به لبه پایین رونده می باشد.
                          دیتاشیت LCD2*16:
                          http://www.dfrobot.com/image/data/FIT0127/datasheet.pdf

                          و طبق آزمایش بنده میکرو برای نوشتن هر چیزی 6 بار E رو تغییر وضعیت می دهد که شکل موج آن را در شکل زیر می توان دید:

                          در این مدار بنده توسط یک دی مالتی پلکسر آنالوگ سیگنال E رو توزیع می کردم و آدرس های دیمالتی پلکسر رو توسط میکرو تعیین می کردم.
                          به عبارتی هر زمان که دوست داشتم E رو سوئیچ می کردم روی LCD مورد نظرم:
                          نتیجه این شد که، جواب داد، ولی حتما باید LCD رو Clear می کردی یا دوباره LCD_init اجرا می کردی تا به خوبی کار می کرد. و ایراد این روش هم این بود که اگه اون کارها رو نکنی، دیتای قبلی از روی LCD پاک می شه.

                          حالا راه حل برای رفع اشکال یا بهینه سازی چیه؟
                          در ضمن روش ADMIN رو هم امتحان می کنم نتایج رو اعلام می کنم.


                          همواره يادمان باشد:
                          1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
                          2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
                          3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

                          دیدگاه


                            #14
                            پاسخ : راه اندازی دو یا چند LCD کارکتری با یک میکرو

                            روش گیتی هم مانند آزمایش قبل شد.
                            همواره يادمان باشد:
                            1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
                            2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
                            3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

                            دیدگاه


                              #15
                              پاسخ : راه اندازی دو یا چند LCD کارکتری با یک میکرو

                              نوشته اصلی توسط S_Ahmad
                              با تشکر از ارسال های مفیدتون

                              طبق گفته ی دیتا شیت lcd2*16 که پیوست شده است پایه E حساس به لبه پایین رونده می باشد.
                              دیتاشیت LCD2*16:
                              http://www.dfrobot.com/image/data/FIT0127/datasheet.pdf

                              و طبق آزمایش بنده میکرو برای نوشتن هر چیزی 6 بار تغییر وضعیت می دهد که شکل موج آن را در شکل زیر می توان دید:

                              در این مدار بنده توسط یک دی مالتی پلکسر آنالوگ سیگنال E رو توزیع می کردم و آدرس های دیمالتی پلکسر رو توسط میکرو تعیین می کردم.
                              به عبارتی هر زمان که دوست داشتم E رو سوئیچ می کردم روی LCD مورد نظرم:
                              نتیجه این شد که، جواب داد، ولی حتما باید LCD رو Clear می کردی یا دوباره LCD_init اجرا می کردی تا به خوبی کار می کرد. و ایراد این روش هم این بود که اگه اون کارها رو نکنی، دیتای قبلی از روی LCD پاک می شه.

                              حالا راه حل برای روش اشکال یا بهینه سازی چیه؟
                              در ضمن روش ADMIN رو هم امتحان می کنم نتایج رو اعلام می کنم.
                              تو مد 4 بیتی برای هر نیبل اطلاعات یه پالس لازمه در نتیجه نیاز به 2 پالس داری
                              دقت کنین که E حساس به سطح نیست بلکه به لبه سیگنال حساس هست
                              برای روش سخت افزاری من گیت AND پیشنهاد میدم چون قابلیت مانور بیشتری داره مثلا لازم نیست هر LCD جداگانه کانفیگ بشه
                              اما بهترین کار نوشتن یه کتابخونه جدید هست
                              به این صورت که همون کتاب خونه های قبلی نوشته بشه با این تغییر که یه آرگومان ورودی هم اضافه بشه
                              این آرگومان همون پایه E هست که به LCD خاصی وصل شده و داخل کتاب خونه اون به E قبلی نسبت میدیم
                              احتمالا فردا یه کتابخونه برای میکرو سی مینویسم که بشه هم تو AVR استفاده کرد و هم در PIC
                              [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                              دیدگاه

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