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

   

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 06-08-2013, 10:56 PM المشاركة 49   
افتراضي



أهلا،،


بما ان الطرف ECHO هو من سيحدد تفعيل التايمر والغاء تفعليه،،حسب ما افهم من خطوات عمل الموديول،،فضلت ان احاول كتابة كود باستخدام المقاطعات الخارجية،،"انتربتس "،،

اساس عمله ،،هو عند تغير الحالة من صفر الى1 ،،يتم تشغيل التايمر،، عند التغير من 1 إلىصفر ،، يتم اطفاء التايمر،،


هل هذه الخطوات صحيحة ،؟،،وماذا ينقص الكود؟


كود:
#define ECHO PORTB.F0
#define TRIG PORTB.F1

// LCD module connections
 sbit LCD_RS at RB2_bit;
 sbit LCD_EN at RB3_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections


unsigned int Time;
unsigned int Distance;
char txt[14];

void interrupt()
{
if (INTCON.INTF)    // IF RB0 is occured
                  {
                  if ( ECHO == 1) {
                                   INTCON.INTF = 0;  // make the interrupt to 0 again
                                   OPTION_REG.INTEDG=0; // interrupts activated at falling edge
                                   T1CON.TMR1ON =1;       //enable timer
                                  }

                  if ( ECHO == 0) {
                                   INTCON.INTF = 0;  // make the interrupt to 0 again
                                   OPTION_REG.INTEDG=1; // interrupts activated at rising edge
                                   T1CON.TMR1ON =0;       //disable timer
                                   Time = (TMR1H<<8)+(TMR1L); // to read the value of the timer ( shift left and add )
                                   TMR1L=TMR1H=0;
                                  }
                  }

}

void main()
{

OPTION_REG.INTEDG=1;
delay_ms(500);
Lcd_Init();                 //Initialize LCD
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR);        // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);   // Cursor off
Lcd_Out(1,2,"((--Distance--))");
TRISA = 0;
TRISB.F0=1;
TRISB.F1=0;
INTCON = 0b11010000;         //  enable global interrupt, preiferal is enables , and RB0 externl interupt is enabled
T1CON =  0b00000001;         // set prescaler to 1:1 and enable timer 1.


while(1)
{
TRIG =0;
Delay_us(1000);
TRIG = 1;
delay_us(20);
TRIG = 0;
Distance = Time * 1.716 * 0.927856;

inttostr(Time,txt);  //
lcd_out(2,3,txt) ;
lcd_out(2,11,"cm") ;


}


}

اعلانات

WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 06-08-2013, 11:37 PM المشاركة 50   
افتراضي


اولا لا اشجعك في هذه المرحلة على الدخول في هذا الموضوع

حاول اولا انجاز المشروع بدون الستخدام المقاطعات ثم انتقل اليها ان كنت تحتاج ذلك

هناك اكثر من ملاحظة على البرنامج الذي كتبتة

مثلا طرقة تحويل الوقت الى جزء واحد
Time = (TMR1H<<8)+(TMR1L);

لا اعتقد ان هذذه الطريقة صحيحة
فالجزء الاعلى TMR1H طوله ثمانية بت وعند تزحيفة الى اليسار تفقد كل مافية من معلومات

......................

ان المقاطعة تعتمد على اشارة القدح .. لكن قبل ان تصل اشارة الصدى التي تنقلك الى المقاطعة قد تقوم بعملية قدح اخرى او اكثر ... ولا اعرف كيف سيتصرف المتحسس مع هذه الحالة
...............................

كما ان عملية عرض الرقم على الشاشة لن تكون متوافقة مع حصولك على قراءة جديدة ... قد تجد نفسك مضطرا الى نقل الكود الخاص بالشاشة الى المقاطعة ايضا
.............................

عموما ....

الكود السابق سيكون اسهل.... لكن لم تذكر لي ان كان قد عمل معك ام لا

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

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 07-08-2013, 03:26 AM المشاركة 51   
افتراضي


اولا لا اشجعك في هذه المرحلة على الدخول في هذا الموضوع

حاول اولا انجاز المشروع بدون الستخدام المقاطعات ثم انتقل اليها ان كنت تحتاج ذلك

هناك اكثر من ملاحظة على البرنامج الذي كتبتة

