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

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 26-04-2014, 03:37 AM المشاركة 1   
افتراضي تشغيل عدد كبير من سفن سكمنت Twitter FaceBook Google+



السلام عليكم
في هذا الموضوع سيتم شرح طريقه للتعامل مع عدد كبير من سفن سكمنت
وذلك بأستخدام متكامله max7221
سيتم
وضع الكود مع شرح وبشكل مختصر
http://arabsh.com/files/0c33424965f4...tocol-rar.html
في داخل هذا ملف ستجدون ملفين أحدهما تم استخدام البرتوكول spi والاخر لم يتم أستخدام البرتوكول
مصدر الكود
http://embedded-lab.com/blog/?p=4935
ملاحظه تم التعديل على الكود لكونه يستخدم البيك من العائله 12f
وبالطبع متكامله max7221 تستطيع التعامل مع 8 قطع من سفن سكمنت ويمكن ربط عده متكاملات مع البعض ليزيد بذلك سفن سكمنت بمضاعفات 8
حمل منول للمتكامله
https://www.google.iq/url?sa=t&rct=j...65397613,d.ZWU

ستجد في صفحه 13 كيفيه الربط لاكثر من سفن سكمنت
كل سفن سكمنت اقصى تيار ممكن للمتكامله هو 40ma واذا كان الامر ييتطلب تيار اعلى من ذلك عندها يتم استخدام driver
وايضا داريفر للسفن سكمنت هو MAX394
http://www.alldatasheet.com/datashee...IM/MAX394.html

او
http://www.maximintegrated.com/app-n...ex.mvp/id/1196


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 26-04-2014 الساعة 04:59 AM السبب: يوجد خطأ في العنوان هي كلمه بدون multiplexing
اعلانات

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


السلام عليكم
كود:
sbit CS_Pin at RE0_bit;
sbit CS_Pin_direction at TRISE0_bit;
void Write7segDigits(unsigned char address, unsigned char data1);

void MAX7219_INIT();


void MAX7219_INIT() {
  // Disable Shutdown mode
  Write7segDigits(0x0C ,0x01);    // 0xc0 : Select Shutdown register
                                 // 0x01 :Set D0 bit to return to normal operation

  // Set BCD decode mode for digits DIG0-DIG3
  Write7segDigits(0x09 ,0x0F);    // 0x09 :Select Decode Mode register
                                 // 0x0F :Select BCD mode for digits DIG0-DIG3

  // Set display brighness
  Write7segDigits(0x0A , 0x0F);    // 0x0A :Select Intensity register
                                    // 0x0F :Set maximum brightness

   // Set display refresh
  Write7segDigits(0x0B,0x03);    // 0x0B :Select Scan-Limit register
                                // 0x03 :Select digits DIG0-DIG3

 // Enable Display-Test
 Write7segDigits(0x0F , 0x01);    // Select Display-Test register
 Delay_ms(1000);
 // Disable Display-Test
  Write7segDigits(0x0F ,0x00);    // 0x0F :Select Display-Test register
                                 // 0x00 : Disable Display-Test

}
void Write7segDigits(unsigned char address, unsigned char data1){
  CS_Pin=0;

  SPI1_write(address);
  SPI1_write(data1);

  CS_Pin=1;
}




