Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)
1.
#include <avr/io.h>
#define F_CPU 16000000L //cpu frequency
#include <util/delay.h> //delay header file
#include <time.h> //timer
#include "avr/interrupt.h" //HEADER FILE for interrupt
#define Baudrate 9600 //defining baudrate
#define FOSC 1843200 //UART communication
#define UBRR ((FOSC/(16*Baudrate))-1)
int TimerOverflow;
int main()
{
int dist;
long count;
DDRB=0x01; //port b pin1 as output
PORTC=0xFF; //on entire portc
sei(); //interrupt
TIMSK1 =(1<<TOIE1); //timermask
TCCR1A=0; //timer1 control register
Uart_Init(); //uart itiating for dispalying distance
while(1)
{
if((UCSR0C && (1<<5))==1)
{
UDR0_0=dist; // stroing distance
_delay_ms(500);
}
PORTB |= (1<<0); //port b on for triggering
_delay_us(10) ;
PORTB &=~(1<<0); //off port b
while((TIFR1 & (ICF1))==0)
TCNT1 = 0 ; //timer1 counter
TCCR1B = 0X01; //timer control register no prescalar mode
TIFR1 = 1<<ICF1; //interrupt register
TIFR1 = 1<<TOV1; //clearing timer overflow flag
TimerOverflow=0;
while((TIFR1 &(ICF1))==0); //logic for calculating distance
long count =ICR1+(65535*TimerOverflow);
int dist=count/466.47;
_delay_ms(500);
}
}
ISR(TIMER1_OVF_vect)
{
TimerOverflow++;
}
void Uart_Init()
{
UBRR0H=UBRR>>8;
UBRR0L=UBRR;
UCSR0B=1<<TXEN0;
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
}