قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 15-10-2013, 12:11 PM المشاركة 1   
ha أين مشكله في كود uart Twitter FaceBook Google+



سلام عليكم
اخواني عندي مشكلة في ارسال البيانات عبر uart
اذا ارسلت كلمة hasan مفروض تظهر على بورت d قيمة 0xaa لمدة ثانيه وبعدها ينطفئ
مشكلة هي\
اذا ارسل اول مرة كلمة hasan يعمل بشكل طبيعي ويرسلي كلمة yes
ولكن بعدها من أعيد ارسال كلمة مرة اخرى لايقبلها ويرسل كلمة no
وبعد محاولة خامسه يقبل كلمه
اي اذا قبل كلمه فان بعدها لازم ارسل كلمة 5 مرات حتى يقبلها مرة اخرى
ارجو بيان هل يوجد مشكله في كود
علما جربت ذلك عملي وكانت نفس نتيجة!
http://arabsh.com/files/0c374d4f6cf5/uart_test-rar.html

هذا هو كود
كود:
/*
 * Project name:
     UART (Simple usage of UART module library functions)
 * Copyright:
     (c) Mikroelektronika, 2011.
 * Revision History:
     20110929:
       - initial release (FJ);
 * Description:
     This code demonstrates how to use uart library routines. Upon receiving
     data via RS232, MCU immediately sends it back to the sender.
 * Test configuration:
     MCU:             PIC18F45K22
                      http://ww1.microchip.com/downloads/en/DeviceDoc/41412D.pdf
     Dev.Board:       EasyPIC7 - ac:UART
                      http://www.mikroe.com/easypic/
     Oscillator:      HS-PLL 32.0000 MHz, 8.0000 MHz Crystal
     Ext. Modules:    None.
     SW:              mikroC PRO for PIC
                      http://www.mikroe.com/mikroc/pic/
 * NOTES:
     - Turn on RX and TX UART switches (SW1.1 and SW2.1). (board specific)
     - Put RX and TX UART jumpers (J3 and J4) in RS-232 or USB position,
       depending on your choice (board specific).
 */

char uart_rd , x=0;
char output[5];
void interrupt()
{
 if (UART1_Data_Ready()) {     // If data is received,
     uart_rd = UART1_Read();     // read the received data,
    //UART1_Write(uart_rd);       // and send data via UART*/
      output[x]=uart_rd;
      x++;
    }
 }
void main() {
  RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts
  ANSELC = 0;                     // Configure PORTC pins as digital
   ANSELd = 0;                     // Configure PORTd pins as digital
   trisd=0;
   portd=0;
  UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

  UART1_Write_Text("Start");
  UART1_Write(13);
  UART1_Write(10);

  while (1)
  {                    

  if(x==5)
  { x=0;
   if(output[0]=='h' && output[1]=='a' && output[2]=='s' && output[3]=='a' && output[4]=='n')   //hasan
   //if( uart_rd=='a')
       {
         portd=0xaa;
         UART1_Write_Text("yes");
        delay_ms(1000);
        portd=0;
        delay_ms(1000);

       }
   else  UART1_Write_Text("NO");
    UART1_Write(13);
    UART1_Write(10);
  }
  }
}

اعلانات

somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 15-10-2013, 01:56 PM المشاركة 2   
افتراضي


