اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی lcd در اسمبلی

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

    مشکل در راه اندازی lcd در اسمبلی

    میخوام با زبون اسمبلی یه lcd 2*16 رو در مد 4 بیتی (فقط استفاده از یک پورت )

    و بدون تغییر سیم بندی سابق ( بر اساس کتاب کاهه بستم و تو بسکام خوب کار

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

    کار رو توضیح نداده دوستانی که تجربه دارین لطفا کمکم کنید

    (ضمنا برنامه ای که در کتاب مزیدی بود رو هم تست کردم فایده نداشت وتو دیتا شیت lcd ts1620a هم چیزی راجع به این موضوع نیست)
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    #2
    پاسخ : مشکل در راه اندازی lcd در اسمبلی

    دوستان کسی نیست کمک کنه ؟
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی lcd در اسمبلی

      موارد زیر را بصورت دقیق مشخص کنید:

      - نحوه اتصال LCD به پورت های میکروکنترلر و شماره میکروکنترلر.

      - فرکانس کلاک.

      - نمونه کدی که بنابه اظهار شما در کتاب هست و در عمل جواب نمی دهد.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی lcd در اسمبلی

        سلام من 2 سال پیش این کار رو کردم کامپایلرم AVR studio بود

        خیـــــلی وقت می بره راه اندازیش کنی ولی به حس خوبه بعدش می ارزه :biggrin: به زمان بندی ها بسیار بسیار توجه کن همچنین به ترتیب دستوراتی که می بایست به lcd بدی من دیتاشیتی که خودم از روش راه انداختم را برات پیوست می کنم سعیت رو بکن اگه سوالی داشتی بپرس اگه هم دیدی نشد و دیگه راهی نداشت دست آخر بگو تا نمونه سورس ها را برات بگذارم :nerd: البته اینو بگم که این کار بدون راهنما و استاد و اینا برای من یک هفته 24 ساعته وقت برد

        البته به نکته هایی که استاد @طراح گفتن توجه کن 1- - نحوه اتصال LCD به پورت های میکروکنترلر و شماره میکروکنترلر. چون برخی از پایه ها را باید داعما" DDR آنها را تغییر بدی (برای یک کار خروجی تعریف کنی و برای کار دیگر ورودی)

        2- - فرکانس کلاک. 8Mhz نه کمه نه زیاد به Timing Characteristics بسیـــــــــــــــار بسیــــــــــــــــــار مهمه

        3- - نمونه کدی که بنابه اظهار شما در کتاب هست و در عمل جواب نمی دهد.

        موفق باشی

        https://www.sparkfun.com/datasheets/...W-FBS-3.3v.pdf

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی lcd در اسمبلی

          اول ممنونم از توجهتون جواب سوالات شما:

          1- پایه ها به روش 4 بیتی و به این صورت بسته شدن :

          E ------ Pb.5
          RS-------Pb.4
          D4--------Pb.0
          D5-------Pb.1
          D6 -------Pb.2
          D7 -------Pb.3

          میکروکنترلر ATMEGA 32 هست

          2. از کلاک داخلی 8 مگاهرتز استفاده شده

          3. بفرمایید
          http://www.4shared.com/file/lUzwFgEP/test26.html



          من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
          آلبرت اینشتین
          منبع: http://fa.wikiquote.org

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی lcd در اسمبلی

            در نمونه کد شما یکسری اشکالات اساسی وجود دارد. یکی پورت متصل به LCD که در ابتدای برنامه PORTA تعریف شده (و از رجیسترهای PORTA و DDRA بجای PORTB و DDRB استفاده شده)، اما مطابق توضیح شما باید به PORTB متصل شود. یک مورد دیگر اتصال دیتای LCD به پین های 0 تا 3 است. در صورتی که کد نوشته شده با فرض اتصال دیتا به پین های 4 تا 7 است.
            مورد دیگر در زیربرنامه cmndwrt است که در دستورات هشتم تا دهم آن بجای 3 خط زیر:

            کد:
            cbi lcd_prt,lcd_en
            call sdelay
            cbi lcd_prt,lcd_en


            باید نوشته شود:

            کد:
            sbi lcd_prt,lcd_en
            call sdelay
            cbi lcd_prt,lcd_en


            همچنین تکلیف پین Reset هم در این برنامه مشخص نیست و بعضی از انواع LCD ممکن است در صورت عدم ایجاد سیگنال Reset به درستی عمل نکنند. در روتین های ارسال Command و Data هم بیجهت تاخیر زیادی قرار داده شده که می تواند باعث کند شدن عملکرد نمایش شود و Command های ارسالی و تاخیرهای آن هم در ابتدای برنامه هم جای اصلاح دارد. بنابراین اگر در برنامه نویسی اسمبلی مهارت کافی دارید، موارد فوق را اصلاح کنید تا بتوانید بصورت عملی جواب بگیرید. در غیر اینصورت اعلام کنید تا در فرصت مقتضی نمونه کدی را در اختیار شما قرار دهم.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی lcd در اسمبلی

              خیلی ممنون از توضیحات شما آقای کی نژاد

              اما مشکل من دقیقا همینه که این برنامه رو نفهمیدم چیکار کرده چون من در

              اسمبلی avr هنوز مبتدی هستم ازتون خواهش میکنم اگه امکان داره بر اساس

              سیم بندی من یه برنامه کوچک برای راه اندازی lcd برام بنویسید و تئوری کار رو

              توضیح بدین

              حتما مورد استفاده دوستان دیگه هم که همین مشکل رو دارن قرار میگیره
              من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
              آلبرت اینشتین
              منبع: http://fa.wikiquote.org

              دیدگاه


                #8
                پاسخ : مشکل در راه اندازی lcd در اسمبلی

                ظاهرا تاپیکی در سایت AVRFreaks ایجاد کرده اید و در پست انتهایی نوشته شده که مشکل برطرف شده است:

                http://www.avrfreaks.net/index.php?n...120178#1120178

                اگر مشکل شما برطرف شده، لطفا اعلام کنید تا وقتی برای قرار دادن نمونه کد صرف نشود.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  #9
                  پاسخ : پاسخ : مشکل در راه اندازی lcd در اسمبلی

                  نوشته اصلی توسط طراح
                  ظاهرا تاپیکی در سایت AVRFreaks ایجاد کرده اید و در پست انتهایی نوشته شده که مشکل برطرف شده است:

                  http://www.avrfreaks.net/index.php?n...120178#1120178

                  اگر مشکل شما برطرف شده، لطفا اعلام کنید تا وقتی برای قرار دادن نمونه کد صرف نشود.
                  بله راه انداختمش. حالا دوتا سوال دیگه اینکه باید برای نمایش هر کاراکتر دستورات بیتی ردیف کنیم یا راه آسونتری هم هست ؟و سوال دیگه اینکه اون کاراکترهایی رو که در بسکام ما برای lcd تعریف میکردیم رو اینجا چطور باید ساخت ؟
                  من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                  آلبرت اینشتین
                  منبع: http://fa.wikiquote.org

                  دیدگاه


                    #10
                    پاسخ : مشکل در راه اندازی lcd در اسمبلی

                    با سلام.
                    یک سری کد برای اسمبلی و معادل cاش هم اینجا برای راه اندازی ال‎سی‎دی هست.
                    برای هر دو حالت راه اندازی 4بیتی و 8 بیتی.
                    http://web.alfredstate.edu/weimandn/...de_asm_4d.html

                    دیدگاه


                      #11
                      پاسخ : مشکل در راه اندازی lcd در اسمبلی

                      کد:
                      ;;
                      ;; output pins to lcd 16*2 :
                      ;;  
                      ;;  LCD_PORT.0 : LCD RS pin
                      ;;  LCD_PORT.1 : LCD RW pin
                      ;;  LCD_PORT.2 : LCD EN pin
                      ;;  LCD_PORT.4 : LCD D4 pin
                      ;;  LCD_PORT.5 : LCD D5 pin
                      ;;  LCD_PORT.6 : LCD D6 pin
                      ;;  LCD_PORT.7 : LCD D7 pin
                      ;;
                      
                      
                      _F_CPU_ = 8000000 ;; problem "UL" suffix
                      LCD_PORT = PORTB
                      LCD_DDR = DDRB
                      
                      #define IO(a)  _SFR_IO_ADDR(a)
                      #define low(i)  lo8(i)
                      #define high(i) hi8(i)
                      
                      
                      ;;----------------------------------------
                      .section .text
                      
                      ;; initialize lcd - 4bit mode
                      ;; input : none
                      ;; output : none
                      ;; used  : r20
                      .global lcd_init
                      lcd_init:
                      	ldi r20, low(0)
                      	out IO(LCD_PORT), r20
                      	ldi r20, low(-1)
                      	out IO(LCD_DDR), r20
                      	ldi r20, low(0x33)
                      	rcall lcd_cmd
                      	ldi r20, low(0x32)
                      	rcall lcd_cmd
                      	ldi r20, low(0x28)
                      	rcall lcd_cmd
                      	ldi r20, low(0x0C)
                      	;rjmp lcd_cmd
                      
                      ;; send command to lcd
                      ;; input : r20(cmd)
                      ;; output : none
                      ;; used  : r20, r22
                      .global lcd_cmd
                      lcd_cmd:
                      	ldi r22, low(0)
                      	rjmp lcd_send_byte
                      
                      ;; send chracter to lcd
                      ;; input : r20(ch)
                      ;; output : none
                      ;; used  : r20, r22
                      .global	 lcd_putc
                      lcd_putc:
                      	ldi r22, low(1)
                      	;rjmp lcd_send_byte
                      
                      ;; send byte to lcd (0:command or 1:character)
                      ;; input : r22(type), r20(byte)
                      ;; output : none
                      ;; used  : r20, r21, r22
                      .global lcd_send_byte
                      lcd_send_byte:
                      	mov r21, r20
                      	rcall lcd_send_nibble
                      	mov r20, r21
                      	swap r20
                      	;rjmp lcd_send_nibble
                      
                      ;; send nobble to lcd (0:command or 1:character)
                      ;; input : r22(type), r20(nibble)
                      ;; output : none
                      ;; used  : r20, r22, r23
                      .global lcd_send_nibble
                      lcd_send_nibble:
                      	andi r20, low(0xF0)
                      	ori r20, low(0x04)
                      	ldi r23, low(0)
                      	cpse r22, r23
                      	ori r20, low(0x01)
                      	out IO(LCD_PORT), r20
                      	rcall lcd_delay
                      	andi r20, low(0xF0)
                      	out IO(LCD_PORT), r20
                      	;rjmp lcd_delay
                      
                      ;; lcd delay (1ms)
                      ;; input : none
                      ;; output : none
                      ;; used  : ZL, ZH
                      .global lcd_delay
                      lcd_delay:
                      	ldi ZH, high(_F_CPU_ / 4000)
                      	ldi ZL, low(_F_CPU_ / 4000)
                      1:
                      	sbiw ZL, 1
                      	brne 1b
                      	ret
                      گذشت خصلت مردان است

                      دیدگاه

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