Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

AT89C52 interfaced with RFM12 Module

Status
Not open for further replies.

firevsice55

Junior Member level 1
Joined
May 1, 2010
Messages
16
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,392
The following program dont work, cant figure out why. I've tried all kinds of configurations for the RFM12 module in this code.
The hardware is connected in the right way, its 868Mhz RFM12 Module.
The transmitter code seems to be correct, but the receiver is creating an issue.

Receiver Code For switching on a Relay
Code:
#include<reg51.h>
#include"delay.h"
#include"intrins.h"
//#include <lcd.h>
//#include "serial_tx_rx.h"

typedef unsigned char uchar; 
typedef unsigned int  uint;

sbit SDI  = P2^4;
sbit nSEL = P2^3; 
sbit nIRQ = P3^2;
sbit SCK  = P2^5;  
sbit SDO  = P2^2;  
sbit LED  = P2^0;
sbit RES  = P2^1;
sbit INTQ = P3^3;

sbit RELAY1 = P1^6;
/*sbit RELAY2 = P2^3;
sbit RELAY3 = P2^4;
sbit RELAY4 = P2^5;			   */

void delay_ms1(unsigned int c1);
void Init_RF12_rx(void); 
void Write0( void ); 
void Write1( void ); 
void WriteCMD( uint CMD ); 
uchar RF12_RDFIFO(void);

uint  CheckSum;
uchar i=0,j=0;

bdata char relay;
/*sbit relay_1=relay^0;
sbit relay_2=relay^1;
sbit relay_3=relay^2;
sbit relay_4=relay^3;	*/

uchar RF_RXBUF[19]; 

void delay_ms1(unsigned int c1)	//for 11.059Mhz
{
	unsigned c2;
	for(;c1>0;--c1)
		for(c2=0;c2<115;++c2)
//			for(c3=0;c3<10;++c3)
				;
}

