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

   

NoNSTOP
:: مهندس ::
تاريخ التسجيل: Feb 2014
المشاركات: 19
نشاط [ NoNSTOP ]
قوة السمعة:
قديم 30-01-2018, 02:52 PM المشاركة 9   
افتراضي



لو الهدف فقط توفير مخارج البيك ، ممكن تتجاوز الصعوبات بتغيير الطريقة:
الاكتفاء ببيك واحد واستخدام شاشة LCD من نوع Serial تعمل بالبرتوكول الشهير I2C.
هي شاشة تحتاج فقط طرفين اثنين في البيك هما SDAو SCL.
لو تحب الاحتفاظ بشاشة LCD عادية التي تتطلب 6 أطراف على الاقل ممكن تستفيد من نفس الفكرة بإضافة متكاملة معروفة لدى المبرمجين الذين ينفذون دوائر الماتريكس.
هي مسجل الإزاحة 74595
ويوجد غيرها..
البيك يرسل الداتا لمسجل الإزاحة بطريقة تسلسلي
و هو يتكفل بإرسال الداتا للشاشة .
فكرت في استخدام PIC18F4550 واستخدام مسجل الازاحة ولكن الدائرة كالتالي
PIC1
استخدام TMR0 لحساب توقيت زمني 1ث
استخدام INT/RB0 كمقاطع لحساب عدد نبضات تصل الى 400 نبضة في الثانية
استخدام 3 مداخل AN
استخدام 6 مخارج لشاشة LCD
استخدام 3 مداخل Digital IO
باجمالي 14 منفذ
PIC2
استخدام TMR0 لحساب توقيت زمني 1ث
استخدام INT/RB0 كمقاطع لحساب عدد نبضات اخرى تصل الى 60 نبضة في الثانية
استخدام 7 مداخل Digital IO
استخدام 7 مخارج Digital IO لعرض حالة 7 مداخل السابقة
استخدام 7 مخارج Digital IO لعرض 3 ارقام على 7Seg من خلال متكاملة رقم 7447
باجمالي 23 منفذ

بالإضافة لمنفذين I2C او UART حسب الاحوال للربط بينهم
فعند اختصار المنافذ المشتركة والغاء منفذي الربط يكون الاجمالي 36 منفذ مستخدم
وعند اضافة المنافذ الغير مستخدمة او الاساسية لتشغيل البك VDD - VSS - MCLR - Vusb - OSC ومجموعهم 8 منافذ يكون المجموع 44 منفذ بما هو اكبر من العدد الفعلي وعدم وجود منافذ اضافية للتعديل او اي اضافة بالمستقبل في حالة استخدام منفذين I2C فقط للشاشة وافكر في المستقبل في اضافة مديول RTC واضافة 3 ازرار Digital IO
المشكلة الاخرى اني اخاف من ضياع بعض النبضات من خلال المقاطعات - فمثلا عند التوقف عند مقاطع 1 مثلا يكون مقاطع 0 فقد 3 نبضات
وايضا اقوم بتسجيل بعض القراءات في ذاكرة eeprom
فرأيت ان توزيع المعالجة على 2 بيك ووجود وقرة في المنافذ افضل من تكديس اوامر في بيك واحد بدون استيعاب مستقبلي لأي اضافات

اعلانات

NoNSTOP
:: مهندس ::
تاريخ التسجيل: Feb 2014
المشاركات: 19
نشاط [ NoNSTOP ]
قوة السمعة:
قديم 30-01-2018, 09:43 PM المشاركة 10   
افتراضي


قمت بالعديد المحاولات الفاشلة وبعد البحث الكثير قمت بكاتبة الكود بحمد الله ولكن اشعر انه كبير جدا
المرسل
كود:
char i;                              // Loop variable
char uart_rd;
unsigned int num1 = 5;              // always 1 digit
unsigned long num2 = 197583;  //min 1 digit , Max 6 digits
unsigned int num3 = 6;              // always 1 digit
unsigned int num4 = 9876;       //min 1 digit , Max 4 digits
unsigned char txt1[5] ;
unsigned char txt2[12] ;
unsigned char txt3[5] ;
unsigned char txt4[7] ;
char text2[20]  ;

void main() {
UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);

  ShortToStr(num1,txt1);
  ShortToStr(num3,txt3);
  LongToStr(num2,txt2);
  IntToStr(num4,txt4);
  strcat(text2,"a");                // start of serial text
  strcpy(text2,ltrim(txt1));
  strcat(text2,"b");                // Separator
  strcat(text2,ltrim(txt2));
  strcat(text2,"c");                // Separator
  strcat(text2,ltrim(txt3));
  strcat(text2,"d");                // Separator
  strcat(text2,ltrim(txt4));
  strcat(text2,"e");                // end of serial text

//Result of text2 = a5b197583c6d9876e
  
  while(1) {                         // Endless loop
    for(i=0;i<18;i++){
    UART1_Write(text2[i]); 
    delay_ms(10);
    }
    UART1_Write(13);               // send a new line (added for debugging)
    delay_ms(500);
    }
  }
المستقبل
كود:
// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
int num1,num3;
long num2,num4;
char txt[18];

 char chk;
 int i=0;
 void main() {
 for(i=0;i<16;i++){txt[i]=' ';}

  Lcd_Init();
   UART1_Init(9600);
      delay_ms(200);           
   Lcd_Cmd(_LCD_CURSOR_OFF);    
   Lcd_Cmd(_LCD_CLEAR);
  while(1){
 if (UART1_Data_Ready() == 1){
  chk = UART1_Read();
  for(i=0;i<16;i++){txt[i]=' ';}
  }

      if(chk=='a'){                       //if serial data byte is 'a' start reading the rest of data
  UART1_Read_Text(txt,"b",2);   // Read data from 'a' to 'b'
  Lcd_Out(1, 1, txt);
  for(i=0;i<16;i++){txt[i]=' ';} 
  UART1_Read_Text(txt,"c",7);    // Read data from 'b' to 'c'
  Lcd_Out(1, 10, "      ");
  Lcd_Out(1, 10, txt);
  for(i=0;i<16;i++){txt[i]=' ';}
  UART1_Read_Text(txt,"d",2);   // Read data from 'c' to 'd'
  Lcd_Out(2, 1, txt);
  for(i=0;i<16;i++){txt[i]=' ';}
  UART1_Read_Text(txt,"e",7);   // Read data from 'd' to 'e' finish of the data sent
  Lcd_Out(2, 10, "      ");
  Lcd_Out(2, 10, txt);
  for(i=0;i<16;i++){txt[i]=' ';}

  delay_ms(500);

   chk = "";
 }
 }
 }
ارجو من الخبراء فحص الكود وتنبيهي الى ما يلزم لتقليصه


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


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