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

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

OrdinaryMiracle
:: مهندس ::
تاريخ التسجيل: Nov 2012
المشاركات: 3
نشاط [ OrdinaryMiracle ]
قوة السمعة:0
قديم 09-11-2012, 02:15 AM المشاركة 1   
افتراضي DTMF Command أرجو المساعدة .. Twitter FaceBook Google+



السلام عليكم ...


انا استخدم DTMF CM8870
و Micro PIC16f84a
وأستخدم لغة المايكروسي ..

عن طريق الموبايل ارسل النغمة الى الـ DTMF
ثم يرسلها الـ dtmf الى المايكرو
ويستقبلها المايكرو من RA0 ,RA1,RA2,RA3
ثم يخرج خمسة فولت من RB0,RB1,RB2,RB3

حسب الكود التالي ..

كود:
void main()
{



  TRISA=0B00011111;
  TRISB=0;
  loop:
  if (PORTA.F0==0)
  {
  PORTB.F0=0;

   }
   else
   {
   PORTB.F0=1;
   }


     if (PORTA.F1==0)
  {
  PORTB.F1=0;
   }
      else
   {
   PORTB.F1=1;
   }


     if (PORTA.F2==0)
  {
  PORTB.F2=0;
   }
      else
   {
   PORTB.F2=1;
   }


     if (PORTA.F3==0)
  {
  PORTB.F3=0;
   }
      else
   {
   PORTB.F3=1;
   }


if POERTB


goto loop;
}
السوال هو ..


كيف أعمل مثل هذا الفيديو ..


بحيث لما اضغط مجموعة من الارقام مثلا #123* يطفي مجموعة من الليد ..

----------------

استفدت من دورة المهندس احمد سمير فايد
وايضا من موضوع the lover1
http://www.qariya.com/vb/showthread.php?t=7752

اعلانات

waeltealeb
:: مهندس متميز ::
تاريخ التسجيل: Jul 2007
المشاركات: 366
نشاط [ waeltealeb ]
قوة السمعة:0
قديم 10-11-2012, 10:46 PM المشاركة 2   
افتراضي


يمكنك هذا بكل سهوله من خلال البرنامج ،، فهذا كله شغل برمجه .... اولا عليك يقراءة و التدريب اكثر على اوامر البرمجه و ستعلم انه يمكنك هذا بكل سهوله ... فقط يمكنك استخدام المتغيرات و تضع لها قيم معينه تتغير بتغير الأرقام التى تكتبها فى صورة كود مثل ما ذكرت *113# مثلا .. اما الخرج فستكتبه انت فى البرنامج على اطراف الخرج b بأى قيم تريدها انت يعنى يمكنك ان تجعل البورت كله يساوى 1 او 0 زى ما تحب .

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

OrdinaryMiracle
:: مهندس ::
تاريخ التسجيل: Nov 2012
المشاركات: 3
نشاط [ OrdinaryMiracle ]
قوة السمعة:0
قديم 11-11-2012, 08:02 PM المشاركة 3   
افتراضي


اهلا اخي waeltealeb ..

لو توضح لي بمثال بسيط اكون شاكر لك..

انا اعرف برمجة لغة برمجة C++


====

سوال اخر : الان الدخل على المايكروكنترولر .. يكون 4 قيم..
PORTA.F0
PORTA.F1
PORTA.F2
PORTA.F3

كيف أخذ الدخل كـ قيمة واحدة بدل 4 قيم

هل ممكن ان اقول PORTA كي اخذها كـ قيمة واحدة ..

=====


سوال اخر : كيف أخذ قيمتين متتالية ..
يعني اذا كان اول دخل كان هكذا

كود:
PORTA.F0=0
PORTA.F1=1
PORTA.F2=1
PORTA.F3=1
ثم ثاني دخل كان هكذا ..


كود:
PORTA.F0=1
PORTA.F1=0
PORTA.F2=1
PORTA.F3=1


هل استخدم delay_ms او لا احتاج ..

ياليت توضحوها لي بمثال برمجي حتى تتضح الفكرة ..

وشكرا لردك اخي waeltealeb


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 12-11-2012, 10:28 PM المشاركة 4   
افتراضي بسم الله الرحمن الرحيم