void Init_RF12_rx(void) 
{ 
	nSEL=1; 
	SDI=1; 
	SCK=0; 
	SDO=0; 
	
	WriteCMD(0x8067); //EL,EF,868band,12.0pF
    WriteCMD(0x82D9); //er,!ebb,ET,ES,EX,!eb,!ew,DC (bug was here)
    WriteCMD(0xA67C); //freq select
    WriteCMD(0xC647); //4.8kbps
    WriteCMD(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
    WriteCMD(0xC2AC); //AL,!ml,DIG,DQD4
    WriteCMD(0xCA81); //FIFO8,SYNC,!ff,DR (FIFO level = 8)
    WriteCMD(0xCED4); //SYNC=2DD4;
    WriteCMD(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    WriteCMD(0x9850); //!mp,90kHz,MAX OUT
   // WriteCMD(0xCC77); //!OB1,!OB0, LPX,!ddy,DDIT,BW0
    WriteCMD(0xE000); //NOT USED
    WriteCMD(0xC800); //NOT USED
    WriteCMD(0xC040); //1.66MHz,2.2V
}

void main() 
{ 
	RES=1;
	nIRQ=0;	
	 
//	initialise_lcd(); 
	delay_ms1(500);
	delay_ms1(500);
//	delay_ms1(500);
	LED = 0;
	delay_ms1(50);
//	display_msg("Keep Finger");
//	init_serial();
//	send_hex8(0xab);
//	send_char('\r');
//	send_char(':');
/*	initialise_lcd();
	delay_ms1(50);
	initialise_lcd();
	delay_ms1(50);
	initialise_lcd();
	delay_ms1(50);
	display_msg("welcome");
	diplay_hex8(0x23);*/
	
//P3=0xaa;
//while(1);
	
	Init_RF12_rx(); 
	WriteCMD(0xCA81); 
	WriteCMD(0xCA83);

	LED=1;
    RELAY1 = 0;
	while(1) 
	{  
		RELAY1 = 0;
		while(!nIRQ) 
		{     
			
			LED =0;
			RF_RXBUF[i++] = RF12_RDFIFO();   
			if(i==17) 
//			if(i==14) 
			{  
				i=0; 
			       //reset FIFO and read to receive next Byte          
				CheckSum=0;   
				for(j=0;j<16;j++) 
					CheckSum+=RF_RXBUF[j];  //add 0x30-----0x3F   
				CheckSum&=0x0FF;



				relay = RF_RXBUF[1];
		//		send_cmd(0x01);
		//		send_data(	relay +0x30);
				if(relay==0x04)
				{
					relay = 0;
//					send_cmd(0x01);
//					display_msg("open Doors");
					RELAY1 = 1;
						delay_ms1(500);
							delay_ms1(500);
							delay_ms1(500);
							delay_ms1(500);
							delay_ms1(500);

							delay_ms1(500);
						
							
						
							delay_ms1(10);
//							send_cmd(0x01);
//							display_msg("Keep Finger");
				}
					RELAY1 = 0;
					WriteCMD(0x8208);

					delay_ms1(500);
					delay_ms1(500);
				LED=1;

				if(CheckSum==RF_RXBUF[16])      
				{ 
					LED=1; 
				} 

				  delay_ms1(8); 
				  LED=0; 
				  
			} 
		} 
//		LED =1;
	}
}
void Write0( void ) 
{ 
	SCK=0; 
	_nop_(); 
	SDI=0; 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_();
	_nop_(); 
	_nop_(); 
	_nop_();                                           
	_nop_(); 
	_nop_(); 
	SCK=1; 
	_nop_(); 
}
void Write1( void ) 
{ 
	SCK=0; 
	_nop_(); 
	SDI=1; 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	SCK=1; 
	_nop_(); 
}
void WriteCMD( uint CMD ) 
{ 
	uchar n=16; 
	SCK=0; 
	nSEL=0; 
	while(n--) 
	{ 
		if(CMD&0x8000) 
			Write1(); 
		else 
			Write0(); 
		CMD=CMD<<1; 
	} 
	SCK=0; 
	nSEL=1; 
} 
uchar RF12_RDFIFO(void) 
{ 
	uchar k,Result; 
	SCK=0; 
	SDI=0; 
	nSEL=0;  
	for(k=0;k<16;k++) 
	{                     //skip status bits 
		SCK=1; 
		_nop_(); 
		_nop_(); 
		SCK=0; 
		_nop_(); 
		_nop_(); 
	}                    
	Result=0; 
	for(k=0;k<8;k++) 
	{                    //read fifo data byte 
		Result=Result<<1; 
		if(SDO) 
		{ 
			Result|=1; 
		} 
		SCK=1; 
		_nop_(); 
		_nop_(); 
		SCK=0; 
		_nop_(); 
		_nop_(); 
	} 
	nSEL=1; 
	return(Result);  
}

Transmitter Code for the above receiver.

Code:
#include<reg52.h>
#include<stdio.h>
#include"intrins.h"
typedef unsigned char uchar; 
typedef unsigned int  uint; 

sbit SDI  = P2^4;
sbit nSEL = P2^3; 
sbit nIRQ = P3^2;
sbit SCK  = P2^5;  
sbit SDO  = P2^2;  
sbit LED  = P2^0;
sbit RES  = P2^1;
sbit INTQ = P3^3;


 uint ChkSum;
int sushant,x; 
int temp_var;
// char relay;					   

void Init_RF12_tx(void); 
void Write0( void ); 
void Write1( void ); 
void WriteCMD( uint CMD ); 
void DelayUs( uint us ); 
void DelayMs(uint ms); 
void WriteFSKbyte( uchar DATA );

void delay_ms1(unsigned int c1);

////////////////////////  lcd   ////////////////////////////////////////////////////

// #define DATA_LINE P0	// proteus = p0


//void lcd_delay_ms(unsigned char ch); 
//bit read_busy();
//void write_byte(unsigned char dat);
//void send_cmd(unsigned char dat);
//void display_msg(unsigned char *dat);
//void send_data(unsigned char dat);
//void initialise_lcd();



void delay_ms1(unsigned int c1)	//for 11.059Mhz
{
	unsigned int c2;
	for(;c1>0;--c1)
		for(c2=0;c2<115;++c2)
//			for(c3=0;c3<10;++c3)
				;
}


////////////////////////   main   ////////////////////////////////////////////////////

void main()
 
{
	RES=1;
	nIRQ=1; 
//	initialise_lcd();
	delay_ms1(100);
	delay_ms1(100);	 
	Init_RF12_tx();//only now comment
//	initialise_lcd();
//	display_msg("sushant");

//	TMOD = 0x20;
//	SCON = 0X52;
//    TH1 = 0XFD;	
//	TR1 = 1;	
	while(1) 
	{    
	
	//	while(RI==0);		 //to make if in next level
		x = 0x04;
//		sushant = SBUF; 
//		x = sushant;
//		x = x & 0x7f;
//		x = (x - 0x30);
//		SBUF = 0;
//		RI = 0;

//		send_cmd(0x01);
//		send_cmd(0x80);
//		display_msg("inside");
//		send_cmd(0xc0);
//		send_data(		x  +0x30);


							
		LED=0;
		ChkSum=0;
		WriteCMD(0x8238); 

	//	WriteCMD(0x8228);     //OPEN PA ,enable transmitter
		delay_ms1(1);
		_nop_(); 
		_nop_(); 
		WriteFSKbyte( 0xAA ); 
		WriteFSKbyte( 0xAA ); 
		WriteFSKbyte( 0xAA );  
		WriteFSKbyte( 0x2D ); 
		WriteFSKbyte( 0xD4 ); 
		
		WriteFSKbyte( 0x30 );//DATA0   
		ChkSum+=0x30; 
		WriteFSKbyte( x   );//DATA1  
		ChkSum+=	x ; 				  
		WriteFSKbyte( 0x32 ); 
		ChkSum+=0x32; 
		WriteFSKbyte( 0x33 ); 
		ChkSum+=0x33; 
		WriteFSKbyte( 0x34 ); 
		ChkSum+=0x34; 
		WriteFSKbyte( 0x35 ); 
		ChkSum+=0x35; 
		WriteFSKbyte( 0x36 ); 
		ChkSum+=0x36; 
		WriteFSKbyte( 0x37 ); 
		ChkSum+=0x37; 
		WriteFSKbyte( 0x38 ); 
		ChkSum+=0x38; 
		WriteFSKbyte( 0x39 ); 
		ChkSum+=0x39; 
		WriteFSKbyte( 0x3A ); 
		ChkSum+=0x3A; 
		WriteFSKbyte( 0x3B ); 
		ChkSum+=0x3B; 
		WriteFSKbyte( 0x3C ); 
		ChkSum+=0x3C; 
		WriteFSKbyte( 0x3D );	
		ChkSum+=0x3D; 
		WriteFSKbyte( 0x3E ); 
		ChkSum+=0x3E; 
		WriteFSKbyte( 0x3F );//DATA15   
		ChkSum+=0x3F; 
		ChkSum &= 0x0FF; 
		WriteFSKbyte( ChkSum ); 
		WriteFSKbyte( 0xAA ); 
		WriteFSKbyte( 0xAA ); 
		WriteFSKbyte( 0xAA ); 
	
		WriteCMD( 0x8208 );      //CLOSE PA ,disable tx
	//	WriteCMD( 0x8200 );     //Receive end, enter sleep 

			delay_ms1(100);
				delay_ms1(10);
					delay_ms1(10);
						delay_ms1(100);
				delay_ms1(100);
					delay_ms1(100);
		 
		LED=1; 
		delay_ms1(100);
		
			delay_ms1(10);
				delay_ms1(10);
					delay_ms1(100);
						delay_ms1(100);
				delay_ms1(100);
					delay_ms1(100);
	//	LED=0; 
	//	delay_ms1(1000);	 

	  }	
}
void Init_RF12_tx(void) 
{
	nSEL=1; 
	SDI=1; 
	SCK=0; 

	WriteCMD(0x80A7); //EL,EF,868band,12.0pF
    WriteCMD(0x8208); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
    WriteCMD(0xA680); //frequency select
    WriteCMD(0xC647); //4.8kbps
    WriteCMD(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
    WriteCMD(0xC2AB); //AL,!ml,DIG,DQD4
    WriteCMD(0xCA81); //FIFO8,SYNC,!ff,DR
    WriteCMD(0xCED4); //SYNC=2DD4
    WriteCMD(0xC4F7); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    WriteCMD(0x9850); //!mp,90kHz,MAX OUT
    //WriteCMD(0xCC77); //OB1, COB0, LPX, Iddy, CDDITCBW0
    WriteCMD(0xE000); //NOT USED
    WriteCMD(0xC800); //NOT USED
    WriteCMD(0xC040); //1.66MHz,2.2V
}
void Write0( void ) 
{ 
	SCK=0; 
	_nop_(); 
	SDI=0; 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_();                                           
	_nop_(); 
	_nop_(); 
	SCK=1; 
	_nop_(); 
}
void Write1( void ) 
{ 
	SCK=0; 
	_nop_(); 
	SDI=1; 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	SCK=1; 
	_nop_();
}
void WriteCMD( uint CMD ) 
{ 
	uchar n=16; 
	SCK=0; 
	nSEL=0; 
	while(n--) 
	{ 
		if(CMD&0x8000) 
			Write1(); 
		else 
			Write0();    
		CMD=CMD<<1; 
	} 
	SCK=0; 
	nSEL=1; 
}
void WriteFSKbyte( uchar DATA ) 
{ 
   
	uchar RGIT=0; 
	uint temp=0xB800; 
	temp|=DATA; 
Loop: 
	SCK=0; 
	nSEL=0; 
	SDI=0; 
	SCK=1;  
	if(SDO)               //Polling SDO 
	{ 
		RGIT=1; 
	} 
	else 
	{ 
		RGIT=0; 
	}  
	SCK=0; 
	SDI=1; 
	nSEL=1; 
	if(RGIT==0) 
	{ 
		goto Loop; 
	} 
	else 
	{ 
		RGIT=0; 
		WriteCMD(temp); 
	}   
}

If Anyone can please solve my problem
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top