السلام عليكم
كل عام وانتم بخير
غير العبارة (if(x==5
واجعلها
(if(x==4



سبحان الله العظيم سبحان الله وبحمده

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 15-10-2013, 02:21 PM المشاركة 3   
افتراضي


السلام عليكم
كل عام وانتم بخير
غير العبارة (if(x==5
واجعلها
(if(x==4



سبحان الله العظيم سبحان الله وبحمده
سلام عليكم
كل عام وانتم بالف خير " عيد سعيد"
اخي كريم اذا جعلت (if(x==4 فانة لايستقبل حرف n ودائما يرسلي no
لو تلاحظ بكود الانتربت يتم جمع x بواحد بعد قراءه البيانات وطالما انا بديت من x=0 وكلمة hasan هي 5 حروف لذا لما تصبح قيمة x=4 فانة يقرا حرف اخير وبعدها تزداد x بواحد فيصبح عندها x=5 هنا من مفروض البيانات خزنت بشكل كامل عندها جعلت البك يختبر وكذلك جعلت x=0
ولااعرف يستقبل كلمة مرة واحدة وبعدها ارسل له نفس كلمة لايقبلها حتى ارسل كلمة لمره خامسة وهكذا الامر يحدث بشكل منظم


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 16-10-2013, 02:08 AM المشاركة 4   
افتراضي


اخي جرب اضافة كود لدالة المقاطعة بحيث يعيد ارسال كل حرف يستقبل لكي ترى كيف تصله الرسالة لعلك تهتدي للخلل


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 16-10-2013, 03:41 AM المشاركة 5   
افتراضي


اخي جرب اضافة كود لدالة المقاطعة بحيث يعيد ارسال كل حرف يستقبل لكي ترى كيف تصله الرسالة لعلك تهتدي للخلل
اخي كريم اولا اشكرك جزيل شكر
هو يرفض الامر ارسال داخل دالة الانتربت لربما انها مخصصه فقط لعمل مقاطعة او لانني قمت بالغاء الانتربت خلال الارسال
http://img02.arabsh.com/uploads/imag...424362f201.png
ولكني وضعت الامر الارسال لما يختبر كلمه هو فعلا يرسل كلمة التي ارسلتها اليه بالضبط
يوجد استجابه للمشروع بدء يتقبل كلمة وهذا كود من جديد
كود:
/*
 * Project name:
     UART (Simple usage of UART module library functions)
 * Copyright:
     (c) Mikroelektronika, 2011.
 * Revision History:
     20110929:
       - initial release (FJ);
 * Description:
     This code demonstrates how to use uart library routines. Upon receiving
     data via RS232, MCU immediately sends it back to the sender.
 * Test configuration:
     MCU:             PIC18F45K22
                      http://ww1.microchip.com/downloads/en/DeviceDoc/41412D.pdf
     Dev.Board:       EasyPIC7 - ac:UART
                      http://www.mikroe.com/easypic/
     Oscillator:      HS-PLL 32.0000 MHz, 8.0000 MHz Crystal
     Ext. Modules:    None.
     SW:              mikroC PRO for PIC
                      http://www.mikroe.com/mikroc/pic/
 * NOTES:
     - Turn on RX and TX UART switches (SW1.1 and SW2.1). (board specific)
     - Put RX and TX UART jumpers (J3 and J4) in RS-232 or USB position,
       depending on your choice (board specific).
 */

char uart_rd , x=0 , y=0;
char output[5];
void interrupt()
{
 if (UART1_Data_Ready()) {     // If data is received,
     uart_rd = UART1_Read();     // read the received data,
    //UART1_Write(uart_rd);       // and send data via UART*/
      output[x]=uart_rd;
      x++;
    }
 }
void main() {
  RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts
  ANSELC = 0;                     // Configure PORTC pins as digital
   ANSELd = 0;                     // Configure PORTd pins as digital
   trisd=0;
   portd=0;
  UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

  UART1_Write_Text("Start");
  UART1_Write(13);
  UART1_Write(10);

  while (1)
  {                     // Endless loop

  if(x==5)
     {
       for (y=0;y<5;y++)UART1_Write(output[y]);
        UART1_Write(13);
       UART1_Write(10);
       if(output[0]=='h' && output[1]=='a' && output[2]=='s' && output[3]=='a' && output[4]=='n')   //hasan
       //if( uart_rd=='a')
           {
             portd=0xaa;
             UART1_Write_Text("yes");
             delay_ms(1000);
             portd=0;
             delay_ms(1000);

            }
       else {
              UART1_Write_Text("NO");

             }
       x=0;
       UART1_Write(13);
       UART1_Write(10);
     }
  }
}
قمت بوضع x =0 بعد الامر if او else وكنت سابقا وضعتها فقط في داله if
الان يعمل بشكل طبيعي ولكن لم أجربه عملي سوف أجربة بشكل عملي وأعطيك النتيجة
ولكن أحيانا لما ترسله كلمة لايستجيب ولايرسل لي اي شي وهذا معناه بحاجة لزمن تاخيري بين الارسال وأخرى على ماأعتقد


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 16-10-2013 الساعة 03:47 AM

الصورة الرمزية kamprog
kamprog
:: مهندس ::
تاريخ التسجيل: Jan 2013
الدولة: gouraya tipaza algerie
المشاركات: 40
نشاط [ kamprog ]
قوة السمعة:0
قديم 16-10-2013, 05:07 PM المشاركة 6   
افتراضي


صحيح اخي الغالي كان عليك تصفير المتغير x بعد كل مرة ترسل فيها كلمة جديد


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 16-10-2013, 05:35 PM المشاركة 7   
افتراضي


صحيح اخي الغالي كان عليك تصفير المتغير x بعد كل مرة ترسل فيها كلمة جديد
شكرا لك اخي كريم على مرورك
وجدت هناك طريقه أخرى وهي معتمدة أكثر سأطرحها ان شالله في مشروع تحكم بألاجهزه بواسطة هاتف
سأحاول اشرح طريقة بأكثر تفصيل بمشيئه الله على هذا الرابط
http://www.qariya.com/vb/showthread.php?t=135833


عبدالله نعمان
:: مهندس متواجد ::
تاريخ التسجيل: May 2006
المشاركات: 176
نشاط [ عبدالله نعمان ]
قوة السمعة:0
قديم 21-10-2013, 03:41 PM المشاركة 8   
افتراضي


لدي حساس مسافه يرسل البيانات عبر اليو ارت علي شكل 2 بلوك اسكي كود
اي يرسل 8 بت وبجوارها 8 بت اخري
فكيف يمكنني قراءة هذه البيانات؟؟

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:14 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025