void main() {
  unsigned unsigned int i = 0;


  ANSELC = 0;          // Set port C pis as digital
  ANSELE = 0;          // Set port E pis as digital

  LATC = 0;            // Reset portC LAT register
  CS_Pin_direction  = 0;
  SPI1_Init();            // Initialize SPI
  Delay_ms(300);

  while(1)
  {  
     MAX7219_INIT();
     
     for(i=0;i<=9999;i++)
                       {
                        Write7segDigits(4, i/1000);// 1234/1000=1
                        Write7segDigits(3, (i/100)%10);  // 1234/100=12/10=1   >> %10 =2
                        Write7segDigits(2, (i/10)%10); // 1234/10=123/10=12   >> %10 =3
                        Write7segDigits(1, i%10);  //  // 1234/10=123   >> %10 =4
                        Delay_ms(250);

                       }

  }
}
اولا نشرح كود تعريف max7221
كود:
MAX7219_INIT();
كود:
void MAX7219_INIT() {
  // Disable Shutdown mode
  Write7segDigits(0x0C ,0x01);    // 0xc0 : Select Shutdown register
                                 // 0x01 :Set D0 bit to return to normal operation

  // Set BCD decode mode for digits DIG0-DIG3
  Write7segDigits(0x09 ,0x0F);    // 0x09 :Select Decode Mode register
                                 // 0x0F :Select BCD mode for digits DIG0-DIG3

  // Set display brighness
  Write7segDigits(0x0A , 0x0F);    // 0x0A :Select Intensity register
                                    // 0x0F :Set maximum brightness

   // Set display refresh
  Write7segDigits(0x0B,0x03);    // 0x0B :Select Scan-Limit register
                                // 0x03 :Select digits DIG0-DIG3

 // Enable Display-Test
 Write7segDigits(0x0F , 0x01);    // Select Display-Test register
 Delay_ms(1000);
 // Disable Display-Test
  Write7segDigits(0x0F ,0x00);    // 0x0F :Select Display-Test register
                                 // 0x00 : Disable Display-Test

}
لنراجع موقع التالي او منول للمتكامله
http://embedded-lab.com/blog/?p=4935
سنجد مايلي
1-address
2-data
اذن نحتاج ان نرسل العنوان ثم نرسل البيانات
content/uploads/2012/05/RegisterAddressMap.png
ريجيستر No-Op معناه لاتوجد اي عمليه يعني لايوجد شيئ يتنفذ
ريجستر Digit 0 الى Digit 7 فهذه تتحكم بأي سفن سكمنت سوف يتم تشغيلها
=============================================
The decode-mode register
http://img05.arabsh.com/uploads/imag...4c4e64fa0d.png
يحول الى BCD
ارجو اطلاع على منول صفحه 8
Table 5. Code B Font
=============================================
Intensity Register وهو يتحكم بكثافه الاضاءه لسفن سكمنت
اطلع على Table 7. موجود في منول صفحه 9
=======================================
Scan-Limit Register
وهو يتحكم بعدد تشغيل سفن قطع سفن سكمنت
فاذا كتبنا data في هذا سجل بــ 0 معناه تشتغل سفن سكمنت الاولى فقط تعمل واذا كتبنا بــ 1 معناه تشتغل سفن سكمنت الاولى وثانيه واذا كتبنا 3 معناها تشتغل سفن سكمنت الاولى وثانيه وثالثه وهكذا
بأختصار هو يحدد عدد سفن سكمنت الي تريد تشغلها

================================================
ريجيستر Shutdown
ومن أسمه يقوم بأطفاء سفن سكمنت بشكل كامل وذلك عندما يكون داتا=0
اما اذا كتبنا داتا=1
http://img05.arabsh.com/uploads/imag...4c4e66fb03.png

فيعود الى normal operation


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 26-04-2014 الساعة 11:02 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

hoda said
:: مهندس ::
تاريخ التسجيل: Apr 2014
المشاركات: 27
نشاط [ hoda said ]
قوة السمعة:0
قديم 26-04-2014, 07:43 AM المشاركة 3   
sun شكرا لله وبارك الله لك


السلام عليكم
كود:
sbit CS_Pin at RE0_bit;
sbit CS_Pin_direction at TRISE0_bit;
void Write7segDigits(unsigned char address, unsigned char data1);

void MAX7219_INIT();


