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

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

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 09:25 AM المشاركة 1   
yel frequency meter Twitter FaceBook Google+



شباب انا كنت عملت موضوع عن نفس الحاجة ومحدش رد عليا ارجوا الاهتمام فأنا والله في ورتة كبيرة ارجوا ان تساعدوني بسرعة .....

انا في عجالة عاوز اعمل عداد للتردد احسب او بشكل اخر عاوز اعرف الزمن الدوري للنبضة اللي دخلة او بمعني اخر time of one circut or period
انا عارف اني المفروض اشتغل بالتيمر tmr0 بس مش عارف اتحكم فية ارجوا الافادة

//sbit
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

sbit fe at portc.b0;
//VAR
int x=0;
int y=0;
int flag=0;
char xtxt [15];
//moudule
void interrupt()
{
y++;
intcon.f2=0;
}

void main() {
//sutpe
intcon=0b10100000;
option_reg=0b10000000;
tmr0=0;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
Lcd_Out(1,6,"RPM");
inttostr(x,xtxt);
lcd_out_cp(xtxt);
if(fe==0&&flag==0){
flag=1;
tmr0=0;
x=0;
y=0;
}
if(fe==1&&flag==1)
{
x=tmr0+(y*256);
flag=0;
}
}
}//main


اعلانات

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 10:28 AM المشاركة 2   
افتراضي


اسف في بعض الاخطاء اللي وجتها مثل اني موصل النبضات علي a0 هي موصلة علي b0 والكود غيرتة
وهوا كدة
//sbit
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

sbit fe at portc.b0;
//VAR
long int x=0;
long int y=0;
int flag=0;
char xtxt [70];
//moudule
void interrupt()
{
y++;
intcon.f2=0;
}

void main() {
//sutpe
intcon=0b10100000;
option_reg=0b10000000;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
Lcd_Out(1,1,"RPM");
inttostr(x,xtxt);
lcd_out_cp(xtxt);
delay_ms(100);
if(fe==0&&flag==0){
flag=1;
x=0;
y=0;
tmr0=0;
}
if(fe==1&&flag==1)
{
x=tmr0+(y*256);
flag=0;
}
}
}//main

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

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 03-03-2013, 11:00 AM المشاركة 3   
افتراضي


تفضل اخي الكريم ربما يفيدك هذا الرابط

http://www.qariya.com/vb/showthread.php?t=105347


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 12:53 PM المشاركة 4   
افتراضي


اخي اعزيز المشروع ممتاز وبسيط بس فية مشكلة كبيرة انة في خطاء كبير قيمة delay مش ثابتة يعني لما بتكون بتقيس تردد 700hz بتحتاج 970ms ولكن لو 1000hz بتحتاج 950ms وطبعا دة مشكلة كبيرة جدا
لاني انا كنت عامل الموضوع دة علشان انا عاوز اشغلة عداد rpm وطبعا الخطاء في 1 هيسببلي 60 rpm خطاء ودة رقم كبير جدا


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 12:59 PM المشاركة 5   
افتراضي


السؤال هو الخطاء جاي منين هل الان الdelay مش مضبوط وهل ممكن استخدم التيمر علشان احسب ثانية بالضبط


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 05:25 PM المشاركة 6   
افتراضي


اية يا شباب مفيش حد معبر فيا لية
في برنامج واحد عملة بس انا مش فاهمة خالص هو كل تالي :

/************************************************** ****************************
* Project name:
EP6_freq.c EasyPIC6 only, is a freq/rpm meter using the COG display
* Copyright:
Open-source - Oct 2009 - Roman Black
* Description:
I modified the EasyPIC6 COG text display example to make a simple
frequency/rpm meter. The incoming frequency to be measured must be
connected to PORTC.F0 (T1CKI) pin. Max freq measured is 65000 Hz.
Note! If you don't have a freq signal connected, you can test it
by pressing the RC0 pushbutton REALLY quickly.

* Test configuration:
MCU: PIC16F887
http://ww1.microchip.com/downloads/e...Doc/41291F.pdf
Dev.Board: EasyPIC6
http://www.mikroe.com/en/tools/easypic6/
Oscillator: HS, 8.0000 MHz
Ext. Modules: - freq signal comes in on PORTC.F0
SW: mikroC PRO for PIC v2.50
http://www.mikroe.com/en/compilers/mikroc/pro/pic/

************************************************** ****************************/