مثلا طرقة تحويل الوقت الى جزء واحد
Time = (TMR1H<<8)+(TMR1L);

لا اعتقد ان هذذه الطريقة صحيحة
فالجزء الاعلى TMR1H طوله ثمانية بت وعند تزحيفة الى اليسار تفقد كل مافية من معلومات

......................

ان المقاطعة تعتمد على اشارة القدح .. لكن قبل ان تصل اشارة الصدى التي تنقلك الى المقاطعة قد تقوم بعملية قدح اخرى او اكثر ... ولا اعرف كيف سيتصرف المتحسس مع هذه الحالة
...............................

كما ان عملية عرض الرقم على الشاشة لن تكون متوافقة مع حصولك على قراءة جديدة ... قد تجد نفسك مضطرا الى نقل الكود الخاص بالشاشة الى المقاطعة ايضا
.............................

عموما ....

الكود السابق سيكون اسهل.... لكن لم تذكر لي ان كان قد عمل معك ام لا

اهلا عزيزي ،،

بالنسبة للمقاطعات ،، انا جربت اكثر من طريقة للبرنامج السابق ،، ولكن لم يعمل بالشكل الصحيح ،، كان دائما ما يظهر لي نفس القيمة ،، على الشاشة وحتى لو قمت بتحريك الجسم ،، لا يتأثر ،،! لذلك ،، قررت العمل مع المقاطعات ،، !! ولكن يبدو انها ليست خطوة جيدة كما ذكرت ،،!


بالنسبة لطريقة حساب الوقت ،، انا قمت باختيار المتغير ليكون unsigned int وبالتالي ،،، سيكون طوله 16 بت ،، فلو قمت بازاحة البايت الاعلى من التايمر الى البايت الاعلى من المتغير ،، ثم قمت باضافة البايت الادنى ،، فسيكون هذا المتغير يحتوي على الوقت الكلي ،، !!


ولكن لحظة !!


يبدو ان الفكرة صحيحة ،، ولكن تطبيقا ليس صحيحا !!!


اعتقد انها يجب ان تكون على النحو التالي :

كود:
 Time = TMR1H;
                                   Time = (Time<<8)
                                   Time = Time +(TMR1L); // to read the value of the timer ( shift left and add )

أليست هذه الطريقة صحيحة ؟!! بحيث يتم وضع البايت الأعلى في المتغير ،، بعذ ذلك يتم ازاحة مافي المتغير إلى البايت الأعلى من المتغير نفسه ،، وبعد ذلك تتم اضافة البايت الأدنى من التايمر إلى المتغير ،، !


التعديل الأخير تم بواسطة : المظلوم بتاريخ 07-08-2013 الساعة 03:33 AM

WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 07-08-2013, 04:24 AM المشاركة 52   
افتراضي


السلام عليكم

الان طريقة الحساب صحيحة

....................................
بالنسبة للحساس افضل ان تفصل عملية لابرمجة الى مراحل حتى تقف عند النقطة التي تسبب المشكلة


لنترك اولا عملية حساب الزمن ولنكتب البرنامج الذي يقوم بالوضيفة التالية

_ نرسل نبضة القدح ونراقب الصدى ....عندما يرتفع الى 5 فولت ... نقوم بتشعيل الليد لمدة ثانية واحدة ومن ثم ارجاعه الى وضع الاطفاء .... ثم نعيد العملية ....

-- نقوم بنفس الخطوات السابقة مع نزول نبظة الصدى

--- الخطوة التالية ...ارسال اشارة القدح ومراقبة صعود اشارة الصدى ثم الدخول في دوارة و استخدام متغير في الدوارة يتم زيادة قيمتة 1 في كل دورة ... خلال هذه الدورة يتم مراقبة نزول اشارة الصدى للخروج من الدورة ... نعرض قيمة المتغير على الشاشة عند الخروج من الدورة ثم نصفر المتغير ونعيد العملية .....هذا سخلصنا من اي اشكالات قد تكون متعلقة باستخدام التايمر


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 07-08-2013, 04:29 AM المشاركة 53   
افتراضي


أهلا ،،


لو عدنا إلى الكود السابق ،،

حسنا ،، لنأخذه حبة حبة ،،،

