قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الاليقسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots
جربتها في البرتيس لكن لاتعمل لايظهر التردد في LCD!! وهل عمليا تقبل
طيب ايه رايك في الكود اللي وضعتة حولت الاشارة التناظرية الي رقمية وهذا اللي انت عايزة طيب ممكن تعملها لاني حاولت اغير المصدر تبعك بالاشارة الناتجة لكن لايعمل.
بارك الله فيك اخي حيدر.
بحمد الله توصلت لحل مناسب للاشارة المربعة وهو دقيق 100%
عن طريق التايمر بحيث نعد عدد النبضات الداخلة في ثانية وحدة.
حقيقتا وجدت الكود وغيرت فيه شي بسيط جدا و وصلتة على المقارن اللي ينتج الموجة المربعة واشتغل تمام التمام لكن هناك مشكلتين بسيطة وهي:
1- التردد يقرأ من 1-99 اذا وضعنا اكثر من ذالك يعني 100 او 200 يعطي ارقام غريبة وغيرت في الكود واصبح يقرأ 100 و 200 لكن لايقرأ من 1-99 يعني اعتقد ان المشكلة بسيطة ويمكن حلها.
2-ان التردد يقرا اعداد صحيحة دون فواصل وهذا كما ذكرت انت سابقا انه سهل وبسيط.
ملاحظة : نسطيع عملها بواحد متحكم بحيث نصدر الموجة المربعة وندخلها على timer لنفس المتحكم.
الدائرة:
الكود:
كود:
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections
// Define Messages
char message1[] = "F= Hz";
char *freq = "00";
void Display_Freq(unsigned int freq2write) {
freq[0] = (freq2write/10)%10 + 48; // Extract tens digit
freq[1] = freq2write%10 + 48; // Extract ones digit
// Display Frequency on LCD
Lcd_Out(1, 5, freq);
}
void main() {
CMCON0 = 0x07; // Disable Comparators
ANSEL = 0x00; // Disable analog channels
TRISC = 0x00; // PORTC O/P
TRISA = 0b00001100; // RA2/T0CKI input, RA3 is I/P only
OPTION_REG = 0b00101000; // Prescaler (1:1), TOCS =1 for counter mode
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,message1); // Write message1 in 1st row
do {
TMR0=0;
Delay_ms(1000); // Delay 1 Sec
Display_Freq(TMR0);
} while(1); // Infinite loop
}
الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:28 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)