TODOPIC

Mecatrónica => Robótica => Mensaje iniciado por: Ana129m en 31 de Mayo de 2014, 15:53:20

Título: Problema Tarjeta SSC32 y pic18f4550
Publicado por: Ana129m en 31 de Mayo de 2014, 15:53:20
SALUDOS....

Estoy desarrollando el control de un brazo robótico por medio de la tarjeta SSC32, la tarjeta la he probado con el programa LynxTerm y funciona Correctamente, sin embargo ahora necesito realizar la comunicación con el Microcontrolador PIC18F4550 para enviarle los comandos desde este mismo. Al hacerlo observo que el LED indicador titila como si estuviera recibiendo información y la tengo configurada a una velocidad de 115200, pero no se mueve el brazo he leído mucho el manual de la tarjeta y siempre encuentro que los camandos son: "#0p1500s200<cr>" y esto es lo que envío desde el micro utilizando la librería USART de este micro así: WriteUSART("#0p1500s200<cr>").
voy a adjuntar mi código que es muy simple pero que necesito me ayuden a revisar necesito esto urgente y leo y leo y no consigo que funcione.

#ifdef   __cplusplus
extern "C" {
#endif
//******************************************
//FUSES USADOS CON CRISTAL DE 20MHZ Y USO DE PROGRAMADOR PICKIT3,

#pragma config PLLDIV=5 // (CRISTAL DE 20 MHz),Divide by 5 (20 MHz oscillator input)
#pragma config USBDIV=2 //USB clock source comes from the 96 MHz PLL divided by 2
#pragma config CPUDIV=OSC1_PLL2 //Primary Oscillator Src/1][96 MHz PLL Src/2] cpu trabajara a 48Mhz.
#pragma config FOSC=HSPLL_HS //HS oscillator, PLL enabled (HSPLL)
#pragma config FCMEN=OFF //Fail-Safe Clock Monitor disabled
#pragma config IESO=OFF //Oscillator Switchover mode disabled
#pragma config PWRT=ON //Power-up Timer Enable bit
#pragma config BOR=OFF //Brown-out Reset Enable bits: Brown-out Reset
//enabled in hardware only (SBOREN is disabled)
#pragma config BORV=0 //Brown-out Reset Voltage bits,Maximum.
#pragma config VREGEN=ON // USB voltage regulator enabled
#pragma config WDT=OFF //WDT disabled (control is placed on the SWDTEN bit)
#pragma config WDTPS=32768 //Watchdog Timer Postscale Select bits>> 1:32768
#pragma config MCLRE=ON //MCLR pin enabled; RE3 input pin disabled
#pragma config LPT1OSC=OFF //Timer1 configured for higher power operation
#pragma config PBADEN=OFF //PORTB<4:0> pins are configured as digital I/O on Reset
//If i need to use the RBx as analog in/out set this bit to ON
#pragma config STVREN=OFF //Stack full/underflow will not cause Reset
#pragma config LVP=OFF //PROGRAMACION EN BAJO VOLTAJE
#pragma config XINST=OFF // Instruction set extension and Indexed Addressing mode enabled
//the above bit is used enterely for debug program in circuit (ICPORT)
#pragma config CP0=OFF //Code Protection bit disable for 0,1,2
#pragma config CP1=OFF //
#pragma config CP2=OFF //
#pragma config CPB=OFF //Boot Block Code Protection bit:
#pragma config CPD=OFF //Data EEPROM Code Protection bit.
#pragma config WRT0=OFF //Write Protection bit for 0,1,2 is not write-protected
#pragma config WRT1=OFF
#pragma config WRT2=OFF
#pragma config WRTB=OFF //PROTECCI?N DE ESCRITURA PARA EL BLOCK DE BOOT
#pragma config WRTC=OFF //Configuration Register Write Protection bit,disable
#pragma config WRTD=OFF //Data EEPROM Write Protection bit,is not write protected
#pragma config EBTR0=OFF //000800-001FFFh
#pragma config EBTR1=OFF //Boot Block Table Read Protection bit,disable between
#pragma config EBTRB=OFF //000000-0007FFh and 002000-003FFFh
#pragma config CCP2MX=OFF
//#pragma config DEBUG = ON //ENABLE FOR PICKIT 3

//DISABBLE THE DEBUG OPTION WHEN You're going to do the proper deployment.




#ifdef   __cplusplus
}
#endif

#endif   /* FUSES_H */

//ARCHIVO config.c CONFIGURACION USART

