示例#1
0
// preamble -> FORMATTED -> unit id -> dest id -> data -> csum -> close...
// copied from transmitter code
void rf_xmit_packet(int8 data)
{
	int8 i;
	int8 outbytes[8];
	int16 crc;
		
	outbytes[0] = START_ID;
	outbytes[1] = TX_ID;
	outbytes[2] = UNIT_ID;
	outbytes[3] = RX_ID;
	outbytes[4] = dest_id;
	outbytes[5] = data;
	crc = _CRC16_(outbytes, 6);
	outbytes[6] = make8(crc,0);
	outbytes[7] = make8(crc,1);
	
	WriteCMD(0x8228); 		// OPEN PA
	delay_us(4);
	WriteCMD(0x8238);
	delay_us(1);
	WriteFSKbyte(0xAA);		// PREAMBLE
	WriteFSKbyte(0xAA);
	WriteFSKbyte(0xAA);
	WriteFSKbyte(0x2D);		// SYNCHRO PATTERN 0x2DD4
	WriteFSKbyte(0xD4);
	
	for (i=0; i<8; i++)
		WriteFSKbyte(outbytes[i]);

	WriteFSKbyte(0xAA);
	WriteFSKbyte(0xAA);
	WriteFSKbyte(0xAA);
	WriteCMD(0x8208); 		// CLOSE PA	
}
示例#2
0
void rf_SendByte(uchar data)
{
	uchar cmd = 0xB800 | data;
	WaitReady();//while(RFM12_IRQ==1);
	WriteCMD(cmd);

}
示例#3
0
void WriteFSKbyte(int8 DATA)
{
	int8 	RGIT = 0;
	int16 	temp = 0xB800;
	
	output_float(_SDO);
	output_low(_SCK);

	temp|= DATA;

Loop:	SCK = false;

	RF_EN	= false;
	output_low(_SDA);
	SCK		= true;
	RGIT 	= (SDO==true); //Polling SDO
	SCK		= false;
	output_high(_SDA);
	RF_EN	= true;

	if (RGIT==0){
		goto Loop;
	} else {
		RGIT=false;
		WriteCMD(temp);
	}
}
示例#4
0
/****************************************************************************

* Настройка
*
****************************************************************************/
void CursorOrDisplayShift(unsigned char SC,unsigned char RL)
{
  unsigned char temp=16;
  if(SC)
  {temp|=(1<<3);}
  if(RL)
  {temp|=(1<<2);}
  WriteCMD(temp, 0);
}
示例#5
0
/****************************************************************************

* Настройка
*
****************************************************************************/
void EntryModeSet(unsigned char ID,unsigned char SH)
{
  unsigned char temp=4;
  if(ID)
  {temp|=(1<<1);}
  if(SH)
  {temp|=(1<<0);}
  WriteCMD(temp, 0);
}
示例#6
0
/****************************************************************************

* Настройка
*
****************************************************************************/
void DisplayONOFControlBit(unsigned char D,unsigned char C,unsigned char B)
{
  unsigned char temp=8;
  if(D)
  {temp|=(1<<2);}
  if(C)
  {temp|=(1<<1);}
  if(B)
  {temp|=(1<<0);}
  WriteCMD(temp, 0);
}
示例#7
0
/****************************************************************************
*
* Настройка
*
****************************************************************************/
void FunctionSet(unsigned char DL,unsigned char N,unsigned char F)
{
  unsigned char temp=32;
  if(DL)
  {
    temp|=(1<<4);
  }
  if(N)
  {
    temp|=(1<<3);
  }
  if(F)
  {
    temp|=(1<<2);
  }
  WriteCMD(temp, 0);
}
示例#8
0
void init(void)
{
	//osccon = 0x70;				// 8Mhz internal OSC
	cmcon = 0x07;
	//ansel = 0;					// all is digital i/o on PortA
	option_reg.NOT_RBPU = 0;	// enable pullup resistors on PB
	option_reg.INTEDG = 0;		// falling edge interrupt	

	CONF_LED1_OUT();
	LED1=0;
	
	// setup SPI
	// outputs
	RFM12_CS_OUT();								// Module Chip Select 
	HI_SEL();									// RF CS is Active Low so set High
	
	SCK_OUT();									// SPI SCK as Output
	LOW_SCK();
	
	SDO_OUT();									// SPI SDO as Output
	LOW_SDO();
		
	// inputs
	RFM12_nIRQ_IN();							// nIRQ
	SDI_IN();									// SPI SDI
	
	delay_ms(500);								// Wait for RFM12 POR 

	
	WriteCMD(0x80F7);	// 915 EL, EF, 12.0pf
	WriteCMD(0xA7D0);	// 915=A7D0 904.50MHZ = A258	
	
	WriteCMD(0xC623);	// c608=38400 c611=19200 c623= 9600bps	
	
	WriteCMD(0xC22C);	// Data Filter: AL, !ML, digital filter,  4 dqd	
	WriteCMD(0xC4F7);	// AFC Autotune, -10khz..+7.5Khz, !st, !fi, OE, EN	
	WriteCMD(0x96A0);	// P16, VDI, FAST, 65khz, 0dBm, -103dBm
	WriteCMD(0xCA81);	// FIFO8, SYNC, !ff, DR
	
	//TX Config
	//WriteCMD(0x9850);	// !mp, 9810=30Khz, MAX out
	
	
	WriteCMD(0xE000);	// NOT USE
	WriteCMD(0xC80E);	// NOT USE
	WriteCMD(0xC000);	// CLK 1mhz, 2.2v 
	
	WriteCMD(0x8280);	// ER, EBB, !ET, ES, EX, !EB, !EW, !DC	


}
示例#9
0
void Init_RF12()
{
	RF_EN	= true;
	output_high(_SDA);
	output_low(_SCK);

	WriteCMD(0x80D8);	//enable register,433MHz,12.5pF
	WriteCMD(0x8208);	//Turn on crystal,!PA
	WriteCMD(0xA640);	//
	WriteCMD(0xC647);	//
	WriteCMD(0XCC77);	//
	WriteCMD(0x94A0);	//VDI,FAST,134kHz,0dBm,-103dBm
	WriteCMD(0xC2AC);
	WriteCMD(0xCA80);
	WriteCMD(0xCA83);	//FIFO8,SYNC,
	WriteCMD(0xC49B);
	WriteCMD(0x9850);	//!mp,9810=30kHz,MAX OUT
	WriteCMD(0xE000);	//NOT USE
	WriteCMD(0xC80E);	//NOT USE
	WriteCMD(0xC000);	//1.0MHz,2.2V
}
示例#10
0
void Init_RF12RX()
{
	RF_EN	= true;
	output_high(_SDA);
	output_low(_SCK);

	WriteCMD(0x80D8);		//enable register,433MHz,12.5pF
	WriteCMD(0x82D8);		//enable receive,!PA
	WriteCMD(0xA640);		//
	WriteCMD(0xC647);		//
	WriteCMD(0x94A0);		//VDI,FAST,134kHz,0dBm,-103dBm
	WriteCMD(0xC2AC);
	WriteCMD(0XCC77);		//
	WriteCMD(0xCA80);
	WriteCMD(0xCA83);		//FIFO8,SYNC,
	WriteCMD(0xC49B);
	WriteCMD(0x9850);		//!mp,9810=30kHz,MAX OUT
	WriteCMD(0xE000);		//NOT USE
	WriteCMD(0xC800);		//NOT USE
	WriteCMD(0xC000);		//1.0MHz,2.2V
	
	WriteCMD(0xCA80);
	WriteCMD(0xCA83); 					// reset FIFO and read to receive next Byte
	RF12_RDFIFO();
}
示例#11
0
uchar ReadFifo(void)
{
	WaitReady();
	return (WriteCMD(0xB000) & 0xFF);
}
示例#12
0
/****************************************************************************
*
* Дапишем данные в RAM
*
****************************************************************************/
void WriteDataToRam(unsigned char Data)
{
   WriteCMD(Data, 1);
}
示例#13
0
/****************************************************************************
*
* Установить указатель DDRAM
*
****************************************************************************/
void SetDDRAMAddress(unsigned char AC)
{
  unsigned char temp=128;
  temp|=AC;
  WriteCMD(temp, 0);
}
示例#14
0
/****************************************************************************
*
* Установить указатель CGRAM
*
****************************************************************************/
void SetCGRAMAddress(unsigned char AC)
{
  unsigned char temp=64;
  temp|=AC;
  WriteCMD(temp, 0);
}
示例#15
0
void main()
{		
			uchar i=0, j=0;
			uint chksum=0;
			uchar buffer[17];
			uchar temp=0;
			init();	
			LED1 = 1;								// Blink LED twice - slave
			delay_ms(500);			
			LED1 = 0;
			delay_ms(500);
			LED1 = 1;								// Blink LED twice - slave
			delay_ms(500);
			LED1 = 0;
			
			WriteCMD(0xCA81);
			WriteCMD(0xCA83);						// Enable FIFO	
		
			while(1)
			{
				while(RFM12_IRQ==0)
				{	
					temp=	ReadFifo();		// read in next Rx byte					
					buffer[i++] = temp;
					if(temp!=0){
						for(t=0;t<4;t++){
							LED1=1;						// turn on led
							delay_ms(25);
							LED1=0;						// turn on led
							delay_ms(25);
							}
					}
					
					if (i==17)							// received data + checksum = 17 bytes
					{
						i=0;
						WriteCMD(0xCA81);				// disable FIFO
	
						
						chksum=0;
						for(j=0 ; j<16 ; j++)			// calc checksum
							chksum+=buffer[j];
						chksum&=0x0FF;
						if(chksum==buffer[16]&&buffer[16]!=0)			// if checksum ok
						{
							for(t=0;t<4;t++){
							LED1=1;						// turn on led
							delay_ms(25);
							LED1=0;						// turn on led
							delay_ms(25);
							}
							
						}
					///	LED1=0;
						WriteCMD(0xCA81);				// disable FIFO
						WriteCMD(0xCA83);				// enable FIFO, re-Sync
					}//if
				}//while

			} //while
}
示例#16
0
/****************************************************************************

* Вернуть указатель в начало DDRAM
*
****************************************************************************/
void ReturnHome(void)
{
  WriteCMD(2, 0);
}
示例#17
0
/****************************************************************************

* Очистить дисплей
*
****************************************************************************/
void ClearDisplay(void)
{
  WriteCMD(1, 0);
}