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

   

hoda said
:: مهندس ::
تاريخ التسجيل: Apr 2014
المشاركات: 27
نشاط [ hoda said ]
قوة السمعة:
قديم 01-05-2014, 03:36 PM المشاركة 25   
افتراضي



السلام عليكم
اولا أنصحكي بأستخدام العائله 18F مثلا 18f45k22 افضل من العائله 16F
علما ان سعر 18F45K22 بسعر 4$ وكذلك 16f877A تقريبا نفس السعر ولكن 18F45k22 له ذاكره قويه
على عموم لاتحتاجين لمصفوفه ثنائيه الابعاد اوثلاثيه يمكن عمل مصفوفه واحده وكما قلت لكي اذا كتبنا كثير في رام في 16f877A سوف يسبب لنا مشاكل وانتي في غنى عنها طالما يوجد بيك افضل منه واكبر منه في ذاكره ويفوقه امتيازات كثيره وسعر ارخص مثل 18F45K22 فهنا يمكنكي كتابه مصفوفه واحده وارسال البيانات دفعه واحده

طبعا بالنسبه لبرامج الارسال البيانات اي برنامج له قابليه على ارسال واستقبال البيانات طبع يوجد مثله في مايكروسي واعتقد البرنامج الذي عمل لديكي ايضا يشتغل

ولكن دعينا نتفق على صيغه لنقل البيانات لان البيك ينفذ اوامر التي نحن نضعها له فكيف تريدن ذلك

وماهو نوع البيك الذي تستخدمينه لكي أعدل على الكود حتى اكمله لكي وبعدما ينتهي من الكود ويشتغل مشروعك عندها أخبرني عن اي جزء غير مفهوم لشرحه لك ان شالله

تحياتي
عليكم السلام
اشكرك علي الرابط الرائع
انا فعلا اشتريت 16f877A اذا لم يصلح اشتري الثاني نجربه الأول
بارك الله لك في علمك

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 01-05-2014, 05:21 PM المشاركة 26   
افتراضي


عليكم السلام
اشكرك علي الرابط الرائع
انا فعلا اشتريت 16f877A اذا لم يصلح اشتري الثاني نجربه الأول
بارك الله لك في علمك
السلام عليكم
تفضلي هذا مشروعكي بالكامل
http://arabsh.com/files/0c33434b6df4...puter-rar.html
عدد سفن سكمنت 56 اولا 16 للتاريخ والوقت والاسبوع
40 باقيه يتم عرض البيانات
ستجدين ملفين للمحاكاه
احدهما يستخدم لنقل البيانات لمسافه طويله ىني استخدمت rs485 ونوع نقل البيانات full duplex(( يعني استطيع ارسال واستقبال في ان واحد وهنا تحتاجين الى 4 اسلاك 2 لارسال و 2 لاستقبال ))

يمكن عمل ذلك بأستخدام half duplex (( وهنا يتم لايمكن الارسال واستقبال في ان واحد ))

اما الثاني استخدمت فقط rs232 وهويستخدم لغايه 15 متر
عكس حاله فوق يستخدم لغايه 1200 متر

طبعا ملاحظه رسم ينقصه كثير منها ربط مقاومات مع سفن سكمنت وربط ترانزستورات على كل كمن لسفن سكمنت

دائره منظم الجهد

اما دائره كمبيوتر في حاله استخدام rs232
ارجو تحميل هذا مخطط
http://www.mikroe.com/downloads/get/...atic_v104c.pdf
أبحثي عن RS232 و وايسي MAX232 وأخذي دائره خاصه بكمبيوتر

======================================
طريقه الارسال البيانات كتالي
DATA-1111-2222-3333-4444-5555-000-6666-7777-8888-9999-END
طبعا DATA- هذا جزء ثابت وكذلك-END
اما الارقام فهي تمثل داتا والتي سوف تظهر على سفن سكمنت

في حاله عدم ارسال بيانات فسوف تظهر على 40 سفن سكمنت كلها اصفار


على فكره انتي تحتاجين كرستاله 8 ميكا لان البيك 16f877A لايحتوي على مذبذب داخلي

تحياتي

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

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 02-05-2014, 01:20 PM المشاركة 27   
افتراضي


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


http://up.top4top.net/downloadf-top4...3b941-rar.html



الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 02-05-2014, 01:37 PM المشاركة 28   
افتراضي


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


http://up.top4top.net/downloadf-top4...3b941-rar.html

السلام عليكم
فكره جميله جدا تسلم أخي
اذن هي تشبه عمليه matrix ولكن ممكن تشرح لنا فكره لتعم الفائده للجميع
تحياتي الطيبه لكم


hoda said
:: مهندس ::
تاريخ التسجيل: Apr 2014
المشاركات: 27
نشاط [ hoda said ]
قوة السمعة:
قديم 03-05-2014, 09:47 AM المشاركة 29   
افتراضي بارك الله لك مهندس حسن


السلام عليكم
مهندس حسن هادي
عند الحاجة الي تشغيل برنامج تم تطويره باستخدام فيجوال بيزيك في حالة عدم وجود البرنامج
( فيجوال بيزيك علي الجهاز ) يتم تركيب هذا الملف علي الجهاز

اضغط علي الرابط لتحميل الملف

هذا الملف تم تحميله من موقع ميكروسوفت من هذه الصفحة

http://www.microsoft.com/en-us/downl....aspx?id=24417
وجزاكم الله بكل خير


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 03-05-2014, 01:37 PM المشاركة 30   
افتراضي


السلام عليكم
فكره جميله جدا تسلم أخي
اذن هي تشبه عمليه matrix ولكن ممكن تشرح لنا فكره لتعم الفائده للجميع
تحياتي الطيبه لكم
وعليكم السلام ورحمة الله وبركاته
نعم اخي حسن هذه الطريقة تشبه الطريقة المستخدمة في الماتركس ذات الاحجام الكبيرة وهذا الشرح ارجو ان يكون واضحا تم اختصار السوتشات بسوتش واحد

كود:
#include <mega8.h>
#include <delay.h>
///////////////////////////////////////
#define SH PORTB.0
#define DS PORTB.1       //اعادة تسمية لاقطاب المايكرو
#define ST PORTB.2

#define SH1 PORTB.3
#define DS1 PORTB.4
#define ST1 PORTB.5
//////////////////////////////////////
unsigned char DATA[]= {            //تعريف مصفوفة الالرقام اللتي سوف نرسلها
                         1,5,2,3,4,5,6,7,
                         2,9,5,4,5,6,2,3,
                         3,8,7,9,5,1,1,5,
                         4,3,2,1,0,7,9,8,
                         5,7,4,8,7,1,2,3,
                         6,5,6,1,2,8,4,5,
                         7,5,4,7,8,9,5,6,
                       };
unsigned char seg0=192,seg1=249,seg2=164,seg3=176,seg4=153, //متغيرات تحوي الارقام كما يجب ان 
              seg5=146,seg6=130,seg7=248,seg8=128,seg9=144; //74hc595 تظهر على خرج ال 
              
unsigned char segmant,segmant1[7],  //متغيرات عامة سوف نستخدمها داخل البرنامج
             X=0,Y=0,Z=0,M1=0,W=0;
