schmez
Joined: 14 Jun 2011 Posts: 24 Location: St. Louis
|
Module Interface issues |
Posted: Mon Jul 25, 2011 10:51 pm |
|
|
Hi All,
I am simply trying to communicate to a module that I send an AT command to and look for a response. The AT command is stored in EEPROM and I expect the AT command to be the reply from the module. I am comparing the AT command string and setting a result that will then turn on an LED. I have run this code with a Hyperterminal and it works fine but when I hook up to the module it does not. I put a sniffer on the comm and I see garbage go out. I believe it is how I am handling the strings - it has been 15+ years since I have done this stuff and slowly getting back into the game. I appreciate any help or advice on this.
One last question - is there a way to clear the RCV buffer upon boot up of the controller - the module sends data to say ready and I have no need for this information.
Thank you,
Jeff
Code: |
#include <16F690.h>
#include <string.h>
#use delay (internal=4mhz)
#fuses INTRC_IO, NOMCLR, NOCPD
//#use rs232 (baud = 9600, xmit = PIN_C4,rcv = PIN_C5, ENABLE=PIN_C1, RETURN=PIN_C2, ERRORS, TIMEOUT=5000)
#use rs232 (baud = 9600, xmit = PIN_C4,rcv = PIN_C5, ENABLE=PIN_C1, ERRORS, TIMEOUT=5000, RESTART_WDT,DISABLE_INTS)
#rom 0x2100={78,65,77,69,32,48,48,58,48,55,58,101,48,58,100,54,58,101,48,58,52,50,13} //Store address
// Global Variables
int8 *i, iresult = -1;
int BTPAIR_ADR[23];
int BTPAIR_MEM[23];
int BTPAIR_MI[23];
int BTPAIR_STC[10];
int BTPAIR_ST[30];
int BT_CHECK()
{
for(i = 0; i < 22; i++)
{
printf("%c" read_eeprom(i)); //send AT command from EEPROM storage to module
BTPAIR_MEM[i]= read_eeprom(i);
}
*i = '\0'; //add null to end of string
printf("\r"); //send carriage return to accept AT command
strcpy (BTPAIR_MI, BTPAIR_MEM); //copy string to string
strncpy (BTPAIR_STC, BTPAIR_MI, 10); //copy the first 10 characters of the string
delay_ms(100);
gets(BTPAIR_ST); //get AT response from module
BTPAIR_ST[30] = '\0'; //add null to end of string
iresult=strncmp (BTPAIR_STC, BTPAIR_ST, 10); //compare the first 10 characters of the AT command sent to the return AT command
return(iresult);
}
void main()
{
strcpy(BTPAIR_MEM, "NAME 00:11:22:33:44:550"); //Initialize BTPAIR_MEM
do
{
if ((input(PIN_A3) == 0) && iresult != 0) //Swith intial on
{
BT_CHECK(); //Check for BT In Range
if (iresult == 0) //turn on LED if AT command sent is returned
{while (input(PIN_A3) == 0)
{
output_high(PIN_C0);
}
}
}
else
{ output_low(PIN_C0); //Turn OFF relay
iresult = -1; //clear iresult
}
}
while (TRUE);
} |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Jul 25, 2011 11:07 pm |
|
|
Quote: | strcpy(BTPAIR_MEM, "NAME 00:11:22:33:44:550"); |
This string has 23 chars in it. Your arrays are only 23 chars long,
which means there is no room in the arrays for the 0x00 byte at the end.
Increase the size of your arrays by at least 1, to accomodate the null. |
|