void MAX7219_INIT() {
  // Disable Shutdown mode
  Write7segDigits(0x0C ,0x01);    // 0xc0 : Select Shutdown register
                                 // 0x01 :Set D0 bit to return to normal operation

  // Set BCD decode mode for digits DIG0-DIG3
  Write7segDigits(0x09 ,0x0F);    // 0x09 :Select Decode Mode register
                                 // 0x0F :Select BCD mode for digits DIG0-DIG3

  // Set display brighness
  Write7segDigits(0x0A , 0x0F);    // 0x0A :Select Intensity register
                                    // 0x0F :Set maximum brightness

   // Set display refresh
  Write7segDigits(0x0B,0x03);    // 0x0B :Select Scan-Limit register
                                // 0x03 :Select digits DIG0-DIG3

 // Enable Display-Test
 Write7segDigits(0x0F , 0x01);    // Select Display-Test register
 Delay_ms(1000);
 // Disable Display-Test
  Write7segDigits(0x0F ,0x00);    // 0x0F :Select Display-Test register
                                 // 0x00 : Disable Display-Test

}
void Write7segDigits(unsigned char address, unsigned char data1){
  CS_Pin=0;

  SPI1_write(address);
  SPI1_write(data1);

  CS_Pin=1;
}




void main() {
  unsigned unsigned int i = 0;


  ANSELC = 0;          // Set port C pis as digital
  ANSELE = 0;          // Set port E pis as digital

  LATC = 0;            // Reset portC LAT register
  CS_Pin_direction  = 0;
  SPI1_Init();            // Initialize SPI
  Delay_ms(300);

  while(1)
  {  
     MAX7219_INIT();
     
     for(i=0;i<=9999;i++)
                       {
                        Write7segDigits(4, i/1000);// 1234/1000=1
                        Write7segDigits(3, (i/100)%10);  // 1234/100=12/10=1   >> %10 =2
                        Write7segDigits(2, (i/10)%10); // 1234/10=123/10=12   >> %10 =3
                        Write7segDigits(1, i%10);  //  // 1234/10=123   >> %10 =4
                        Delay_ms(250);

                       }

  }
}
اولا نشرح كود تعريف max7221
كود:
MAX7219_INIT();
كود:
void MAX7219_INIT() {
  // Disable Shutdown mode
  Write7segDigits(0x0C ,0x01);    // 0xc0 : Select Shutdown register
                                 // 0x01 :Set D0 bit to return to normal operation

  // Set BCD decode mode for digits DIG0-DIG3
  Write7segDigits(0x09 ,0x0F);    // 0x09 :Select Decode Mode register
                                 // 0x0F :Select BCD mode for digits DIG0-DIG3

  // Set display brighness
  Write7segDigits(0x0A , 0x0F);    // 0x0A :Select Intensity register
                                    // 0x0F :Set maximum brightness

   // Set display refresh
  Write7segDigits(0x0B,0x03);    // 0x0B :Select Scan-Limit register
                                // 0x03 :Select digits DIG0-DIG3

 // Enable Display-Test
 Write7segDigits(0x0F , 0x01);    // Select Display-Test register
 Delay_ms(1000);
 // Disable Display-Test
  Write7segDigits(0x0F ,0x00);    // 0x0F :Select Display-Test register
                                 // 0x00 : Disable Display-Test

}
لنراجع موقع التالي او منول للمتكامله
http://embedded-lab.com/blog/?p=4935
سنجد مايلي
1-address
2-data
اذن نحتاج ان نرسل العنوان ثم نرسل البيانات
content/uploads/2012/05/RegisterAddressMap.png
ريجيستر No-Op معناه لاتوجد اي عمليه يعني لايوجد شيئ يتنفذ
ريجستر Digit 0 الى Digit 7 فهذه تتحكم بأي سفن سكمنت سوف يتم تشغيلها
=============================================
The decode-mode register
http://img05.arabsh.com/uploads/imag...4c4e64fa0d.png
يحول الى BCD
ارجو اطلاع على منول صفحه 8
Table 5. Code B Font
=============================================
Intensity Register وهو يتحكم بكثافه الاضاءه لسفن سكمنت
اطلع على Table 7. موجود في منول صفحه 9
=======================================
Scan-Limit Register
وهو يتحكم بعدد تشغيل سفن قطع سفن سكمنت
فاذا كتبنا data في هذا سجل بــ 0 معناه تشتغل سفن سكمنت الاولى فقط تعمل واذا كتبنا بــ 1 معناه تشتغل سفن سكمنت الاولى وثانيه واذا كتبنا 3 معناها تشتغل سفن سكمنت الاولى وثانيه وثالثه وهكذا
بأختصار هو يحدد عدد سفن سكمنت الي تريد تشغلها
وعليكم السلام
بسم الله ماشاء الله موضوع جيد واسمح لي ان ابدء مشروعي من عندك وتحت اشرافك واكون ممتنه لك كثيرا
سأدرس كل الداتا القيمة التي تفضلت بشرحها وابدء اول خطوة واعرضها عليك ان شاء الله