كود:
// LCD module connections
 sbit LCD_RS at RB2_bit;
 sbit LCD_EN at RB3_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

char txt[14];
#define TRIG PORTA.F5
#define ECHO PORTA.F4


int distance;
int test;

//main function
void main() {
  delay_ms(500);
  Lcd_Init();
  delay_ms(500);                                                                    //Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                                                              // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                                                          // Cursor off
  Lcd_Out(1,2,"( Distance )");
  TRISA.F5=0;                                                                   //port b.6 as out port
  TRISA.F4=1;                                                                   //portb.7 as input from the module

إلى هنا ،، لا يوجد ما هو مهم جدا ،، مجرد أعدادات الشاشة ،، وتوضيح انه سيكون التريقر عند الطرف A5 ،، والإيكو ، عند الطرف A4 ،، حسنا ،،


نأتي للجزء الحساس قليلا :

كود:
T1CON = 0b00000000;                                                           // config timer refer page 79 of datasheet
  INTCON =0b11000000;
  PIE1 =0x01;
  /*
    >>here we use prescalor of 8, and the internal clock ,precisly fosc/4
    so one increment will be (let the crstal you use is 8mhz)
    8m/(4*8) ie 250000hz or 4us
    >>distance traveled by sound is about 343 m/s (in air at 20degrees)
    for 30 uS the sound will travel about 1 c.m.
    each 1cm ( soundwave ) = 30us
    (we have a precision of 1c.m if you need to change by calculating the number
    of increment for the patricular length and then changing the calculation
    accordingly
    >>the sound is reflected back, so we have to divide the value from timer
    with 2
  */

هنا في هذا الجزء ،، بغض النظر عن ما كتبه الشخص الذي كتب البرنامج ،، اريد ان افهم امرا ما ،،


الآن فهمنا ان سرعة الصوت 343 متر في الثانية ،، وتساوي 34300 سم في الثانية ،، وبمعرفة ان السرعة = المسافة / الزمن ،، فكل 1 سم تحتاج إلى 1/ 34300 , وهي تساوي تقريبا 30 مايكرو ثانية ،،

1سم = 30 مايكرو ثانية ! ،،


أيضا بما اننا سنستخدم المذبذب الداخلي للمايكركنترولر ( 4 ميغا هرتز ) ،، وبالتالي ،، فالديوتي سايكل ستكون 1/ 4 ميغا هرتز ،، وتساوي 250 نانو ثانية ! ،،


الآن من هاتين المعلومتين ،، كيف يمكن حساب الزمن الحقيقي ! ،، ما هو المعامل الذي يجب ان يضرب في الوقت الذي سيحتسبه التايمر ،، لإيجاد الوقت الحقيقة " مدة ارسال الموجة الصوتية وارتدادها من اقرب جسم " !! ؟


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 07-08-2013, 05:09 AM المشاركة 54   
افتراضي


أهلا ،،


لو عدنا إلى الكود السابق ،،

حسنا ،، لنأخذه حبة حبة ،،،

كود:
// LCD module connections
 sbit LCD_RS at RB2_bit;
 sbit LCD_EN at RB3_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

char txt[14];
#define TRIG PORTA.F5
#define ECHO PORTA.F4


int distance;
int test;

//main function
void main() {
  delay_ms(500);
  Lcd_Init();
  delay_ms(500);                                                                    //Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                                                              // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                                                          // Cursor off
  Lcd_Out(1,2,"( Distance )");
  TRISA.F5=0;                                                                   //port b.6 as out port
  TRISA.F4=1;                                                                   //portb.7 as input from the module

إلى هنا ،، لا يوجد ما هو مهم جدا ،، مجرد أعدادات الشاشة ،، وتوضيح انه سيكون التريقر عند الطرف A5 ،، والإيكو ، عند الطرف A4 ،، حسنا ،،


نأتي للجزء الحساس قليلا :

كود:
T1CON = 0b00000000;                                                           // config timer refer page 79 of datasheet
  INTCON =0b11000000;
  PIE1 =0x01;
  /*
    >>here we use prescalor of 8, and the internal clock ,precisly fosc/4
    so one increment will be (let the crstal you use is 8mhz)
    8m/(4*8) ie 250000hz or 4us
    >>distance traveled by sound is about 343 m/s (in air at 20degrees)
    for 30 uS the sound will travel about 1 c.m.
    each 1cm ( soundwave ) = 30us
    (we have a precision of 1c.m if you need to change by calculating the number
    of increment for the patricular length and then changing the calculation
    accordingly
    >>the sound is reflected back, so we have to divide the value from timer
    with 2
  */

هنا في هذا الجزء ،، بغض النظر عن ما كتبه الشخص الذي كتب البرنامج ،، اريد ان افهم امرا ما ،،


الآن فهمنا ان سرعة الصوت 343 متر في الثانية ،، وتساوي 34300 سم في الثانية ،، وبمعرفة ان السرعة = المسافة / الزمن ،، فكل 1 سم تحتاج إلى 1/ 34300 , وهي تساوي تقريبا 30 مايكرو ثانية ،،

1سم = 30 مايكرو ثانية ! ،،


أيضا بما اننا سنستخدم المذبذب الداخلي للمايكركنترولر ( 4 ميغا هرتز ) ،، وبالتالي ،، فالديوتي سايكل ستكون 1/ 4 ميغا هرتز ،، وتساوي 250 نانو ثانية ! ،،


الآن من هاتين المعلومتين ،، كيف يمكن حساب الزمن الحقيقي ! ،، ما هو المعامل الذي يجب ان يضرب في الوقت الذي سيحتسبه التايمر ،، لإيجاد الوقت الحقيقة " مدة ارسال الموجة الصوتية وارتدادها من اقرب جسم " !! ؟
سلام عليكم
لماذا لاتحسب زمن مثل ما مبين في رابط ادناه
http://www.qariya.com/vb/showthread....413#post776413


WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 630
نشاط [ WRHLAMDA ]
قوة السمعة:
قديم 07-08-2013, 09:08 PM المشاركة 55   
افتراضي


السلام عليكم

الاخ حسن هادي .... نحن هنا نستخدم نفس الطريقه .... شكرا على المداخلة ونتمنى منك التواصل معنا.....

.................................................. ....................
اولا .... مذبذب المتحكم 4 ميكاهيرتز .... ويقسم داخليا على 4 .... فيكون 1 ميكاهيرتز

وهذا سيكون مصدر النبظات للتايمر الذي ستزدات قيمتة بمقدار 1 مع كل نبظة

وطول هذه النبظة 1 مايكو ثانية

لكن هناك مقسم بين هذه النبظات والتايمر .... من الممكن ان يقوم بقسمة النبظات على 1 او 2 او 4 او 8 .... في البرنامج الذي وضعته انت ... المبرمج قام باستخدام المقسم على 8 .... وهذا يعني ان كل 8 نبظات ستؤدي الى زيادة مقدارها 1 في التايمر

بمعنى ان كل 1 في التايمر يساوي 8 مايكرو ثانية

لماذا استخدم المبرمج هذا الاعداد ؟؟؟؟؟

هذا يجعل التايمر يمتلئ ببطء وذلك يساعد على حساب فترات زمنية اكبر .... بمعنى اخر لو اننا لم نستخدم التايمر واستغرقت الموجة الصوتية فترة طويلة ..... فان التايمر سوف يمتلئ .... فيقوم بتصفير نفسة ذاتيا ويعيد عملية الحساب مرة ثانية .... فتكون النتيجة خاطئة .... مع ان هناك حل لهذه الحالة .... لكن المبرمج اختار ان يستخدم مقسم ليتجاوز هذه الحالة

.................................................. .

طيب الان عندنا رقم في التايمر ... كل عدد فية يساوي 8 مايكروثانية وهو يمثل الزمن اللازم للصوت لقطع المسافة ذهابا وايابا ..... نقوم بالقسمة على 2 لنحصل على زمن الذهاب فقط

زمن الذهاب = التايمر * 8مايكرو \2=التايمر *4

...........................................

بعد حساب الزمن يجب تحويلة الى مسافة ..... فتضرب في سرعة الصوت.... ولتسهل العمليات الحسابية ..... قام المبرمج بحساب الزمن اللازم لقطع مسافة مقدارها 1 سنتمتر فوجدها تساوي 30 مايكرو ثانية

الان نستطيع بسهولة حساب المسافة بقسمة الزمن على 30


المسافة = زمن الذهاب \30 ( والتي هي زمن قطع مسافة قدرها 1 سنتمتر)

النتيجة ستكون المسافة بالسنتمتر ..... وكما ترى تم انجاز عمليات الحساب وتحويل الوحدات بمعادلة بسيطة واحدة

......................................

ارجع واقول فبل الخوض في العمليات الحسابية حاول ان تعرض قيمة التايمر بجزئية العلوي والسفلي على الشاشة وملاحظة التغييرات

...................................


الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 08-08-2013, 04:20 AM المشاركة 56   
افتراضي


السلام عليكم

الاخ حسن هادي .... نحن هنا نستخدم نفس الطريقه .... شكرا على المداخلة ونتمنى منك التواصل معنا.....

.................................................. ....................
اولا .... مذبذب المتحكم 4 ميكاهيرتز .... ويقسم داخليا على 4 .... فيكون 1 ميكاهيرتز

وهذا سيكون مصدر النبظات للتايمر الذي ستزدات قيمتة بمقدار 1 مع كل نبظة

وطول هذه النبظة 1 مايكو ثانية

لكن هناك مقسم بين هذه النبظات والتايمر .... من الممكن ان يقوم بقسمة النبظات على 1 او 2 او 4 او 8 .... في البرنامج الذي وضعته انت ... المبرمج قام باستخدام المقسم على 8 .... وهذا يعني ان كل 8 نبظات ستؤدي الى زيادة مقدارها 1 في التايمر

بمعنى ان كل 1 في التايمر يساوي 8 مايكرو ثانية

لماذا استخدم المبرمج هذا الاعداد ؟؟؟؟؟

هذا يجعل التايمر يمتلئ ببطء وذلك يساعد على حساب فترات زمنية اكبر .... بمعنى اخر لو اننا لم نستخدم التايمر واستغرقت الموجة الصوتية فترة طويلة ..... فان التايمر سوف يمتلئ .... فيقوم بتصفير نفسة ذاتيا ويعيد عملية الحساب مرة ثانية .... فتكون النتيجة خاطئة .... مع ان هناك حل لهذه الحالة .... لكن المبرمج اختار ان يستخدم مقسم ليتجاوز هذه الحالة

.................................................. .

طيب الان عندنا رقم في التايمر ... كل عدد فية يساوي 8 مايكروثانية وهو يمثل الزمن اللازم للصوت لقطع المسافة ذهابا وايابا ..... نقوم بالقسمة على 2 لنحصل على زمن الذهاب فقط

زمن الذهاب = التايمر * 8مايكرو \2=التايمر *4

...........................................

بعد حساب الزمن يجب تحويلة الى مسافة ..... فتضرب في سرعة الصوت.... ولتسهل العمليات الحسابية ..... قام المبرمج بحساب الزمن اللازم لقطع مسافة مقدارها 1 سنتمتر فوجدها تساوي 30 مايكرو ثانية

الان نستطيع بسهولة حساب المسافة بقسمة الزمن على 30


المسافة = زمن الذهاب \30 ( والتي هي زمن قطع مسافة قدرها 1 سنتمتر)

النتيجة ستكون المسافة بالسنتمتر ..... وكما ترى تم انجاز عمليات الحساب وتحويل الوحدات بمعادلة بسيطة واحدة

......................................

ارجع واقول فبل الخوض في العمليات الحسابية حاول ان تعرض قيمة التايمر بجزئية العلوي والسفلي على الشاشة وملاحظة التغييرات

...................................

ما شاء الله ،، جميل جدا ،، شرح وافي جدا ،،


عموما ،، الآن االاعدادات لدينا ان الكريستالة 4 ميغاهرتز ،، بما اننا نستخدم المذبذب الداخلي ، وسنستخدم الprescaler ليكون 8 !

بالتالي المعادلة ستكون كما ذكرت انت /


زمن الذهاب = التايمر * 4
المسافة = زمن الذهاب / 30 =( التايمر * 4) /30 ،،


اذا كان هذا صحيحا ،، حسنا ،،

سنركز الآن على عرض قيمة التايمر على الشاشة ،، ولكن كيف نقوم بالتجربة ؟ ،، من خلال سويتش مثلا ؟ ام ماذا ؟!



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