اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام. من یه کد ساده با codevision نوشته ام و lcd کاراکتری 16*2 را به پورت C میکروی ATmega16A وصل کرده ام. در فیوزبیت ها jtag رو هم غیرفعال کرده ام. ولتاژ هم دقیقا 5 ولت هست برای میکرو و LCD. ولی هرکاری می کنم فقط یک سطر با 16 مربع دیده میشه.
    #include <mega16a.h>
    #include <delay.h>


    // Alphanumeric LCD functions
    #include <alcd_ks0073.h>
    #include <alcd.h>


    #asm
    .equ __lcd_port=0x15 //PORTC
    #endasm


    // Declare your global variables here


    void main(void)
    {
    // Declare your local variables here


    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRA=0xff;
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);


    // Port C initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTC Bit 0
    // RD - PORTC Bit 1
    // EN - PORTC Bit 2
    // D4 - PORTC Bit 4
    // D5 - PORTC Bit 5
    // D6 - PORTC Bit 6
    // D7 - PORTC Bit 7
    // Characters/line: 16
    lcd_init(16);




    while (1)
    {
    // lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts("hello");
    delay_ms(300);
    lcd_gotoxy(0,1);
    lcd_puts("Hi");
    delay_ms(300);
    }
    }

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

    برای من هم قبلا پیش اومده. احتمالا جای پایه ها رو جابه جا زدی؟ سخت افزارتو یه بار دیگه چک کن

    دیدگاه


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

      اینکه 16 تا مربع سیاه نشون میده به احتمال خیلی زیاد مشکل سخت افزار و اتصالی یا عدم اتصال یا جابجا زدن اتصالات رو داری
      کلا سیم کشیت رو چک کن

      اما سیم کشی رو هم که درست کنی باز جواب نمیده این برنامه
      شما اگر میخوای رشته ثابتی مثله اینایی که تو برنامه ت هست روی ال سی دی بنویسی باید از دستور
      کد:
      lcd_putsf("");
      استفاده کنی

      دیدگاه


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

        سلام، برنامه مشکلی نداره فقط توی برنامه زمانی از طریق اسمبلی پورت رو مشخص می کنید دیگه لازم نیست alcd.h بنویسید بجای دو تا اینکلودی که برای LCD تعریف کردین بعد از دستورات اسمبلی lcd.h رو اضافه کنید. در مورد سخت افزار هم پایه سه LCD رو چطور وصل کردین؟ راحت ترین راه این که پایه سه LCD رو با یه مقاومت 2.2کیلو به زمین وصل کنید.

        دیدگاه


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

          مشکل شما عدم اتصال صحیح پایه VO هست..با مقاومت 2.5 تا 4.5 کیلو اهم به زمین باید متصل بشه

          دیدگاه


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

            سلام من همین مشکل رو با اردوینو uno و LCD کاراکتری 16*2 دارم واقعا نمیدونم مشکلم چیه ؟
            این کد هاشه که از سایت اصلی اردوینو کپی کردم
            جدیدترین ویرایش توسط mohammad2002; ۲۲:۵۵ ۱۳۹۶/۰۴/۲۹.

            دیدگاه


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

              سلام
              آیا قبلا یکبار ولتاژ مثبت و منفی را برعکس نزدید؟
              به این توجه داشته باشید که پایه 1 به GND پایه 2 به V+ و 3 رو به محل متغیر پتانسیومتر(همون پایه ای که با اون دو تا پایه دیگه تو یه خط نیستن)وصل کنید و دو تا پایه دیگه رو یکیشو به مثبت و اون یکی رو به منفی وصل کنید. همچنین پایه شماره 5 رو هم به زمین وصل کنید و LED بک لایت رو هم روشن کنید.حالا پتانسیومتر رو بچرخونید
              اگر در این حالت باز هم تمام پیکسل ها پر بودن و در حال چرخاندن پتانسیومتر شدت رنگ تغییر میکرد یعنی چیپ ماژول مشکل پیدا کرده (حالا به هر علتی)
              برای حل مشکل باید یک LCD دیگه بخرین
              ترجیها از پورت سی استفاده نکنید چون بعضی وقت ها با درست کردن فیوزبیت باز هم این پورت درست کار نمیکند

              دیدگاه


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

                سلام
                اولا حتما سیم کشیت رو چک کن من دو روز سر یه قطعی سیم متصل به ال سی دی دردسر کشیدم مهمترین مشکلت اینه
                همون جور که دوستمون گفتن
                پایه 1 به GND پایه 2 به V+ و پایه 3 رو پتوانسیومتر استفاده نکن یه مقاومت 270 اهمی بزار اونجا بین چایه ی 1 و 3 قشنگ جواب می ده
                تو برانامه هم به جا phts به نظرم putsf بزار
                اول رو پایه ی دیگه را بنداز بعد رو پایه ی C تست کن اول کار نرو رو C

                دیدگاه


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

                  احیانا اتصال شما به ال سی دی به صورت چهار سیمه است ؟
                  در این صورت چونکه پروتوکل ارتباطی پیش فرض ال سی دی 8 سیمه است ، حتما باید در ابتدای
                  برنامه خود یک تاخیر کوچک ایجاد کنید تا مطمعن شوید که هنگامی که دستور تغییر پروتکل ارتباطی از 8 سیمه به 4 سیمه به
                  ال سی دی ارسال میشود ، ال سی دی کاملا روشن شده و آماده دریافت دستورات باشد
                  اگر اینکار را نکنید ، دستور تغییر پروتکل ، هنگامی ارسال میشود که هنوز ال سی دی از خواب بلند نشده !
                  و طبعا بعد از آنهم عملکرد درستی نخواهد داشت
                  با دستور delay در ابتدای main یک تاخیر یک دهم ثانیه ای ایجاد کنید و بعد از آن تابع lcd_init را صدا بزنید
                  منکه در pic همین مشکل را داشتم به این روش حل شد ، ممکن است مشکل شما هم همین باشد

                  دیدگاه


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

                    سلام، بنده برای نمایش ولتاژ از دستور زیر استفاده کردم ولی نتیجه مثل شکل شد، کسی میدونه مشکل از چیه؟(عبارت 2f در شکل همان عبارت داخل برنامه است.)
                    sprintf(lcd_buf,"v1=%6.2f",volt);

                    دیدگاه


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

                      این تنظیمات تو انجام بده

                      دیدگاه


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

                        ممنون،

                        دیدگاه

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