اطلاعیه

Collapse
No announcement yet.

مشکل در کار با سیم 908

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

    مشکل در کار با سیم 908

    سلام دوستان
    من مدتی هست می خوام سیم 908 رو با میکرو ARM LPC1768 راه اندازی کنم و تا الان هم به جاهایی رسیدم و می تونم دستور ارسال کنم و جواب بگیرم
    ولی در دریافت یک مقدار مشکل به وجود میاد ،بدین صورت که مثل اگه 10 بار دستوری مانند ATE0 رو به میکرو بدیم OK میفرسته ولی اگر بخواهیم این OK ها رو دریافت کنیم و روی ال سی دی نشون بدیم از 10 تا 5 تاش رو دریافت می کنه اون هم یک در میان!!!!!!!! یعنی یه دونه دریافت میکنه یه دونه دریافت نمی کنه و....
    این هم کدش
    کد:
    int main(void)
    {
    	 uint8_t str1[20],str5[20],str2[20];
    	 //--------------------- Uart0 setting --------------- 
    		UART0_Init();
      //-------------------- Uart2 setting ---------------- 
     	UART2_Init();
      //---------------------------------------------------
    	lcd_init();
    	lcd_clear();
    
     
      dir_led_bord;
    		led_blink();
    		//-------------------------------------------
    		new_line();
      while (1) 
    	 {
    			UART0_SendString("AT\r");
    			UART0_Getstring(str1);
    			lcd_gotoxy(1,2);
    			lcd_putsf(str1);
    			UART0_SendString(str1);
    			UART0_SendString("\n");
    			Delay(5000);
    
    		UART0_SendString("ATE0\r");
    		UART0_Getstring(str1);
    		lcd_gotoxy(1,2);
    		lcd_putsf(str1);
    		UART0_SendString(str1);
    		UART0_SendString("\n");
    		Delay(5000);
    
    			UART0_SendString("AT\r");
    			UART0_Getstring(str1);
    			lcd_gotoxy(1,2);
    			lcd_putsf(str1);
    			UART0_SendString(str1);
    			UART0_SendString("\n");
    			Delay(5000);
    این هم فانکشن هاش
    کد:
    //*********************** Functions ************************
    void Delay (uint32_t Time)
    {
      uint32_t i;
      
      i = 0;
      while (Time--) {
        for (i = 0; i < 5000; i++);
      }
    }
    /**********************************************************
    ** Function name:    UART0_SendByte
    ***********************************************************/
    int UART0_SendByte (int ucData)
    {
    	while (!(LPC_UART0->LSR & 0x20));  // when transfer date set THRE
      return (LPC_UART0->THR = ucData);
    }
    
    /*----------------------------------------------------------------------------
     Read character from Serial Port  (blocking read)
     *----------------------------------------------------------------------------*/
    int UART0_GetChar (void) 
    {
     	while (!(LPC_UART0->LSR & 0x01)); // when receive data set RDR
     	return (LPC_UART0->RBR);
    }
    
    /******************************************************************
    ** Write character to Serial Port
    *******************************************************************/
    void UART0_SendString (unsigned char *s) 
    {
     	while (*s != 0) 
    	{
      		UART0_SendByte(*s++);
    	}
    }
    // -------------------------------------
    int UART0_Getstring (char *str) 
    {
    	int i = 0;
     char *temp = str;
    	
    	do{
    		*temp = UART0_GetChar();
    		i++;
    	}while(*(temp++) != 0x0A);
    	*(temp-1) = 0;
     	return i;
    }
    اول ها باودش 115200 بود کار نمی کرد و شکلک نشون میداد ولی الان که گذاشتم روی 105200 درست شده و درست میفرسته ،در خود برنامه رجیستر هاش رو نگاه می کردم همون نزدیک 115200 بود ،ممکنه مشکل از این باشه؟؟
    ممنون میشم اگه چیزی میدونید راهنمایی کنید
    پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
    ------------------------------------------------------------ - - -
    صبرت که تمام شد نرو!
    "معرفت"
    تازه از آن لحظه آغاز می شود...

    #2
    پاسخ : مشکل در کار با سیم 908

    سلام
    اگه تنظیمات باود ریت SIM908 رو دستکاری نکرده باشی به صورت پیش فرض رو حالت Auto هست و با هر سرعتی میتونی تستش کنی
    برنامت خیلی عجیبه کلی اضافه جات داره
    اولا بهتره به جای r\ از n\ استفاده کنی دوما بعد دریافت رشته نمیدونم چرا خود رشته دریافتی رو دوباره ارسال میکنی
    این کارا اشتباه هست
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

    دیدگاه


      #3
      پاسخ : پاسخ : مشکل در کار با سیم 908

      نوشته اصلی توسط علی ایمانی فر
      سلام
      اگه تنظیمات باود ریت SIM908 رو دستکاری نکرده باشی به صورت پیش فرض رو حالت Auto هست و با هر سرعتی میتونی تستش کنی
      برنامت خیلی عجیبه کلی اضافه جات داره
      اولا بهتره به جای r\ از n\ استفاده کنی دوما بعد دریافت رشته نمیدونم چرا خود رشته دریافتی رو دوباره ارسال میکنی
      این کارا اشتباه هست
      سلام اقا ممنون از پاسختون
      در مورد باود ریت که من از طریق simulator کیل چک کردم تقریبا درست در میومد و مشکل شکلک های نامفهوم حل شد (یعنی به نظرم مشکل باودریت برطرفه و درست کار می کنه)
      در ضمن فکر کنم بله تنظیمات سیم 908 رو دستکاری کردم گذاشتم ipr اون رو روی 115200 ،ولی کلا در باود مشکل نیست
      در ضمن به نظر من n\ فقط میبره خط بعدی ولی r\ اینتر می زنه و سیم 908 قبول می کنه (یعنی در همه حالت هم r و هم n جدایی و هم با هم امتحان کردم) و فقط بودن r\ مهم بود و در بقیه حالات فرقی نداشت فقط اگر n\ رو می ذاشتیم می رفت خط بعدی در indigo (نوعی هایپر ترمینال برای ویندوز7) و من برای این که دستورات رو ارسال کنه تا از طریق max بتونم به کامپیوتر وصل کنم و ببینم جواب چی میاد می فرستادم، در ضمن به گفته شما در یک حالت هم این دستور فرستادن رو برداشتم و به جاش بر روی ال سی دی نمایش دادم و هیچ فرقی نداشت ولی مشکل اساسی ::->
      در دریافت یک مقدار مشکل به وجود میاد ،بدین صورت که مثل اگه 10 بار دستوری مانند ATE0 رو به sim908 بدیم OK میفرسته ولی اگر بخواهیم این OK ها رو دریافت کنیم و روی ال سی دی نشون بدیم(از طریق میکرو ارم) از 10 تا 5 تاش رو دریافت می کنه اون هم یک در میان(دقیقا یک در میان !! ) !!!!!!!! یعنی یه دونه دریافت میکنه یه دونه دریافت نمی کنه و....
      کد هاش رو هم بالا گذاشتم...
      اگه باز مساله ای بود بگید توضیح بدم فقط راهنمایی بفرمایید
      ممنون
      پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
      ------------------------------------------------------------ - - -
      صبرت که تمام شد نرو!
      "معرفت"
      تازه از آن لحظه آغاز می شود...

      دیدگاه


        #4
        پاسخ : مشکل در کار با سیم 908

        خب
        ببین تو یسری کد اضافی ارسال میکنی
        مثلا وقتی رشته رو دریافت میکنی و میریزی توی str دوباره اونو ارسالش میکنی روی پورت سریال که این کار اشتباهه
        اینکار اینجا کردی
        کد:
        UART0_Getstring(str1);
        			lcd_gotoxy(1,2);
        			lcd_putsf(str1);
        			UART0_SendString(str1);
        			UART0_SendString("\n");
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه


          #5
          پاسخ : پاسخ : مشکل در کار با سیم 908

          نوشته اصلی توسط علی ایمانی فر
          خب
          ببین تو یسری کد اضافی ارسال میکنی
          مثلا وقتی رشته رو دریافت میکنی و میریزی توی str دوباره اونو ارسالش میکنی روی پورت سریال که این کار اشتباهه
          اینکار اینجا کردی
          کد:
          UART0_Getstring(str1);
          			lcd_gotoxy(1,2);
          			lcd_putsf(str1);
          			UART0_SendString(str1);
          			UART0_SendString("\n");
          تشکر اقا الان دقیقا فهمیدم منظورتون چیه
          الان نمی تونم تست کنم ولی بعدا تست می کنم به نظرم 90 درصد مشکل همینه!!!!
          باز هم خیلی خیلی خیلی ممنون
          من بی دقتی کرده بودم
          پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
          ------------------------------------------------------------ - - -
          صبرت که تمام شد نرو!
          "معرفت"
          تازه از آن لحظه آغاز می شود...

          دیدگاه


            #6
            پاسخ : مشکل در کار با سیم 908

            اقا من فکر کردم در داخل تابع دوباره ارسال می کنه ولی اینطور نبود
            قسمت ارسال کاراکتر دریافتی رو برداشتم و فقط روی ال سی دی نمایش می داد که باز به همینطور بود
            و همچنین باودریت رو هم روی حالت auto تنظیم کردم...
            لطفا راهنمایی بفرمایید
            ممنون
            پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
            ------------------------------------------------------------ - - -
            صبرت که تمام شد نرو!
            "معرفت"
            تازه از آن لحظه آغاز می شود...

            دیدگاه


              #7
              پاسخ : مشکل در کار با سیم 908

              نوشته اصلی توسط elec200
              اقا من فکر کردم در داخل تابع دوباره ارسال می کنه ولی اینطور نبود
              قسمت ارسال کاراکتر دریافتی رو برداشتم و فقط روی ال سی دی نمایش می داد که باز به همینطور بود
              و همچنین باودریت رو هم روی حالت auto تنظیم کردم...
              لطفا راهنمایی بفرمایید
              ممنون
              ببین
              دونه دونه دستور ارسال کن و پاسخشو بخون بعد روی LCD نمایش بده ببین چی میگیری
              در ضمن یادم رفت بهت بگم. توی این ماژولا هر چیزی به ماژول ارسال کنی (همون AT Command ها منظورمه) ماژول عینا برات همونو برمیگردونه پس باید ی بار خودت دستور رو بخونی از روی پورت و ی بارم پاسخشو
              مثلا این کارو کن
              کد:
              UART0_SendString("ATE0\r");
              UART0_Getstring(str1);
              UART0_Getstring(str2);
              زندگی یعنی امید و حرکت
              کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
              سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
              برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
              به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

              دیدگاه


                #8
                پاسخ : پاسخ : مشکل در کار با سیم 908

                نوشته اصلی توسط علی ایمانی فر
                ببین
                دونه دونه دستور ارسال کن و پاسخشو بخون بعد روی LCD نمایش بده ببین چی میگیری
                در ضمن یادم رفت بهت بگم. توی این ماژولا هر چیزی به ماژول ارسال کنی (همون AT Command ها منظورمه) ماژول عینا برات همونو برمیگردونه پس باید ی بار خودت دستور رو بخونی از روی پورت و ی بارم پاسخشو
                مثلا این کارو کن
                کد:
                UART0_SendString("ATE0\r");
                UART0_Getstring(str1);
                UART0_Getstring(str2);
                اقا من کد رو بدین صورت پروگرم کردم
                کد:
                  while (1) 
                	 {
                			lcd_clear();
                			UART0_SendString("ATE1");
                			new_line();
                			//Delay(1000);			
                			UART0_Getstring(str1);
                			UART0_Getstring(str2);
                			lcd_gotoxy(1,1);
                			lcd_putsf(str1);
                			
                			lcd_gotoxy(1,6);
                			lcd_putsf(str2);
                			 UART0_Getstring(str3);
                			lcd_gotoxy(1,12);
                			lcd_putsf(str3);
                			Delay(2000);
                
                			//UART0_SendString(str1);
                			//UART0_SendString("\n");
                		
                			lcd_clear();
                			UART0_SendString("AT");
                			new_line();
                			UART0_Getstring(str1);
                			lcd_gotoxy(2,1);
                			lcd_putsf(str1);
                			UART0_Getstring(str2);
                			lcd_gotoxy(2,6);
                			lcd_putsf(str2);
                			UART0_Getstring(str3);
                			lcd_gotoxy(2,12);
                			lcd_putsf(str3);
                			//UART0_SendString(str1);
                			//UART0_SendString("\n");
                			Delay(2000);
                و در هر بار اجرا ال سی دی فقط رشته های اول و دوم رو دریافت می کرد و برای بار اول str1 اولین دستور رو نمی گرفت (تاکید می کنم فقط برای اولین بار که میکرو ریست میشد) و بعد از اون به ترتیب یک همچین چیزی چاپ می شد(روی ال سی دی که البته سمت چپیه str1 و سمت راستیه str2 است و str3 اصلا چاپ نمی شد چیزی!!! یعنی که هیچی نمی گرفت)
                OK $ATE1&
                OK $AT&
                و بگم که برای اولین بار اون ok خط اول چاپ نمی شد
                به نظر من سیم 908 اولین رشته رو نمی گیره و از رشته دوم شروع می کنه یعنی اول ATE1 خط اول و بعد ok رو در دریافت دستور بعدی می نویسه
                نمی دونم تونستم برسونم یا نه؟؟؟
                و من نمی دونم مشکل چیه
                حتی اگر ATE0 نوشته شود (یعنی دیگه تکرار نشه دستور) در دریافت رشته دوم یعنی str2 دریافت انجام میشه و ok نمایش داده میشه و دریافت سوم گیر می کنه !!!! حتی بعد از دستور delay هم گذاشتم اما نشد!!!
                لطفا راهنمایی بفرمایید
                ممنون
                پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
                ------------------------------------------------------------ - - -
                صبرت که تمام شد نرو!
                "معرفت"
                تازه از آن لحظه آغاز می شود...

                دیدگاه


                  #9
                  پاسخ : مشکل در کار با سیم 908

                  سلام اقا مشکل شما باود ریت هست.گول سیمولاتور رو نخورید.سیم رو تنظیم کارخانه کن و بعد با 9600 امتحان کن.این که با سیمولاتور درست میگیرید دلیل نداره با سیم هم درست بگیرید.با کوچک ترین خطایی در باود ریت همین مشکل پیش میاد که یکی در میون کار میکته

                  دیدگاه


                    #10
                    پاسخ : مشکل در کار با سیم 908

                    اقا همین الان باود سیم 908 رو روی 0 یعنی auto تنظیم کردم ولی هیچ فرقی نکرد اصلا هیچی...
                    میکرو رو روی 9600 یعنی شد حدود 9550 و سیم 908 هم اتومات ... ولی هیچ فرقی نکرد ...
                    لطفا راهنمایی بفرمایید
                    ممنون
                    پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
                    ------------------------------------------------------------ - - -
                    صبرت که تمام شد نرو!
                    "معرفت"
                    تازه از آن لحظه آغاز می شود...

                    دیدگاه


                      #11
                      پاسخ : مشکل در کار با سیم 908

                      اولین دستور ارسالی بعد روشن شدن به سیم908 باید at باشد و بعد دیگر دستورات ارسال شود

                      دیدگاه

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