sir
we wrote the following code to receive the data in the form of packet. but due to some error in it, we are unable to receive it. please help.
#include<avr/io.h>
#include<util/delay.h>
#include<compat/deprecated.h>
#include"multiutil.h"
#include<avr/interrupt.h>
#define FORWARD PORTC=0x09
#define LEFT PORTC=0x05
#define RIGHT PORTC=0x0A
#define REVERSE PORTC=0x06
#define STOP PORTC=0x00
#define SID 9
#define RID 5
#define CID 5
#define X rec_b[1]&0b00001111
#define Y rec_b[2]&0b00001111
int i=0;
void config_cc(void)
{
transmit_char('<');
transmit_char(SID);
transmit_char(CID);
transmit_char('>');
}
volatile unsigned char rec_b[4];
int main(void)
{
init_usart(52); //Function to initialize communication
sei();
_delay_ms(100);
config_cc();
_delay_ms(100);
DDRB=0x06;
DDRC=0x0F;
DDRD=0xF0; //Activate Global interrupts
init_pwm(8);
_delay_ms(100);
while(1) //Continuous loop, to keep program running forever
{
if(((rec_b[1])&(0x10))==0x00)
{
if((X>6)&&(X<12))
{
FORWARD;
OCR1A=100;
OCR1B=100;
}
else if(X>12)
{
FORWARD;
OCR1A=X*8;
OCR1B=X*8;
}
else
{
STOP;
}
}
if((rec_b[1])&(0x10)==0x10)
{
if((X>6)&&(X<12))
{
REVERSE;
OCR1A=100;
OCR1B=100;
}
else if(X>12)
{
REVERSE;
OCR1A=X*8;
OCR1B=X*8;
}
else
{
STOP;
}
}
}
}
SIGNAL(SIG_UART_RECV)
{
rec_b[0]=UDR;
if(rec_b[0]=='@')
{
i++;
rec_b[i] = UDR;
if(i>=4)
{
i=0;
}
}
}
the above code has been written only for forward and reverse modes.
the code for transmission is as follows..
#include<avr/io.h>
#include<util/delay.h>
#include<compat/deprecated.h>
#include"multiutil.h"
#define ADDR_MM_W 0x98
#define ADDR_MM_R 0x99
#define LED_PORT PORTA
#define LED_1 0
#define SID 5
#define RID 9
#define CID 5
void config_cc(void)
{
transmit_char('<');
transmit_char(SID);
transmit_char(CID);
transmit_char('>');
}
void transmit_char_cc(char data_tx)
{
transmit_char(RID);
transmit_char(data_tx);
}
void init_MMA7660(void);
int i=0;
int main(void)
{
DDRA=0xFF;
char data[4]={'@',0,0,0};
_delay_ms(100);
init_usart(103);
_delay_ms(100);
DDRD=0b00001100;
sbi(PORTD,2);
cbi(PORTD,3);
DDRA=0X01;
sbi(PORTA,0);
config_cc();
_delay_ms(90);
PORTA=0;
init_i2c();
init_MMA7660();
cbi(PORTA,0);
while(1)
{
sbi(LED_PORT,LED_1);
start_i2c();
write_i2c(ADDR_MM_W);
write_i2c(0x00);
start_i2c();
write_i2c(ADDR_MM_R);
data[1]=read_i2c(0);
data[2]=read_i2c(0);
data[3]=read_i2c(1);
stop_i2c();
transmit_char(RID);
for(int i=0;i<4;i++)
{
transmit_char(data[i]);
}
_delay_ms(50);
cbi(PORTA,0);
_delay_ms(50);
}
}
void init_MMA7660(void)
{
start_i2c();
write_i2c(ADDR_MM_W);
write_i2c(0x07);
write_i2c(0x01);
stop_i2c();
}