// global declarations

// Port Expander module connections
sbit SPExpanderCS at RA2_bit;
sbit SPExpanderRST at RA3_bit;
sbit SPExpanderCS_Direction at TRISA2_bit;
sbit SPExpanderRST_Direction at TRISA3_bit;
// End Port Expander module connections

unsigned char int_sec_count; // used to count ints/second
unsigned char new_second; // is set once per second

unsigned char tchar; // text char used in LCD display numbers
unsigned int freq; // 0-65000, holds freq value to display

unsigned long rpm; // holds RPM for calcs AND display

char txt[12]; // used to display number string

char sec_count;

//-----------------------------------------------------------------------------
void interrupt()
{
// this is TMR2 overflow interrupt
int_sec_count--;
if(!int_sec_count) // if reached 1 second!
{
// get the TMR1 count!
T1CON = 0; // TMR1 OFF
freq = ((TMR1H << 8) + TMR1L); // put TMR1 16bit value in freq
TMR1L = 0; // clear TMR1
TMR1H = 0;
T1CON = 0b00000011; // TMR1 back ON again

// that's everything done for this second
new_second++;
int_sec_count = 125; // load ready to generate another second
}
TMR2IF_bit = 0; // Clear TMR2IF before exit
}

//-----------------------------------------------------------------------------
void main()
{

//-------------------------------------------------------
// setup PIC 16F887 registers
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

TRISC = 0b00000001; // PORTC.F0 = input from freq signal

//-------------------------------------------------------
// EasyPIC6 COG text LCD setup
// Port Expander Library uses SPI1 module
SPI1_Init(); // Initialize SPI module used with PortExpander

// show startup message
SPI_Lcd_Config(0); // Initialize Lcd over SPI interface
SPI_Lcd_Cmd(_LCD_CLEAR); // Clear display
SPI_Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
SPI_Lcd_Out(1,2, "EP6 Frequency"); // display startup text to Lcd
SPI_Lcd_Out(2,2, " & RPM Meter ");
Delay_1sec();
Delay_1sec();

// clear LCD again before main
SPI_Lcd_Cmd(_LCD_CLEAR);

//-------------------------------------------------------
// setup the timers for frequency counting

// setup TMR1
T1CON = 0b00000011; // TMR1 ON, external clock pulse on PORTC.F0

// setup TMR2 and enable TMR2 int
T2CON = 0b00011111; // TMR2 ON, 8MHz xtal, 16:4:1 = 31250 Hz
PR2 = 250; // TMR2 int is 31250 / 250 = 125 ints/sec
PIE1.TMR2IE = 1; // TMR2 interrupt is on
INTCON = 0b11000000; // GIE=ON, PIE=ON

// load variables ready to run
int_sec_count = 125;

//-------------------------------------------------------
// now do the main run loop
while(1)
{
// safe limit freq at 65 kHz
if(freq > 65000) freq = 65000;

// everytime we reach a second, calculate and display freq
if(new_second)
{
new_second = 0;

// display freq as "xxxxx Hz"
WordToStr(freq,txt);
SPI_Lcd_Out(1,8,txt);
SPI_Lcd_Out(1,14,"Hz");

// calc RPM from freq
rpm = (freq * 60);

// format rpm to display as "xxxxxxx RPM"
LongToStr(rpm,txt); // get the rpm as a string
SPI_Lcd_Out(2,2,txt); // and display RPM!
SPI_Lcd_Out(2,14,"RPM");
}
}
}


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


تفضل اخي ...
http://www.4shared.com/rar/YKkoc4h7/...r_digital.html
هذا المشروع كنت عملته من فترة يعطي تحذيرات عند الانخفاض و الارتفاع ...
يمكنك التعديل فيه اذا لم ترغي بهذه الاضافة ...


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 03-03-2013, 07:30 PM المشاركة 8   
افتراضي


الف شكر مهندس حيدر
بس كان ليا سؤال مهم هو لية لما التردد بيعدي 1000hz بيكون الحطاء كبير ؟؟؟
وكمان سؤال افضل حاجة اعملها علشان القيمة تبقا صح اعمل اية ؟؟

إضافة رد

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

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

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


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

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