اطلاعیه

Collapse
No announcement yet.

مشکل در تنظیم پورت اتصال lcd

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

    مشکل در تنظیم پورت اتصال lcd

    سلام.من برای راه اندازی lcd کارکتری از طریق کد ویزارد پورت c رو انتخاب کردم و پس از اجرا در پروتئوس هم درست کار کرد اما وقتی که برنامه رو روی میکرو پروگرام کردم،lcd روی پورت c کار نمیکرد و در واقع اطلاعاتش به همون پورت a ارسال میشد!!!مشکل از چی میتونه باشه!؟
    میکرو هم atmega16a هست.

    #2
    پاسخ : مشکل در تنظیم پورت اتصال lcd

    نوشته اصلی توسط Mahdi_e.n نمایش پست ها
    سلام.من برای راه اندازی lcd کارکتری از طریق کد ویزارد پورت c رو انتخاب کردم و پس از اجرا در پروتئوس هم درست کار کرد اما وقتی که برنامه رو روی میکرو پروگرام کردم،lcd روی پورت c کار نمیکرد و در واقع اطلاعاتش به همون پورت a ارسال میشد!!!مشکل از چی میتونه باشه!؟
    میکرو هم atmega16a هست.
    سلام
    اینکه اطلاعات از پورت C به A منتقل بشن چیز عجیبیه! حتما اشتباه متوجه شدید. اما توی میکروکنترلرهایی مثل ATmega16 و 32 رابط jtag روی پورت C قرار گرفته. به همین دلیل با روشن بودن این واحد، دیگه به بعضی پایه های پورت C دسترسی وجود نداره. راه حل غیرفعال کردن jtag اینه که فیوز بیت مربوط بهش رو هنگام پروگرام کردن 1 کنید تا غیر فعال بشه.

    دیدگاه


      #3
      پاسخ : مشکل در تنظیم پورت اتصال lcd

      دوستمون درست میگن.احتمالا JTAG فعاله. و اینکه تو پروتیوس چون تنظیمات فیوز وجود نداره مشکلی پیش نمیاد و درسته.

      دیدگاه


        #4
        پاسخ : مشکل در تنظیم پورت اتصال lcd

        با پورت های b و d هم امتحان کردم همینطور بود!

        دیدگاه


          #5
          پاسخ : مشکل در تنظیم پورت اتصال lcd

          نوشته اصلی توسط Mahdi_e.n نمایش پست ها
          سلام.من برای راه اندازی lcd کارکتری از طریق کد ویزارد پورت c رو انتخاب کردم و پس از اجرا در پروتئوس هم درست کار کرد اما وقتی که برنامه رو روی میکرو پروگرام کردم،lcd روی پورت c کار نمیکرد و در واقع اطلاعاتش به همون پورت a ارسال میشد!!!مشکل از چی میتونه باشه!؟
          میکرو هم atmega16a هست.
          سلام
          پروژتو تو کد ویژن باز کن برو رو تب project، بعد cofigure رو بزن تو پنجره جدید تب c complier رو بزن بعد libraries رو بزن برو تو تب alphanumetric lcd، اونجا ببین رو کدوم پورت تنظیم شده اگه رو c هست که باید jtagرو غیر فعال کنی اگه نه که رو هر پورت میتونی تنظیم کنی تا کار کنه

          دیدگاه


            #6
            پاسخ : مشکل در تنظیم پورت اتصال lcd

            نوشته اصلی توسط sirshp نمایش پست ها
            سلام
            پروژتو تو کد ویژن باز کن برو رو تب project، بعد cofigure رو بزن تو پنجره جدید تب c complier رو بزن بعد libraries رو بزن برو تو تب alphanumetric lcd، اونجا ببین رو کدوم پورت تنظیم شده اگه رو c هست که باید jtagرو غیر فعال کنی اگه نه که رو هر پورت میتونی تنظیم کنی تا کار کنه
            از همونجا lcd رو روی پورت B تنظیم کردم بازم مثل قبل بود

            دیدگاه


              #7
              پاسخ : مشکل در تنظیم پورت اتصال lcd

              حل شد!پورت های میکرو رو اشتباه در نظر گرفته بودم

              دیدگاه


                #8
                پاسخ : مشکل در تنظیم پورت اتصال lcd

                نوشته اصلی توسط Mahdi_e.n نمایش پست ها
                حل شد!پورت های میکرو رو اشتباه در نظر گرفته بودم
                حالا این بار گذشت و تجربه شد. از این به بعد سعی کنید قبل از تهمت زدن به میکروکنترلر و IDE، سخت افزار رو کامل چک کنید [emoji6]

                دیدگاه


                  #9
                  پاسخ : مشکل در تنظیم پورت اتصال lcd

                  نوشته اصلی توسط hossein.m98 نمایش پست ها
                  حالا این بار گذشت و تجربه شد. از این به بعد سعی کنید قبل از تهمت زدن به میکروکنترلر و IDE، سخت افزار رو کامل چک کنید [emoji6]
                  باشه.ممنون
                  دوباره به مشکل مشابهی برخوردم که معلومه مشکل از سخت افزاره اما هرچی چک میکنم نمیفهمم!!!
                  برای خوندن keypad توی عکس هروقت که وقفه دریافت کردم مقدار یک رو روی پایه های افقی keypad شیفت میدم و نتیجه رو نگاه میکنم ولی در عمل ستون اول درست کار نمی کنه و همه ی کلیدهای این ستونو ردیف اول درنظر میگیره!!!
                  همیچنین طبق برنامه باید با هربار فشردن کلید یک بار خونده شه ولی با زدن هرکلید چند بار خونده میشه و اگه دستمو نگه دارم تا وقتی که نگه دارم میخونه!



                  #include <mega16.h>
                  #include <delay.h>
                  // Alphanumeric LCD functions
                  #include <alcd.h>
                  #include <stdio.h>


                  // Declare your global variables here
                  flash char shift[4]={0xfe,0xfd,0xfb,0xf7};
                  flash char layout[4][4]={'7','8','9','/',
                  '4','5','6','*',
                  '1','2','3','-',
                  'c','0','=','+',};
                  int i=0,j=0;
                  char st[20];
                  // External Interrupt 2 service routine
                  interrupt [EXT_INT2] void ext_int2_isr(void)
                  {
                  // Place your code here

                  int row,column=-1;
                  for(row=0;row<4;row++)
                  {
                  PORTD=shift[row];
                  if(PIND.4==0){column=0;}
                  if(PIND.5==0){column=1;}
                  if(PIND.6==0){column=2;}
                  if(PIND.7==0){column=3;}
                  if(column!=-1)
                  {
                  char data;
                  data= layout[row][column];
                  lcd_clear();
                  sprintf(st,"column=%d\nrow=%d",column,row);
                  lcd_puts(st);
                  /*if(data!=0)
                  {
                  if(data=='c')
                  lcd_clear();
                  else
                  lcd_putchar(data);
                  } */

                  break;
                  }


                  }
                  PORTD=0xf0;
                  }


                  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=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
                  // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                  PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);


                  // 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=Out Bit2=Out Bit1=Out Bit0=Out
                  DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
                  // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=0 Bit2=0 Bit1=0 Bit0=0
                  PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


                  // External Interrupt(s) initialization
                  // INT0: Off
                  // INT1: Off
                  // INT2: On
                  // INT2 Mode: Falling Edge
                  GICR|=(0<<INT1) | (0<<INT0) | (1<<INT2);
                  MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                  MCUCSR=(0<<ISC2);
                  GIFR=(0<<INTF1) | (0<<INTF0) | (1<<INTF2);


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


                  // Global enable interrupts
                  #asm("sei")
                  lcd_puts("enter character:\n");
                  while (1)
                  }
                  {
                  جدیدترین ویرایش توسط Mahdi_e.n; ۲۰:۵۱ ۱۳۹۸/۰۶/۲۹.

                  دیدگاه


                    #10
                    پاسخ : مشکل در تنظیم پورت اتصال lcd

                    نوشته اصلی توسط Mahdi_e.n نمایش پست ها

                    باشه.ممنون
                    دوباره به مشکل مشابهی برخوردم که معلومه مشکل از سخت افزاره اما هرچی چک میکنم نمیفهمم!!!
                    برای خوندن keypad توی عکس هروقت که وقفه دریافت کردم مقدار یک رو روی پایه های افقی keypad شیفت میدم و نتیجه رو نگاه میکنم ولی در عمل ستون اول درست کار نمی کنه و همه ی کلیدهای این ستونو ردیف اول درنظر میگیره!!!
                    همیچنین طبق برنامه باید با هربار فشردن کلید یک بار خونده شه ولی با زدن هرکلید چند بار خونده میشه و اگه دستمو نگه دارم تا وقتی که نگه دارم میخونه!



                    #include <mega16.h>
                    #include <delay.h>
                    // Alphanumeric LCD functions
                    #include <alcd.h>
                    #include <stdio.h>


                    // Declare your global variables here
                    flash char shift[4]={0xfe,0xfd,0xfb,0xf7};
                    flash char layout[4][4]={'7','8','9','/',
                    '4','5','6','*',
                    '1','2','3','-',
                    'c','0','=','+',};
                    int i=0,j=0;
                    char st[20];
                    // External Interrupt 2 service routine
                    interrupt [EXT_INT2] void ext_int2_isr(void)
                    {
                    // Place your code here

                    int row,column=-1;
                    for(row=0;row<4;row++)
                    {
                    PORTD=shift[row];
                    if(PIND.4==0){column=0;}
                    if(PIND.5==0){column=1;}
                    if(PIND.6==0){column=2;}
                    if(PIND.7==0){column=3;}
                    if(column!=-1)
                    {
                    char data;
                    data= layout[row][column];
                    lcd_clear();
                    sprintf(st,"column=%d\nrow=%d",column,row);
                    lcd_puts(st);
                    /*if(data!=0)
                    {
                    if(data=='c')
                    lcd_clear();
                    else
                    lcd_putchar(data);
                    } */

                    break;
                    }


                    }
                    PORTD=0xf0;
                    }


                    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=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
                    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
                    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);


                    // 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=Out Bit2=Out Bit1=Out Bit0=Out
                    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
                    // State: Bit7=P Bit6=P Bit5=P Bit4=P Bit3=0 Bit2=0 Bit1=0 Bit0=0
                    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: Off
                    // INT2: On
                    // INT2 Mode: Falling Edge
                    GICR|=(0<<INT1) | (0<<INT0) | (1<<INT2);
                    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                    MCUCSR=(0<<ISC2);
                    GIFR=(0<<INTF1) | (0<<INTF0) | (1<<INTF2);


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


                    // Global enable interrupts
                    #asm("sei")
                    lcd_puts("enter character:\n");
                    while (1)
                    [FONT=Yekan]}
                    {

                    [/FONT]
                    [FONT=Yekan]}[/FONT]
                    دوست عزیز اون گیت and هستش! شما باید جاش or بذارید که اگر هر کلیدی فشار داده شد وقفه تولید بشه. با and درست کار نمیکنه

                    Sent from my LG-H870S using Tapatalk

                    دیدگاه


                      #11
                      پاسخ : مشکل در تنظیم پورت اتصال lcd

                      نوشته اصلی توسط hossein.m98 نمایش پست ها
                      دوست عزیز اون گیت and هستش! شما باید جاش or بذارید که اگر هر کلیدی فشار داده شد وقفه تولید بشه. با and درست کار نمیکنه

                      Sent from my LG-H870S using Tapatalk
                      نه من چهار پایه ی آخر پورت d رو پول آپ کردم و چهار تای اول رو صفر و وقفه هم با لبه پایین رونده فعال میشه.
                      برنامه توی پروتِوس درست کار میکنه پس فکر نکنم مشکل از این باشه!

                      دیدگاه


                        #12
                        پاسخ : مشکل در تنظیم پورت اتصال lcd

                        نوشته اصلی توسط Mahdi_e.n نمایش پست ها
                        نه من چهار پایه ی آخر پورت d رو پول آپ کردم و چهار تای اول رو صفر و وقفه هم با لبه پایین رونده فعال میشه.
                        برنامه توی پروتِوس درست کار میکنه پس فکر نکنم مشکل از این باشه!
                        بله حق با شماس و من اشتباه کردم.
                        برنامه شما رو چک کردم ولی حداقل من اشکال خاصی توش پیدا نکردم به غیر از چند مورد ریز که فکر نکنم مشکلی ایجاد کرده باشن. اول از همه سعی کنید سرویس وقفه فقط اختصاص داده شده باشه به کارای ساده مثل تنظیم کردن یک پرچم و کارهای اصلی در قسمت main انجام بشه(با چک کردن همون پرچم). کاری مثل نوشتن روی lcd و استفاده از sprintf برای سرویس وقفه بیش از حد سنگینه.
                        نکته بعدی بی کیفیت بودن کی پدهای توی بازاره؛ من خودم با همچین مشکلاتی قبلا برخورد داشتم که مثلا ردیفی درست کار نکنه.احتمالا مشکلات شما هم باید ناشی از همین باشه. ضمنا باید برای نویز روی کلیدها هم فکری بکنید. همین نویز و سرعت بالای میکروکنترلر باعث میشه کیپد چند بار اسکن بشه.
                        این مواردی که گفتم تصحیح کنید؛ منم سعی میکنم برنامتو چک کنم. اگر به مشکلی برخورد کردم بهتون میگم.
                        جدیدترین ویرایش توسط hossein.m98; ۲۲:۰۳ ۱۳۹۸/۰۶/۲۹. دلیل: تصحیح اشتباه

                        دیدگاه


                          #13
                          پاسخ : مشکل در تنظیم پورت اتصال lcd

                          222
                          نوشته اصلی توسط hossein.m98 نمایش پست ها
                          بله حق با شماس و من اشتباه کردم.
                          برنامه شما رو چک کردم ولی حداقل من اشکال خاصی توش پیدا نکردم به غیر از چند مورد ریز که فکر نکنم مشکلی ایجاد کرده باشن. اول از همه سعی کنید سرویس وقفه فقط اختصاص داده شده باشه به کارای ساده مثل تنظیم کردن یک پرچم و کارهای اصلی در قسمت main انجام بشه(با چک کردن همون پرچم). کاری مثل نوشتن روی lcd و استفاده از sprintf برای سرویس وقفه بیش از حد سنگینه.
                          نکته بعدی بی کیفیت بودن کی پدهای توی بازاره؛ من خودم با همچین مشکلاتی قبلا برخورد داشتم که مثلا ردیفی درست کار نکنه.احتمالا مشکلات شما هم باید ناشی از همین باشه. ضمنا باید برای نویز روی کلیدها هم فکری بکنید. همین نویز و سرعت بالای میکروکنترلر باعث میشه کیپد چند بار اسکن بشه.
                          این مواردی که گفتم تصحیح کنید؛ منم سعی میکنم برنامتو چک کنم. اگر به مشکلی برخورد کردم بهتون میگم.
                          خیلی ممنون.خودم هم به این نتیجه رسیدم که احتمالا مشکل از کیپد باشه!
                          برای حل مشکل نویز راه حلی سراغ دارید!؟

                          دیدگاه


                            #14
                            پاسخ : مشکل در تنظیم پورت اتصال lcd

                            نوشته اصلی توسط Mahdi_e.n نمایش پست ها
                            222
                            خیلی ممنون.خودم هم به این نتیجه رسیدم که احتمالا مشکل از کیپد باشه!
                            برای حل مشکل نویز راه حلی سراغ دارید!؟
                            سرچ کنید توی اینترنت مطلب زیاده. البته دقیق نمیتونم بگم اینجا هم همچین اتفاقی میوفته یانه. اگر همونطوری که گفتم از سرویس وقفه برای ست کردن پرچم استفاده کنید و توی main تصمیم گیری ها صورت بگیره، احتمالا این مشکل هم حل بشه.

                            دیدگاه

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