//USART SETTINGS
OpenUSART(USART_TX_INT_OFF&
USART_RX_INT_OFF&
USART_ASYNCH_MODE&
USART_EIGHT_BIT&
USART_CONT_RX&USART_BRGH_HIGH,25);
TXREG=0x00;
RCSTAbits.SPEN=1; //PUERTO SERIAL HABILITADO
RCSTAbits.CREN=1; //HABILITAR RECEPCIÓN
TXSTAbits.TXEN=1;    //TRANSMISION HABILITADA
TXSTAbits.BRGH=1; //SELECCION DE RATA ALTA
TXSTAbits.TRMT=1; //REGISTRO DE TRANSMISION VACÍO
TXSTAbits.TX9=0; //BIT DE HABILITACION-TRANSMISION DE 9 BITS
//TXSTAbits.TX9D=0; // SE ASIGNA EL BIT, SÍ SE ACTIVO LA TRANSMISIÓN DE 9 BITS
//BAUDCONbits.TXCKP=0; //CLOCK AND DATA POLARITY SELECT BIT INVERTED=1, NOT INVERTED=0 BAUDCONbits.BRG16=0; //
//SPBRG=0X19; //TRANSMISION A 115200bps=0x19,25/PARA 9600=0X138,312

//MAIN PROGRAMA PRINCIPAL


#include <p18f4550.h>
#include <delays.h>
#include <adc.h>
#include <usart.h>
#include <xlcd.h>

//Librerias Propias ver includes.txt
#include "Fuses.h" //FUSES DEFINITIONS
#include "config.h" //PORTS, TRIS AND OTHER FLAVORS.
// pw[]="#0p1500s200<cr>";

void main(void)
{
InitPorts();
while(1)
{
putrsUSART("#0p1500s200<cr>");
Delay10KTCYx(60);
putrsUSART("#0p2000s200<cr>");
Delay10KTCYx(60);

}
CloseUSART();

}

No creo que tenga que ver con la configuración sino en la forma en que se envían los comandos o la tarjeta como los recibe.
Este es masomenos el código porque pues no lo puse todo es bastante largo, pero esta parte no logro que me funcione si alguien ha programado este micro para esa tarjeta por favor ayúdenme necesito esto con urgencia es mi Proyecto de Grado!!!!!!

Gracias...

Título: Re: Problema Tarjeta SSC32 y pic18f4550
Publicado por: jhozate en 01 de Junio de 2014, 14:33:52
hola, apenas voy migrando de lenguaje de programación, si me equivoco me disculpas
en esta sección de código
Código: C
  1. putrsUSART("#0p1500s200<cr>");
creo que se envía el ascii de lo que se encuentre entre " " (comillas) tal cual como está, es decir, el receptor recibe los caracteres <CR> , las hojas de datos ponen la  terminación de la trama de esa forma, pero si miras una tabla ascii veras que CR equivale a 0D (Hexadecimal) o 13(decimal), por lo tanto tu brazo robótico se queda esperando esa terminación.
En lenguaje C, CR se representa como  \r 
Entonces intenta:
Código: C
  1. putrsUSART("#0p1500s200\r");

Título: Re: Problema Tarjeta SSC32 y pic18f4550
Publicado por: Ana129m en 02 de Junio de 2014, 13:49:33
Si yo he tenido dudas con ese caracter, voy a probarlo...
GRACIAS...
Título: Re: Problema Tarjeta SSC32 y pic18f4550
Publicado por: Ana129m en 03 de Junio de 2014, 17:08:36
Cosas tan simples que pueden ponerte a pensar días enteros, me ha funcionado perfecto muchísimas gracias.
Simplemente cambie ese caracter como me has dicho y listo así me funciono :

#include <p18f4550.h>
#include <delays.h>
#include <adc.h>
#include <usart.h>
#include <xlcd.h>

//Librerias Propias ver includes.txt
#include "Fuses.h"         //FUSES DEFINITIONS
#include "config.h"         //PORTS, TRIS AND OTHER FLAVORS.
// pw[]="#0p1500s200<cr>";

void main(void)
{
   InitPorts();
   while(1)
   {
   putrsUSART("#0p1500s200\r");
   Delay10KTCYx(60);
   putrsUSART("#0p750s200\r");
   Delay10KTCYx(60);

   } 
   CloseUSART();

}
Ya puedo continuar con todos los movimientos. Otra ves muchas gracias!!!!
Título: Re: Problema Tarjeta SSC32 y pic18f4550
Publicado por: Ana129m en 11 de Junio de 2014, 16:31:49
Tengo otra pregunta para el que me pueda ayudar quiero utilizar las entradas analógicas de esta tarjeta y leyendo el manual me dice que le envíe la instrucción "VA\r". He probado su funcionamiento con el lynxterm y el hace la lectura perfecto de un sensor FSR-01 (sensor de presión) pero desde el micro no se si hacer esto:
int p;
putrsUSART("VA\r");
p=ReadUSART();

Porque en el lynxterm es solo presionar el icono VA y de una te llega el valor en decimal así como muestro en el adjunto
Ojala me puedan ayudar!!! bueno en realidad ayudar mas jajaja Gracias

Título: Re: Problema Tarjeta SSC32 y pic18f4550
Publicado por: jhozate en 12 de Junio de 2014, 13:27:34
usa otro terminal que permita enviar y ver que es lo que responde el dispositivo , así te das cuenta cuantos bytes debes leer y cuales de esos en realidad interesa