////////////////////////////////////////////////////////////////
void main(void)
{

PORTB=0x00;     //تعريف البوابة كخرج
DDRB=0xFF;



while (1)
      {
         //هنا نقوم بنقل الداتا الى هذه المتغيرات الداتا رقم صفر يعني الاول وضعناه 
         //في المتغير الاخيرسيغمانت7 ونقوم بنقل الداتا رقم ثمانية الى المتغير سيغمانت 6
         //وهكذا الى نهاية الارقام اي كل اول رقم من كل سطر في المصفوفة 
         //وسنقوم بارسال هذه الداتا تسلسليا من اول رقم في السطر الاخير الى اول رقم 
         //في السطر الاول لان اول رقم سوف نرسله سوف يظهر في الاخير لاننا نقوم بعمل ازاحة للارقام  
         //(M1) هذا المتغير سوف نزيده في كل مرة بعد عرض الارقام الثمانية الاولى ثم الثانية الى ان
         // ننتهي من عرض كامل الارقام نقوم بعدها بتصفيره من اجل اعادة العرض يعني بهل حالة كانه
         // عندي ماتريكس من ثمانية اعمدة
        segmant1[0]=DATA[M1+48];
        segmant1[1]=DATA[M1+40];
        segmant1[2]=DATA[M1+32];
        segmant1[3]=DATA[M1+24];
        segmant1[4]=DATA[M1+16];
        segmant1[5]=DATA[M1+8];
        segmant1[6]=DATA[M1];
        
        M1++; 
        if(M1==8)M1=0;
       /////////////////////////////////////////////////////////////////////////////
         //هذه السوتشات من اجل فحص الرقم الموجود في المتغير وارساله كما يجب ان يظهر على خرج مسجل الازاحة
          
         for (W=0;W<7;W++) 
              {  
                
                 switch (segmant1[W])
                  { 
                    
                    case 0: segmant=seg0;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       }; break;
                          
                    case 1: segmant=seg1;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 2: segmant=seg2;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;
                        
                    case 3: segmant=seg3;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 4: segmant=seg4;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 5: segmant=seg5;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 6: segmant=seg6;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 7: segmant=seg7;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 8: segmant=seg8;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 9: segmant=seg9;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                  }; 
              };

         
        
       
        ST1=1;ST1=0; //بعد ازاحة جميع البيانات الموجودة في المتغيرات نعطي امر لاخراجها
                     // دفعة واحدة على خرج مسجلات الازاحة 
        /////////////////////////////////////////////////////////             
        if(Y==0){DS=1;SH=1;SH=0;DS=0;ST=1;ST=0;}  //بعد اخراج البيانات نقوم بتفعيل اقطاب السفن سكمنت       
        if(Y<8&&Y!=0){SH=1;SH=0;ST=1;ST=0;}      //المشتركة لكي تضيئ وكل ثماني ازاحات للصفر نقوم بوضع واحد 
        Y++;                                    //وهكذا ستعمل كل ثماني قطع من السفن سيكمنت دفعة واحدة
        if(Y==8)Y=0;                            //وننتظر 2 ميلي ثانية وهي فترة كافية لاضائة وحدات العرض 
        delay_ms(2);                            //ولعرض كامل الارقام هنا سيلزم 16 ميلي ثانية وهي كافية لان 
                                               //نرى جميع الارقام بدون رجفة 
       ///////////////////////////////////////////////////////// 
       for (Z=0;Z<56;Z++)       //هذه من اجل اطفاء وحدات الاظهار لفترة صغيرة
                                // لكي لايحدث تداخل في الارقام عند عمل الازاحة
             { 
               DS1=1;
               SH1=1;
               SH1=0;
               
             }; 
          ST1=1;ST1=0;
       ////////////////////////////////////////////////////////////   
      }
}


التعديل الأخير تم بواسطة : ahmadazez بتاريخ 03-05-2014 الساعة 02:40 PM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 04-05-2014, 05:16 AM المشاركة 31   
sun شكرا جزيلا لك أخي كريم


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

كود:
#include <mega8.h>
#include <delay.h>
///////////////////////////////////////
#define SH PORTB.0
#define DS PORTB.1       //اعادة تسمية لاقطاب المايكرو
#define ST PORTB.2

#define SH1 PORTB.3
#define DS1 PORTB.4
#define ST1 PORTB.5
//////////////////////////////////////
unsigned char DATA[]= {            //تعريف مصفوفة الالرقام اللتي سوف نرسلها
                         1,5,2,3,4,5,6,7,
                         2,9,5,4,5,6,2,3,
                         3,8,7,9,5,1,1,5,
                         4,3,2,1,0,7,9,8,
                         5,7,4,8,7,1,2,3,
                         6,5,6,1,2,8,4,5,
                         7,5,4,7,8,9,5,6,
                       };
unsigned char seg0=192,seg1=249,seg2=164,seg3=176,seg4=153, //متغيرات تحوي الارقام كما يجب ان 
              seg5=146,seg6=130,seg7=248,seg8=128,seg9=144; //74hc595 تظهر على خرج ال 
              
unsigned char segmant,segmant1[7],  //متغيرات عامة سوف نستخدمها داخل البرنامج
             X=0,Y=0,Z=0,M1=0,W=0;