fawzy73
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2008
المشاركات: 93
نشاط [ fawzy73 ]
قوة السمعة:0
قديم 26-04-2014, 07:47 AM المشاركة 4   
افتراضي


بسم الله ما شاء الله

موضوع رائع

اذ امكن ممكن شرح لفكرة عمل الاسي نفسها

اكون شاكر

فوزي


hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 587
نشاط [ hamadalla31 ]
قوة السمعة:0
قديم 26-04-2014, 09:09 AM المشاركة 5   
sun بارك الله لك اخي الكريم واعزك وفتح لك كل ابواب الخير


اشكرك اخي الحبيب وعدت وانجزت واثريت المنتدي بفضل الله ثم مجهود الجميل بارك الله لك



ان شاء الله لنا عودة للتطبيق العملي ونتائجه ان شاء الله


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 26-04-2014, 10:02 AM المشاركة 6   
افتراضي


شكرا للجميع سحاول أكمال شرح للموضوع
لان هذا موضوع وغيره يعتبر مهم لانه يختصر الكثير من قطع الالكترونيه وكذلك بالكود
وبالطبع انت لايمكنك تشغيل سفن سكمنت عدد كبير بطريقه multiplexing لانه ستوجب عليك تقليل زمن تشغيل سفن سكمنت لكي تبقى ظاهره خداع البصري
multiplexing شغاله وهنا سنلاحظ وصول طاقه قليله لسفن سكمنت وكما انه يجب وضع الكود multiplexing ضمن داله الانتربت لكي تبقى multiplexing ايضا شغاله لانه اي زياده في زمن عن 20ms سوف تلاحظ أطفاء وتشغيل سفن سكمنت وعليه
أستخدام هذه متكامله MAX7221 او MAX7219 (( كلاهما لهما نفس مميزات)) يتيح لك تشغيل عدد كبير من سفن سكمنت ولانهتم للوقت
وللعلم متكامله max7221 تستطيع تشغيل عدد كبيرمن قطع من سفن سكمنت ويمكن ربط مخرج البيانات لهذه متكامله مع مدخل البيانات للمتكامله اخرى لنزيد بذلك الى 16 قطعه سفن سكمنت
كما انها تحول الارقام بنظام عشري الى BCD يعني نعطيها الرقم الذي نريد أظهاره فحسب او الحرف الذي نريد أظهار (( راجع منول صفحه 8))


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 26-04-2014, 10:55 AM المشاركة 7   
افتراضي


بسم الله ما شاء الله

موضوع رائع

اذ امكن ممكن شرح لفكرة عمل الاسي نفسها

اكون شاكر

فوزي
السلام عليكم
اخي كريم هذه متكامله تتعامل مع SPI برتوكول وهذه متكامله تستطيع تشغيل 8 قطع سفن سكمنت
وظيفتها هي
1- تحول الارقام او الاحرف الى BCD
2- أظهار البيانات على سفن سكمنت
3- تحتوي على driver لتشغيل سفن سكمنت ولغايه 40 ملي امبير واذا تطلب امر اكثر من هذا التيار نستخدم داريفر خارجي كما اوضحنا سابقا

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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 26-04-2014, 11:04 AM المشاركة 8   
افتراضي


ارجو مراجعه مشاركه رقم 2
حيث تم أكمال ريجسترات حيث تم أضافه shutdown register

إضافة رد

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

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

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


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

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