اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط سریال با lpc1768

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

    مشکل در ارتباط سریال با lpc1768

    سلام خدمت همه ی دوستان.
    یه مشکل عجیب واسم پیش اومده.
    من با lcp1768 یه سیگنال pwm درست کردم. و به صورت استاتیک (به طور مستقیم) دیوتی سایکل را مشخص کردم و برنامه رو اجراکردم. هیچ مشکلی هم نداشتم.
    بعد خواستم که دیوتی سایکل را از طریق* usart تغییرش بدم ولی توی بعضی از بازه ها سیگنالم قطع میشه.
    مثلا برای دیوتی سایکل مقادیر بالای 50% را به خوبی میشه تغییر داد ولی زیر 50%* را وقتی وارد میکنم سیگنال قطع میشه.
    یا مثلا گاهی اوقات من عدد 100 را توی ترمینال وارد میکنم و اینتر را میزنم ولی میکرو عدد 10 رو به جای 100 میخونه.

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

    یه سوال دگ هم داشتم.
    من اگه بخوام با توابع کتاب خانه stdio مثل scanf یک متن را از پورت سریال بخونم چطوری باید تعیین کنم که این تابع متن کدوم پورت را بره بخونه؟ یا روی کدوم پورت اطلاعات بریزه؟

    ممنون میشم راهنمایی کنید.

    #2
    پاسخ : مشکل در ارتباط سریال با lpc1768

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

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط سریال با lpc1768

      نوشته اصلی توسط magician نمایش پست ها
      بهترین راه برای حل اینجور مشکلات اینه که شما برنامه ت رو خودت بشینی دیباگ کنی
      ببین عددی که از طریق uart میفرستی به میکرو دقیقا چه اتفاقی میفته براش که سیگنال قطع میشه. همه مراحل رو دنبال کن. مشکل عجیب و غریبی نباید باشه.
      و نکته دیگه این که تجربه نشون داده بهترین توابع توابعی هستن که خودت مینویسیشون. هم مکانیسم عملکرد رو خودت بهتر درک میکنی و هم اینکه بعدا بهتر ایرادات کار رو میفهمی. خیلی دنبال توابع استاندارد c نباش
      ممنون از راهنمایی تون

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      اینم کد:
      کد:
        void uart0_init( void )
         {
          uint16_t usFdiv; 
          LPC_GPIO0->FIODIR|=(1<<2); //P0.2 Config As Output 
          LPC_PINCON->PINSEL0|=1<<4;//TXD0 
          LPC_GPIO0->FIOSET|=1<<2;//SET HIGH LEVEL FOR IDEL 
          LPC_GPIO0->FIODIR&=~(1<<3); //P0.3 Config As Input 
          LPC_PINCON->PINSEL0|=1<<6;//RXD0 
          LPC_PINCON->PINMODE0|=0<<6;//pull-up
          LPC_SC->PCONP |=(1<<3);/*Open UART0 power control bit*/
          //DATABIT=8-bit--STOPBIT=1 stop bit--PARITY=NONE
          LPC_UART0->LCR=3<<0|0<<2|0<<3|1<<7;
           usFdiv = (24000000/ 16) / 9600;/* Set baud rate*/
          LPC_UART0->DLM  = usFdiv / 256;
          LPC_UART0->DLL  = usFdiv % 256; 
          LPC_UART0->LCR=3<<0|0<<2|0<<3;
          LPC_UART0->FCR  = 0x06;
          return;
         }
      int putchar( unsigned char data ){while (!(LPC_UART0->LSR & 0x20));return (LPC_UART0->THR = data);}
      void puts(unsigned char data[]){unsigned int j=0;for(j=0;;j++){if(data[j]==0){return;}else putchar(data[j]);}}
      unsigned char getchar(void){while (!(LPC_UART0->LSR & 0x01));return (LPC_UART0->RBR);}
      و اینم قسمت تنظیم فرکانس یا دیوتی سایکل pwm
      کد:
      set=getchar();
              putchar(set);
      
              if(set!=13){buff[c]=set;c++;}
              if(set==13)
              {
                  buff[c+1]='\0';c=0;
                 ;
                  pwm1_init(atoi(buff),50);
                  buff[0]='\0';
              }

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط سریال با lpc1768

        دوست من سلام
        ولی من میگم همیشه دنبال استاندارد باش
        برای ارسال دیتا به سمت میکرو و دریافت اون استاندارد نداری - واسه همین مشکل حل نمییشه
        همینطوری شانسی میری و از بافر ورودی سریال اطلاعات رو میخونی

        دیدگاه


          #5
          پاسخ : مشکل در ارتباط سریال با lpc1768

          سلام.
          چیزی که برنامه شما فهمیدم اینکه حداکثر مقدار pwm برابر 50 هستش پس برای اینکه دیتوی سایکل 100 در صد داشته باشیم باید مقدار وارد شده برابر 50 باشد باشد ولی شما مقدار بیشتر 50 وارد می کنید البته ای کاش کل برنامه اینجا می گذاشتید تا بهتر بتونیم کمک کنیم.

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط سریال با lpc1768

            نوشته اصلی توسط MM320 نمایش پست ها
            سلام.
            چیزی که برنامه شما فهمیدم اینکه حداکثر مقدار pwm برابر 50 هستش پس برای اینکه دیتوی سایکل 100 در صد داشته باشیم باید مقدار وارد شده برابر 50 باشد باشد ولی شما مقدار بیشتر 50 وارد می کنید البته ای کاش کل برنامه اینجا می گذاشتید تا بهتر بتونیم کمک کنیم.
            این پروژه ماله خیلی وقت پیش واسه همین دقیقا یادم نیست پروژه را کجا سیو کردم.
            ولی تابع pwm1_init دو پارامتر در ورودیش دریافت میکنه که اولیش فرکانس هست و دومیش دیوتی سایکل.
            کلا من توی دریافت عدد از سریال مشکل دارم.
            مثلا اگه عدد 100 را به عنوان فرکانس pwm روی سریال به میکرو بفرستم فرکانس pwm برابر با 100 هرتز میشه حالا اگه عدد 10 رو بفرستم دگ تغییری توی سیگنال اعمال نمیشه. مثله این میمونه که بافر rx تخلیه نمیشه.
            واگه به ارسال عدد 10 ادامه بدم میکرو هنگ میکنه

            دیدگاه

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