Resource icon

avr based frequency meter with full code and design file 2013-01-25

its a frequency meter. designed using atmega 8 (avr studio and avr gcc)
proteus file :
View attachment freq counter (3).zip
hex for lcd interfacing of the below code. ( the frequency is shown in an LCD)
View attachment freq_lcd.hex
Code:
#define F_CPU 8000000UL
#include <avr/interrupt.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
#include <stdlib.h>
#include<avr/io.h>
#include<util/delay.h>
short val,val1,i;
unsigned int presc;
char a[10]; 
char ff[3] = {'v','a','l'};
void usart_init();
void usart_putch(unsigned char send);
unsigned int usart_getch();
 
int main()
{
    DDRD = 0x02;
	//counter1 initialization
    TIMSK |= 1<<TICIE1;
	//TCCR1B |= 
	TCCR1B |=(1<<ICES1)|(1 << CS12) | (1 << CS11) | (1 << CS10);
	//counter 0 initialization
    TIMSK |= (1<<TOIE0);
	TCCR0 = (1<<CS02) | (1<<CS00);
	_delay_ms(50);		// delay of 50 mili seconds
	usart_init();		// initialization of USART
	sei();
	while(1)
	{
/*	switch (presc)
	{
     case 1024:
	 	TCCR0 = (1<<CS02) | (1<<CS00);
     case 256:
	    TCCR0 = (1<<CS02);
	case 64:
		TCCR0 = (1<<CS01) | (1<<CS00);
	case 8:
		TCCR0 = (1<<CS01) ;
	case 1:
		TCCR0 = (1<<CS00);
	default :
		TCCR0 = (1<<CS02) | (1<<CS00);
 
	}*/
	 }
 
	return 0;
}
 
 
 
void usart_init()
{
	UCSRB |= (1 << RXEN) | (1 << TXEN);   
					// Turn on the transmission and reception circuitry
	UCSRC |=  (1 << UCSZ0) | (1 << UCSZ1); 
					// Use 8-bit character sizes
 
	UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value..
							// into the low byte of the UBRR register
	UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value..
									// into the high byte of the UBRR register
}
 
void usart_putch(unsigned char send)
{
	while ((UCSRA & (1 << UDRE)) == 0); // Do nothing until UDR is ready..
							// for more data to be written to it
	UDR = send; // Send the byte 
}
 
unsigned int usart_getch()
{
	while ((UCSRA & (1 << RXC)) == 0);
				// Do nothing until data have been received and is ready to be read from UDR
	return(UDR); // return the byte
}
ISR(TIMER0_OVF_vect)
{ 
        val =TCNT1;
		TCNT1=0x00;
		TCNT0=0X00;
		TIFR =0x00;
	    val =(val/13.107)*100;
		itoa(val,a,10);
		for(i=0;i<=3;i++)
		{
        usart_putch(ff[i]);
	    }
		for(i=0;i<=10;i++)
		{
        usart_putch(a[i]);
	    }
		_delay_ms(100);
 
}
  • freq counter (3).zip
    14.6 KB · Views: 2,797
  • freq_lcd.hex
    8.3 KB · Views: 2,004
Reactions: Willen
Author
magvitron
Views
11,789
First release
Last update
Rating
0.00 star(s) 0 ratings

More resources from magvitron

Cookies are required to use this site. You must accept them to continue using the site. Learn more…