Saturday, July 5, 2014

Sử dụng timer/counter 1 của ATmega8 để đo tần số hiển thị LCD

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/



5 comments:

  1. code này dùng trên Keil C được không ạ?

    ReplyDelete
  2. KeilC 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

    ReplyDelete
  3. nhưng code hex download về nạp luôn là dùng đc hả bác

    ReplyDelete
  4. thế đo 2 chân 11 với chân nào hả bác

    ReplyDelete
    Replies
    1. khi cần đo tần số ở đâu thì dùng 2 que đo nối chân 11 và chân GND (chung)

      Delete