Trong các ứng dụng của vi điều khiển thì đo tần số là 1 ứng dụng hay và có áp dụng trong thực tế
code: viết trên Winavr vì tôi không thích sử dụng Codevision nếu các bạn cần thì có thể nhắn tin cho tôi để lấy code nhé.
#include <avr/io.h>
#include <avr/interrupt.h>
#include "myLCD.h"
#include <stdio.h>
#include <util/delay.h>
#define sbi(sfr,bit) sfr|=_BV(bit)
#define cbi(sfr,bit) sfr&=~(_BV(bit))
static FILE lcd= FDEV_SETUP_STREAM(putChar_LCD, NULL,_FDEV_SETUP_WRITE);
volatile long sod=0,sodem;
int main()
{
float f_;
unsigned int doi;
init_LCD();
clr_LCD();
TIMSK|=(1<<TOIE1);
sei();
while (1)
{
clr_LCD();
move_LCD(1,1);
fprintf(&lcd,"do tan so");
move_LCD(2,1);
TCNT1=0;
TCCR1B|=(1<<CS11)|(1<<CS12);
_delay_ms(500);
cbi(TCCR1B,CS12);
cbi(TCCR1B,CS11);
sodem=sod*65535+TCNT1;
sod=0;
f_=sodem/0.5;
f_=f_/1000;
doi=f_/1;
fprintf(&lcd,"f=%d",doi);
f_=f_-doi;
doi=f_*100/1;
fprintf(&lcd,".%d kHz",doi);
_delay_ms(50000);
}
}
ISR (TIMER1_OVF_vect )
{
TCNT1=000;
sod++;
}
//-----------------------------------------------------------
download code tai:
http://www.4shared.com/rar/P2x2LpgWce/do_Hz.html
Dể có thể giao lưu và học hỏi tốt hơn bạn hãy vào Nhóm Facebook https://www.facebook.com/groups/dientuungdung123/
code này dùng trên Keil C được không ạ?
ReplyDeleteKeilC chỉ sử dụng cho 89x52 không dùng cho Atmega. muốn dịch cho atmega8 thì phải biên dịch bằng Winavr
ReplyDeletenhưng code hex download về nạp luôn là dùng đc hả bác
ReplyDeletethế đo 2 chân 11 với chân nào hả bác
ReplyDeletekhi cần đo tần số ở đâu thì dùng 2 que đo nối chân 11 và chân GND (chung)
Delete