////////////////////////////////////////////////////////////////
void main(void)
{

PORTB=0x00;     //تعريف البوابة كخرج
DDRB=0xFF;



while (1)
      {
         //هنا نقوم بنقل الداتا الى هذه المتغيرات الداتا رقم صفر يعني الاول وضعناه 
         //في المتغير الاخيرسيغمانت7 ونقوم بنقل الداتا رقم ثمانية الى المتغير سيغمانت 6
         //وهكذا الى نهاية الارقام اي كل اول رقم من كل سطر في المصفوفة 
         //وسنقوم بارسال هذه الداتا تسلسليا من اول رقم في السطر الاخير الى اول رقم 
         //في السطر الاول لان اول رقم سوف نرسله سوف يظهر في الاخير لاننا نقوم بعمل ازاحة للارقام  
         //(M1) هذا المتغير سوف نزيده في كل مرة بعد عرض الارقام الثمانية الاولى ثم الثانية الى ان
         // ننتهي من عرض كامل الارقام نقوم بعدها بتصفيره من اجل اعادة العرض يعني بهل حالة كانه
         // عندي ماتريكس من ثمانية اعمدة
        segmant1[0]=DATA[M1+48];
        segmant1[1]=DATA[M1+40];
        segmant1[2]=DATA[M1+32];
        segmant1[3]=DATA[M1+24];
        segmant1[4]=DATA[M1+16];
        segmant1[5]=DATA[M1+8];
        segmant1[6]=DATA[M1];
        
        M1++; 
        if(M1==8)M1=0;
       /////////////////////////////////////////////////////////////////////////////
         //هذه السوتشات من اجل فحص الرقم الموجود في المتغير وارساله كما يجب ان يظهر على خرج مسجل الازاحة
          
         for (W=0;W<7;W++) 
              {  
                
                 switch (segmant1[W])
                  { 
                    
                    case 0: segmant=seg0;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       }; break;
                          
                    case 1: segmant=seg1;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 2: segmant=seg2;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;
                        
                    case 3: segmant=seg3;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 4: segmant=seg4;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 5: segmant=seg5;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                    case 6: segmant=seg6;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 7: segmant=seg7;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 8: segmant=seg8;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break;  
                       
                    case 9: segmant=seg9;
                     for (X=0;X<8;X++)
                       {
                         DS1=segmant&0b10000000; SH1=1;SH1=0; segmant=segmant<<1;
                       };break; 
                       
                  }; 
              };

         
        
       
        ST1=1;ST1=0; //بعد ازاحة جميع البيانات الموجودة في المتغيرات نعطي امر لاخراجها
                     // دفعة واحدة على خرج مسجلات الازاحة 
        /////////////////////////////////////////////////////////             
        if(Y==0){DS=1;SH=1;SH=0;DS=0;ST=1;ST=0;}  //بعد اخراج البيانات نقوم بتفعيل اقطاب السفن سكمنت       
        if(Y<8&&Y!=0){SH=1;SH=0;ST=1;ST=0;}      //المشتركة لكي تضيئ وكل ثماني ازاحات للصفر نقوم بوضع واحد 
        Y++;                                    //وهكذا ستعمل كل ثماني قطع من السفن سيكمنت دفعة واحدة
        if(Y==8)Y=0;                            //وننتظر 2 ميلي ثانية وهي فترة كافية لاضائة وحدات العرض 
        delay_ms(2);                            //ولعرض كامل الارقام هنا سيلزم 16 ميلي ثانية وهي كافية لان 
                                               //نرى جميع الارقام بدون رجفة 
       ///////////////////////////////////////////////////////// 
       for (Z=0;Z<56;Z++)       //هذه من اجل اطفاء وحدات الاظهار لفترة صغيرة
                                // لكي لايحدث تداخل في الارقام عند عمل الازاحة
             { 
               DS1=1;
               SH1=1;
               SH1=0;
               
             }; 
          ST1=1;ST1=0;
       ////////////////////////////////////////////////////////////   
      }
}
السلام عليكم
تسلم أخي كريم
انا أفتهمت فكره وقمت بتجربتها على بروتيس بالنسبه للبيك اوكي أشتغلت تمام
ولكن مشكله لما أقرأ الوقت والتاريخ من DS1307 تحصل رجفه قويه اظن ان DS1307
يحتاج زمن لتنفيذها لكن أحاول أستخدام انتربت لعلاج هذه مشكله
ام عندك حل أخر
تحياتي الطيبه


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 04-05-2014, 11:27 AM المشاركة 32   
افتراضي


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



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