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

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 16-12-2015, 05:11 AM المشاركة 1   
افتراضي ارجو المساعدة فى الحصول على قيمة معينة من متغير float Twitter FaceBook Google+



السلام عليكم

ياريت مساعدة فى التعامل مع متغير من نوع float اللذى يقبل الأرقام العشرية


سؤالى هنا ... كيف استطيع قراءة القيمة المخزنة داخل المتغير بطريقة فردية ..

لتوضيح سؤالى .. اكتر ..

انا عملت مشروع افوميتر لقراءة جهد بالملى فولت من مدخل البورت A فى ال Pic16f877a ... واستخدمة وحدة ال ADC لقراءة الفولت ... وخذنت القراءة فى متغير من نوع float ... ومثلا قيمة المتغير = 1234 ... واريد اخذ هذة القيمه وعرضها على 4 شاشات 7 سيجمنت ..


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


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


اتمنى ان اكون وضحت سؤالى ..

اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 16-12-2015, 05:53 AM المشاركة 2   
افتراضي


السلام عليكم

ياريت مساعدة فى التعامل مع متغير من نوع float اللذى يقبل الأرقام العشرية
سؤالى هنا ... كيف استطيع قراءة القيمة المخزنة داخل المتغير بطريقة فردية ..
لتوضيح سؤالى .. اكتر ..
انا عملت مشروع افوميتر لقراءة جهد بالملى فولت من مدخل البورت A فى ال Pic16f877a ... واستخدمة وحدة ال ADC لقراءة الفولت ... وخذنت القراءة فى متغير من نوع float ... ومثلا قيمة المتغير = 1234 ... واريد اخذ هذة القيمه وعرضها على 4 شاشات 7 سيجمنت ..

سؤالى أنا هنا - لماذا
ADC يعطى خرج من النوع الصحيح ذو 16 بت أى Int أو حسب اللغة التى تستخدمها و الكومبايلر فما علاقة ذلك بالنوع Float ؟ هذا النوع يستخدم إما يكون المصدر أصلا هكذا أو تحول متعمدا إليه لتجرى عليه حسابات
أما بالآفو، فحتى الآفو الجاهز لا يفعل ذلك هو يحول كل الدخول إلى رقم صحيح مقابل لجهد 0-2 فولت و ينقل العلامة العشرية بالهاردوير مع السويتش الذى يقسم الدخل الأعلى من 2 فولت

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

المهم خلاصة الكلام .. كيف استطيع القراءة من المتغير بطريقة فردية بمعنى اوضح لو المتغير قيمتة 1234 مثلا ازاى اقدر اقرء الخانة الاولى من المتغير او الرقم الاول من المتغير وحفظة فى متغير اخر واخذ الرقم الثانى وحفظة فى متغير اخر ...
اتمنى ان اكون وضحت سؤالى ..
الآن اصبح الأمر سهل فلديك القيمة فى رقم صحيح INT و مطلوب تقسيمة
ارجع لملف المساعدة للتأكد من الوظائف الحسابية ستجد البعض يستخدم "/" و البعض يستخدم DIV لقسمة رقمين صحيحين لتقسم الرقم على 10 للحصول على الرقم الأعلى
استخدم الرمز المناسب للحصول على الباقى فالبعض يستخدم "\" و البعض يستخدم mod اختصار modulo
فمثلا لديك A=1234

D1=A\1000 تحصل على 1
A=A mod 1000 يبقى فيه 234
D2=A\100 تحصل على 2
A=A mod 100 يبقى فيه 34
D3=A\10 تحصل على 3
D4=A mod 10 يبقى فيه 4

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 16-12-2015, 03:51 PM المشاركة 3   
افتراضي


سؤالى أنا هنا - لماذا
ADC يعطى خرج من النوع الصحيح ذو 16 بت أى Int أو حسب اللغة التى تستخدمها و الكومبايلر فما علاقة ذلك بالنوع Float ؟ هذا النوع يستخدم إما يكون المصدر أصلا هكذا أو تحول متعمدا إليه لتجرى عليه حسابات
أما بالآفو، فحتى الآفو الجاهز لا يفعل ذلك هو يحول كل الدخول إلى رقم صحيح مقابل لجهد 0-2 فولت و ينقل العلامة العشرية بالهاردوير مع السويتش الذى يقسم الدخل الأعلى من 2 فولت


