Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
pussateli

Usar o Comando AT para GSM?

Recommended Posts

Boa noite a todos!

Estou tentando enviar os comandos AT usando o Mikroc porém sem sucesso. Já testei de todas as formas possíveis e não estou conseguindo ter sucesso..Alguém poderia me ajudar??

A intenção do projeto é movimentar uma mão mecânica através de mensagem de celular, em cada dedo tem um servo motor e desse servo vão vir pulsos de PWM para fazer a movimentação do servo. Toda a estrutura da programação já esta feita , só preciso inserir na programação o Comando AT ( esse comando é próprio pra comunicação GSM) . Sei de alguns comandos que eu preciso para fazer essa comunicação, porém não consigo colocar na programação... Se alguém puder me ajudar..ficarei muito grata..!

Informações:

Pic que estou usando é o 4431 e o modem GSM é o SIM900 da SIMCOM.

Desde já Muito Obrigada ;)

Att,

Nicoly.

Abaixo segue o código feito até então.


// VARIAVEIS GLOBAIS
unsigned char Texto[50];
unsigned char *Ponteiro_Texto;
unsigned char ucInicial = 0;
float d1,d2,d3,d4;

// Prototipos de função.
void Executa_Comando();

/*********************** CONFIGURAÇÃO DOS PERIFERICOS DO PWM EXTERNOS ********/

void configura_perifericos()
{
osccon=0X72;
trisa=0XFF;
ansel0= 0X00;

PTCON0= 0X04;
PTCON1=0X80;
PWMCON0=0X5F; //esta configurando pwm impares
PWMCON1=0X00;
OVDCOND=0XFF;
PTPERL=1501;
PTPERH=1501>>8;
}
void ajusta_dc(float dc1,float dc2,float dc3, float dc4)
{
PDC0L=((int)(1501*dc1))<<2;
PDC0H=((int)(1501*dc1))>>6;

PDC1L=((int)(1501*dc2))<<2;
PDC1H=((int)(1501*dc2))>>6;

PDC2L=((int)(1501*dc3))<<2;
PDC2H=((int)(1501*dc3))>>6;

PDC3L=((int)(1501*dc4))<<2;
PDC3H=((int)(1501*dc4))>>6;

}

// Rotina de Tratamento de Interrupção
void interrupt(){
unsigned char ucRecebe;
if(PIR1.RCIF==1){
ucRecebe = UART1_Read(); // Lê dado
if (ucRecebe == '['){ // Caractere inicializador
ucInicial = 1; // Indica inicialização do protocolo
Ponteiro_Texto = &Texto; // Reinicializa ponteiro
}else if (ucInicial == 1){ // Se chegou inicializador
*Ponteiro_Texto = ucRecebe; // Recebe Dado
Ponteiro_Texto++; // Incrementa ponteiro
}

if (ucRecebe == ']'){ // Recebeu finalizador
Executa_Comando(); // Executa comando
ucInicial = 0; // Aguarda novo inicializador
}
PIR1.RCIF = 0; // Zera Flag da interrupção do recebimento serial
}
}

void main() {
TRISD = 0; // Inicializa o PORTD como Saida
PORTD = 0; // Zera PORTD
TRISB = 0; // Inicializa o PORTB como Saida
PORTB = 0; // Zera PORTB
TRISC = 0b00000000; // Inicializa o PORTC como Saida
PORTC = 0b00000000; // Zera PORTC
CCP1CON=0b00001100; //PWM mode
T2CON=0b00000110; //timer2 on, prescaler 16

INTCON=0X00; // ZEROU
//PIE1=0x00;
//PIE2=0x00;
//PIE3=0x00;

PIR1=0X00;
PIR2=0X00;
PIR3=0X00;

ADCON1 = 0X0F; // TUDO COMO DIGITAL
UART1_Init(9600); // Inicializa UART a 9600bps.

PIR1.RCIF = 0; // Limpa Flag da interrupção de recebimento serial
PIE1.RCIE = 1; // Habilita interrupção de recebimento serial
PIR1.RCIP = 1; // Seta interrupção de alta prioridade do recebimento serial

RCON.IPEN = 1; // Seleciona o modo de 2 niveis de interrupção
INTCON.GIE = 1; // Habilita as interrupções de alta prioridade
INTCON.GIEL = 1; // Habilita as interrupções de baixa prioridade
configura_perifericos();

while(1);
}

void Executa_Comando()
{
if ((Texto[0] == 'P') && (Texto[1] == 'W')&& (Texto[2] == 'M'))
{
if (Texto[3] == '1')
{
switch (Texto[4])
{
case 'A':
d1=0.8;
d2=0.8;
d3=0.8;
d4=0.8;
break;
case 'F':
d4=0;
d3=0;
d2=0;
d1=0;
break;
case 'P':
d4=0;
d3=0;
d2=1;
d1=1;
break;
case 'Q':
d4=0;
d3=0;
d2=0.5;
d1=0.3;
break;
default :
PORTD = 0;
break;
}
}

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×