كود:
/* برنامج يقرأ من القطعة 8870 وبناء على الارقام المضغوطة
  سوف يعطي خرج ثابت على البورت بي والذي توصل عليه ترانزستورات لتشغيل ريليهات
  خرج ال 8870  سيوصل مع البيك كالتالي    Q1-RA0   Q2_Ra1
   Q3_RA2   Q4_RA3
     اما البن 15 والمسمى STD
      فيوصل مع  RA4
      وهظيفة هذا البن انه عند تستقبل ال8870 نغمة جديدة اي عندما
     
      يتم ضغط زر جديد فإنه سوف يخرج عليه خرج موجب مدة قصيرة ثم ينتهي
     لذلك سوف نختبر RA4
     عندما يصبح يساوي واحد ثم يصبح صفر عندها
     سنقرا portA
     ثم نخزنه في dtmf
     ثم نقوم باختبارات حسب تطبيقنا
     انا هنا برمجته كالتالي
     اضغط على زر * ثم بعد ذلك الرقم الذي سوف اضغطه سوف يشغل بن في البورت بي
     وبالتالي الريليه المتصل بذلك البن
     وعندما اريد ان اطفىء ريليه اضغط على الزر # ثم الرقم
     */
     
char dtmf;   /* متغير لتخزين قيمة خرج ال8870 والذي يعبر عن الرقم المضغوط*/
bit a,x;    /* a لمعرفة ان ال8870 ارسلت نبضة اعلام وان هذه النبطة انتهت
                المتغير x اذا ضغط* سوف يصبح يساوي 1 واذا 
                ضغط # سوف يساوي 0 
                 */
void main() {
CMCON=0x07;          // خاص بال pic 16f628a ليجعل البورت ايه دخل وخرج ديجيتال
TRISA=0B11111111;
TRISB=0;
PORTB=0x00;
x=0;
while(1){
if(PORTA.F4==1)  // اختبار نبضة الاعلام

{a=1;}
if(a&&!PORTA.F4==1)      // الاعلام انتهت وللتهيء لقدوم النبضة التالية
{
a=0;
dtmf=PORTA;

if(dtmf==11) //  اي عند ضغط *
{x=1;}

if(dtmf==12) // اي عند ضغط #
{x=0;}

if(dtmf<=8)     /*سيختبر اذا قمت بالضغط على زر من 1 الى 8 حيث ان البرنامج للتحكم
                  بثمانية اجهزة فقط */
{
if(dtmf==1)          /* اذا ضغط على رقم واحد سوف يجعل portb.f0
                       يساوي قيمة x
                       اي ا كنت ضغطت نجمة سوف يفعل البن فورا عند الضغط على الرقم
                       واذا
                       
                       ضغطت سلم سوف يطفأ هذا البن فورا عند الضغط على الرقم
                       وهكذا مع الباقي
                        */
{PORTB.F0=x;}

if(dtmf==2)
{PORTB.F1=x;}

if(dtmf==3)
{PORTB.F2=x;}

if(dtmf==4)
{PORTB.F3=x;}

if(dtmf==5)
{PORTB.F4=x;}

if(dtmf==6)
{PORTB.F5=x;}

if(dtmf==7)
{PORTB.F6=x;}

if(dtmf==8)
{PORTB.F7=x;}



}
}}

}


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 12-11-2012, 10:34 PM المشاركة 5   
افتراضي


وهذه صورة للدائرة علما ان الدائرة اشتغلت جيدا


http://www.electvillage.com/upload//...ile=07bb8d5eac


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 12-11-2012, 10:35 PM المشاركة 6   
افتراضي


http://upload.qariya.info/images/qar...07bb8d5eac.png


somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 12-11-2012, 10:37 PM المشاركة 7   
افتراضي




OrdinaryMiracle
:: مهندس ::
تاريخ التسجيل: Nov 2012
المشاركات: 3
نشاط [ OrdinaryMiracle ]
قوة السمعة:0
قديم 15-11-2012, 11:44 PM المشاركة 8   
افتراضي


اخي somood .. جزاك الله خير ..

التجربة تمت بنجاح .. وشغال تمام

وفهمت فكرة الكود ..

حالياً جاري التعديل عليه بالاستفادة من الرقم 9 و 0 .. لكي يطفي او يشغل جميع الاطراف من 1 الى 8 ..

الله يفتح عليك وينور طريقك ..

إضافة رد

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

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

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


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

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