الآن اصبح الأمر سهل فلديك القيمة فى رقم صحيح INT و مطلوب تقسيمة
ارجع لملف المساعدة للتأكد من الوظائف الحسابية ستجد البعض يستخدم "/" و البعض يستخدم DIV لقسمة رقمين صحيحين لتقسم الرقم على 10 للحصول على الرقم الأعلى
استخدم الرمز المناسب للحصول على الباقى فالبعض يستخدم "\" و البعض يستخدم mod اختصار modulo
فمثلا لديك A=1234

D1=A\1000 تحصل على 1
A=A mod 1000 يبقى فيه 234
D2=A\100 تحصل على 2
A=A mod 100 يبقى فيه 34
D3=A\10 تحصل على 3
D4=A mod 10 يبقى فيه 4
مشكور جداااا.. اخى على هذا التوضيح

ياريت لو عند حضرتك متسع من الوقت مثال صغير لتوضيح الفكرة ..

وهى اخذ قيمه متغير من نوع int وليكن مثلا 1234 وحفظ قل رقم فى متغير مستقل لكى استطيع عرض هذة القيم على شاشات 7سيجمنت..


وعلى فكرة لا يشطرت فى مشروعى متغير من نوع خاص .. متغير من نوع int يكفى بالغرض ..






الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 17-12-2015, 01:20 AM المشاركة 4   
افتراضي


السلام عليكم ورحمه الله

اخى الكريم هذه انا كتبت هذا البرنامج لتسهيل واضاح طلبى ..



الحمد لله البرنامج شغال بصورة طبيعيه ولكن ينقصنى نقطه وهى فى غاية الاهميه ..

انا عملت مصفوفه مكونه من اربع خانات
int arr[4] = {0,0,0,0};
وربطها مع اربع متغيرات وهم ... [quoteunsigned int a1=0,m1=0,e1=0,w1=0;][/quote]

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


وايضا تم ربط الاربع متغيرات ب اعمدة المصفوفه كما هو موضع فى الكود
a1 = arr [0] ;
m1 = arr [1] ;
e1 = arr [2] ;
w1 = arr [3] ;

المشكله هنا ... او سؤالى هنا ... اريد اخذ القراءة من محول الاشارة ADC وربطها مع المصفوفه لكى تأخذ الاربع متغيرات قيم المصفوفه وعرضها على شاشات ال 7 سيجمنت ...


وهذا البرنامج كامل للتوضيح


unsigned short mask(unsigned short num);
unsigned int a1=0,m1=0,e1=0,w1=0;
//----------------------------------------------------------------------------------//
void interrupt(){
portd=1;
portc=mask(a1);
delay_ms(1);
portd=2;
portc=mask(m1);
delay_ms(1);
portd=4;
portc=mask(e1);
delay_ms(1);
portd=8;
portc=mask(w1);
delay_ms(1);


INTCON=0b00100000;
TMR0=0;
}
//----------------------------------------------------------------------------------//

/*int point[]={0,0,0,0,};*/

int arr[4] = {0,0,0,0};


int adc_read2;
int po ;

void main() {

TRISD = 0; PORTD =0;
TRISC = 0; PORTC =0;
TRISE = 0; PORTE =0;
TRISA = 0xFF; // PORTA is input
ADC_Init(); // Initialize ADC module with default settings

OPTION_REG=0b10000101;
INTCON=0b10100000;
TMR0=217;

while(1)
{


adc_read2 = Adc_Read(1);

arr[4] =(adc_read2*48) ;

arr[4] = adc_read2;


a1 = arr [0] ;
m1 = arr [1] ;
e1 = arr [2] ;
w1 = arr [3] ;

}
}

unsigned short mask(unsigned short num){
switch (num){

case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;

}
}

وهذة صورة للمشروع ..






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


ياريت اجد من يساعدنى فى هذا البرنامج .... اكون لة مشكوررررر جدااااا ..


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 18-12-2015, 07:50 AM المشاركة 5   
افتراضي


هذا خطأ
اعمل مصفوفة من 10 خانات
الخانة صفر بها ما يكتب صفر على الشاشة
الخانة 1 فيها ما يكتب 1 على الشاشة وهكذا حتى
الخانة 9 فيها ما يكتب 9 على الشاشة
خذ الرقم كما شرحت لك فى ردى السابق و خذ ما يناظرة من المصفوفة
لو الرقم 9 خذ الخانة 9 وهكذا

إضافة رد

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

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

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


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

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