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

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

littleengineer
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 6
نشاط [ littleengineer ]
قوة السمعة:0
قديم 19-03-2012, 05:42 PM المشاركة 1   
Question [ مساعدة ] كيفية عد النبضات الداخلة إلى الميكروكنترولر Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته



مساعدة بسيطة


الفكرة :

إدخال موجة مربعة إلى ميكروكنترولر من نوع 16F877A

وتقوم البك بعد عدد النبضات المدخلة خلال ثانية واحدة

وبالتالي حساب تردد الموجة المدخلة إلى البــــــــــــك

وبناءًا على التردد المدخل عبر Pin معينة يقوم البك بإضاءة

LED موصل على طرف آخر



شكرًا جزيلاً لكم

اعلانات

mot1639
:: مهندس ::
تاريخ التسجيل: May 2007
المشاركات: 34
نشاط [ mot1639 ]
قوة السمعة:0
قديم 19-03-2012, 05:57 PM المشاركة 2   
افتراضي


أخوي إذا كنت تستخدم ميكروسي جبر الأتي
كود:

char count; 
char count1; 
TRISB = 1;
TRISA = 0; 
PORTA=0;

void main () {
ADCON1=7; //This disables ADC
CMCON = 7; //This disables analogue comparator
count ==0; 
while(1) { 
if (Button(&PORTB, 0, 1, 1)) {               // Detect logical one B1
count++ ; 
} 
if (Button(&PORTB, 0, 2, 1)) {               // Detect logical one in B2
break;
}
} 
for ( count1 = 0; count1 <= count ; count1++)
         {
          PORTA=0xFF
          delay_ms(1000); 
          PORTA=0x00;
         {
}
تحياتي ..

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

littleengineer
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 6
نشاط [ littleengineer ]
قوة السمعة:0
قديم 19-03-2012, 06:00 PM المشاركة 3   
افتراضي


أخوي إذا كنت تستخدم ميكروسي جبر الأتي
كود:
 
char count; char count1; TRISB = 1; TRISA = 0; PORTA=0; void main () { ADCON1=7; //This disables ADC CMCON = 7; //This disables analogue comparator count ==0; while(1) { if (Button(&PORTB, 0, 1, 1)) { // Detect logical one B1 count++ ; } if (Button(&PORTB, 0, 2, 1)) { // Detect logical one in B2 break; } } 1for ( count1 = 0; count1 <= count ; count++) { PORTA=0xFF delay_ms(1000); PORTA=0x00; { }
تحياتي ... بس لو تسمح أذكر البيك إل

شكرًا جزيلاً لمساعدتك

نوع البك : 16F877A

لو تكرمت وذكرت لي الطرف للإدخال والطرف للإخراج

لأنني مبتدئ


شكرًا جزيلاً


mot1639
:: مهندس ::
تاريخ التسجيل: May 2007
المشاركات: 34
نشاط [ mot1639 ]
قوة السمعة:0
قديم 19-03-2012, 06:03 PM المشاركة 4   
افتراضي


شكرًا جزيلاً لمساعدتك

نوع البك : 16F877A

لو تكرمت وذكرت لي الطرف للإدخال والطرف للإخراج

لأنني مبتدئ


شكرًا جزيلاً

B1 ==> switch to Vcc
B2==> switch to Vcc

do your clicks in B1 , when you are finish click B2
then you will see the result in PORTA ... All Pins

regards


littleengineer
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 6
نشاط [ littleengineer ]
قوة السمعة:0
قديم 19-03-2012, 06:05 PM المشاركة 5   
Question


أخوي إذا كنت تستخدم ميكروسي جبر الأتي
كود:
 
 
char count; 
char count1; 
TRISB = 1;
TRISA = 0; 
PORTA=0;
 
void main () {
ADCON1=7; //This disables ADC
CMCON = 7; //This disables analogue comparator
count ==0; 
while(1) { 
if (Button(&PORTB, 0, 1, 1)) {               // Detect logical one B1
count++ ; 
} 
if (Button(&PORTB, 0, 2, 1)) {               // Detect logical one in B2
break;
}
} 
for ( count1 = 0; count1 <= count ; count1++)
         {
          PORTA=0xFF
          delay_ms(1000); 
          PORTA=0x00;
         {
}
تحياتي ..

استخدم برنامج mikroC

ونوع البك 16F877A

لو أمكن صورة الدائة الخاصة بهذه البرمجة


littleengineer
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 6
نشاط [ littleengineer ]
قوة السمعة:0
قديم 19-03-2012, 06:06 PM المشاركة 6   
افتراضي


شكرًا جزيلاً

انا لا أريد عد النبضات باستخدام المفتاح

ولكن باستخدام المولد Function Generator


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 19-03-2012, 06:24 PM المشاركة 7   
افتراضي


اوصل الدائرة كما في المخطط


و هذا كود البرنامج

كود:
int x=0;
char y[8];
void interrupt()
{
x++;
intcon.f1=0;
}
void main()
{
trisb.f0=1;
lcd_init(&portd);
lcd_cmd(LCD_CURSOR_OFF);
Lcd_Cmd(Lcd_Clear);
loop:
intcon=0b10010000;
delay_ms(993);
IntToStr(x,y);
lcd_out(1,2,y);
lcd_out_cp("    Hz");
intcon=0;
x=0;
goto loop;

}

تردد الكرستالة كلما كان اكبر كلما كانت النتائج ادق و لذلك استخدمنا المتحكم 877
يمكن عمل المشروع بالمتحكم 84 مع تغيير قيمة التاخير في عبارة delay


littleengineer
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 6
نشاط [ littleengineer ]
قوة السمعة:0
قديم 19-03-2012, 06:33 PM المشاركة 8   
Question


اوصل الدائرة كما في المخطط


و هذا كود البرنامج


كود:
int x=0;
كود:
char y[8]; void interrupt() { x++; intcon.f1=0; } void main() { trisb.f0=1; lcd_init(&portd); lcd_cmd(LCD_CURSOR_OFF); Lcd_Cmd(Lcd_Clear); loop: intcon=0b10010000; delay_ms(993); IntToStr(x,y); lcd_out(1,2,y); lcd_out_cp(" Hz"); intcon=0; x=0; goto loop; }



تردد الكرستالة كلما كان اكبر كلما كانت النتائج ادق و لذلك استخدمنا المتحكم 877
يمكن عمل المشروع بالمتحكم 84 مع تغيير قيمة التاخير في عبارة delay

شكرًا جزيلاً لك

لا أريد عرض النتيجة على شاشة LCD

فقط أريد تفعيل أحد المخارج لإضاءة ليد

والفكرة هي بإدخال ترددين مختلفين : 30Hz and 40Hz

وكل تردد يقوم بتفعيل مخرج مختلف

سيتم التبديل بين الترددين على مدخل واحد باستخدام مفتاح

وكل تردد سيقوم بإضاءة LED على أحد المخارج

سيكون هناك اثنين من الـ LEDs لإضاءتهما



شاكرًا جهودك ..

إضافة رد

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

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

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


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

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