Estoy trabajando en un proyecto donde se requiere enviar un SMS a un número en particular. Estoy usando el módulo SIM900 GSM (marca - TinySIne) para interactuar con Atmega-164a. En primer lugar, he configurado el UART (protocolo serie) Rx Tx. A continuación se encuentra mi código que utiliza la función USART_putstring (), USART_transmit () y la función sendSMS (). Usando masilla, puedo verificar que el micro está enviando datos correctamente pero no puedo enviar SMS a un número en particular cuando conecto el tx de micro al Rx del módulo SIM900. ¿Alguien puede indicar dónde estoy cometiendo un error? También he adjuntado la hoja de datos de TinySine (SIM900), así como el enlace schmetic.
Gracias de antemano
Hoja de datos de TinySine (SIM900)
//set your clock speed
#define F_CPU 20000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 1stop bit */
UCSR0C = (0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ01);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}
void USART_putstring(char* StringPtr){
while(*StringPtr != 0x00){
USART_Transmit(*StringPtr);
StringPtr++;}
}
void sendSMS(){
USART_putstring("AT");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("AT+CMGF=1");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("AT+CMGS=+61416******");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("EXAMPLE SMS");
USART_Transmit(10);
USART_Transmit(13);
USART_Transmit(0x1A);
_delay_ms(2000);
}
int main (void)
{
USART_Init(MYUBRR);
while(1) {
_delay_ms(2000);/* 2 sec delay */
sendSMS();
}
}
Función sendSMS () modificada y función USART_putstring ()
void USART_putstring(char* StringPtr){
while(*StringPtr != 0x00){
USART_Transmit(*StringPtr);
StringPtr++;}
}
void sendSMS(){
_delay_ms(2000);
USART_putstring("AT");
_delay_ms(2000);
USART_putstring("AT+CMGF=1");
_delay_ms(2000);
USART_putstring("AT+CMGS=+6143*******");
_delay_ms(2000);
USART_putstring("EXAMPLE SMS");
USART_putstring("void sendSMS(){
_delay_ms(2000);
USART_putstring("AT+CMGF=1");
USART_Transmit(13);
_delay_ms(5000);
USART_putstring("AT+CMGS=\"+6143*******\"");
USART_Transmit(13);
_delay_ms(200);
USART_putstring("Hello World");
USART_Transmit(0x1A);
_delay_ms(1000);
}
x1A");
_delay_ms(2000);
}
Código de trabajo para SIM900
//set your clock speed
#define F_CPU 20000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 1stop bit */
UCSR0C = (0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ01);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}
void USART_putstring(char* StringPtr){
while(*StringPtr != 0x00){
USART_Transmit(*StringPtr);
StringPtr++;}
}
void sendSMS(){
USART_putstring("AT");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("AT+CMGF=1");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("AT+CMGS=+61416******");
USART_Transmit(10);
USART_Transmit(13);
_delay_ms(2000);
USART_putstring("EXAMPLE SMS");
USART_Transmit(10);
USART_Transmit(13);
USART_Transmit(0x1A);
_delay_ms(2000);
}
int main (void)
{
USART_Init(MYUBRR);
while(1) {
_delay_ms(2000);/* 2 sec delay */
sendSMS();
}
}