ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Problemas Tarjeta SSC32

Postea aqui los temas generales relacionados con la electronica

Moderator: Junta Directiva

Ana129m
Posts: 7
Joined: Sat May 31, 2014 8:24 pm
Nombre: Ana Maria Gil

Problemas Tarjeta SSC32

Post by Ana129m » Sat May 31, 2014 8:39 pm

SALUDOS....

Estoy desarrollando el control de un brazo robótico por medio de la tarjeta SSC32, la tarjeta la he podido probar 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();

}


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...

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: Problemas Tarjeta SSC32

Post by Ranganok » Mon Jun 02, 2014 10:12 am

No me he leido el código pero las comprobaciones que tienes que hacer son:
1.- Tensiones y corrientes de alimentación: ¿la alimentación está llegando a todos los puntos?
2.- Comprueba la velocidad de la USART con un osciloscopio o un analizador lógico.
3.- Comrpueba que lo que dices que envías es lo que realmente estás enviando (aquí es mejor un analizador lógico a un osciloscopio).
4.-¿Hay señales PWM generadas para los motores?.
...

Si todo va correcto, comenta el código y descomentalo paso a paso.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

Ana129m
Posts: 7
Joined: Sat May 31, 2014 8:24 pm
Nombre: Ana Maria Gil

Re: Problemas Tarjeta SSC32

Post by Ana129m » Mon Jun 02, 2014 6:46 pm

Bueno respecto a los puntos que mencionas:

1. La tensión y la corriente están bien ya que la tarjeta la he probado con bluetooth y los servos se mueven perfecto

2. La velocidad de la USART la probé con el hyperterminal de un pc para comprobar que si se comunicaran y efectivamente se sincronizan en 115200 lo único raro fue que si vi que llegara lo que envié pero también había como mucha interferencia y llegaban cosas adicionales que yo nunca enviaba pero como tal si visualice esto: #0p1500s200<cr>.
Lo que si me pareció raro es que a veces llegaba completo y a veces llegaba esto #0p1500s200<cr#0p1500s200<cr como que se va cortando no llega completo. y la tarjeta para que realice la operación tiene que enviarse con el caracter ASCCI 13 ó "<cr> al final, tambien puede ser que no este recibiendo bien ese caracter. Que podría hacer en ese caso?? ó será la librería??

3. Como te dije anteriormente lo visualice en el hyperterminal pero como tal lo que sale del micro, no se a que te refieres con un analizador lógico?

4. las señales del PWM son generadas por la tarjeta SSC32 cuando yo le envío el código #0P1500 significa que estoy seleccionando el canal cero donde esta el servo de la base conectado y que le estoy enviando un pulso de 1500 ese es el comando para generar el PWM pero como tal la que se lo traduce al servo es la tarjeta que contiene un atmel que lo realiza.

Lo que no se es como verificar lo que llega a la tarjeta, se lo que sale del micro pero no se como lo esta interpretando la tarjeta.

GRACIAS!!!

User avatar
Ave_Fenix
Usuario Avanzado
Usuario Avanzado
Posts: 205
Joined: Thu Jan 22, 2009 8:29 pm

Re: Problemas Tarjeta SSC32

Post by Ave_Fenix » Tue Jun 03, 2014 8:58 am

Efectivamente, has hecho las pruebas que debías, usar un PC. Vamos a obviar resto cosas.
Lo que te falla es lo siguiente:
tiene que enviarse con el caracter ASCCI 13 ó "<cr>
Que yo recuerde, y viendo el manual de nuevo en diagonal, eso NO es cierto :wink:
Tienes que enviar el carácter ascci 13, cr viene del inglés "carriage return" (retorno de carro), el cual es el carácter ascii 13, por eso te habrás liado.
Yo aún así, siempre enviaba el 13 y luego el 10, pero eso es más por manías propias y poderlo ver bien luego en pantalla.
Nos dices si eso soluciona tu problema :geek:

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: Problemas Tarjeta SSC32

Post by Ranganok » Tue Jun 03, 2014 11:10 am

Por eso mismo te decía que utilizaras un analizador lógico. Con esto puedes ver los bits que estás enviando y comparando lo que envia uno y otro ves si estás haciendo algo mal...

Substituye "<cr>" por "\n" y en los Write y nos comentas.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

Ana129m
Posts: 7
Joined: Sat May 31, 2014 8:24 pm
Nombre: Ana Maria Gil

Re: Problemas Tarjeta SSC32

Post by Ana129m » Wed Jun 11, 2014 9:24 pm

Muchas gracias por sus respuestas.
Si era ese el problema he cambiado el <cr> por "\r" y me ha funcionado perfecto, la idea es que el caracter CR en C se escribe de esa manera. Ya los servos se mueven de maravilla. Muchas gracias.

Ahora tengo otra duda: 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 :D
Attachments
Lynxterm Analogo.JPG

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: Problemas Tarjeta SSC32

Post by Ranganok » Fri Jun 13, 2014 6:57 am

Has probado con el hiperterminal?

Seguramente será como dices (con o sin el /r)

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

User avatar
Heli
Usuario Experto
Usuario Experto
Posts: 747
Joined: Tue May 23, 2006 7:47 am
Nombre: Heli Tejedor
Location: Alcala de Henares
Contact:

Re: Problemas Tarjeta SSC32

Post by Heli » Fri Jun 13, 2014 7:50 am

ReadUSART(); lee el byte del buffer de la USART y retorna inmediatamente o sea que no espera a que el byte se reciba sino que lee el último que hubiera.
Debes hacer:

Code: Select all

int p;
putrsUSART("VA\r");
while (!DataRdyUSART());  /* Espera a que se reciba algo*/
p = ReadUSART();


Pero tienes que incluir timeouts o algun procedimiento para que no se enchanche el programa si no hay recepción...
Cuidado con "int p", ReadUSART() devuelve un char.
¡No es imposible, lo que pasa es que no sabes como hacerlo!
http://heli.xbot.es/" onclick="window.open(this.href);return false;

Ana129m
Posts: 7
Joined: Sat May 31, 2014 8:24 pm
Nombre: Ana Maria Gil

Re: Problemas Tarjeta SSC32

Post by Ana129m » Wed Jul 30, 2014 10:35 pm

Bueno Heli tenias razón era sino darle un tiempo para que la USART recibiera la información, he realizado varias pruebas y el sensor solo me presenta un error de 0.01 en la medida entonces creo que no esta tan mal este es el codigo que emplee:

unsigned char data;
unsigned char string[4];

while(1)
{
putrsUSART("VA\r");
while(!DataRdyUSART()); //wait for data
data = ReadUSART(); //read data
itoa(data,string);
WriteCmdXLCD(CLEAR);
Delay10KTCYx(255);
putsXLCD(string); //write to LCD
Delay10KTCYx(255);

}

Lo único que me pareció extraño es que declarando data como unsigned int me entrega unos datos negativos y no tiene lógica con lo que debería de ser y es que a medida que aplico mas fuera al sensor el valor varia de 0 a 255 y si lo pongo con int sube y luego en cierto valor decrece y con valores negativos así que bueno la declare como unsigned char y funciono. el valor entregado lo multiplico por (5/256) y me da el valor de la tension en ese momento con la fuerza aplicada.
Muchas gracias por la ayuda y si ven algo extraño en el código aunque aparentemente funciona les agradezco me corrijan gracias.

Ana129m
Posts: 7
Joined: Sat May 31, 2014 8:24 pm
Nombre: Ana Maria Gil

Re: Problemas Tarjeta SSC32

Post by Ana129m » Wed Aug 06, 2014 5:12 pm

Hola como están.
Bueno por acá de nuevo con una duda que llevo varios días pensando y no se me ocurre nada que me haya servido, resulta que ya me funciono el sensor entonces quiero aplicarlo de alguna manera con el servo, lo que quiero es que cada ves que se ejecute mas fuerza sobre el sensor y el dato varíe a su ves el servomotor varíe de posición ya sea cerrándose si todavía no hay fuera suficiente o abriéndose si la fuerza ya ha llegado al limite.
En pocas palabras:
La trama que recibe la tarjeta es "#0p500s200\r" // quiero que el valor 500 sea una variable dependiente del dato del sensor. pero no logro crear una función con varios tipos de datos diferentes que envíen con la función de la USART putsUSART(); una trama completa.
Intente enviando así:

char var="1500"; // le he puesto el valor para probarlo pero la idea es que es un valor variable.
putrsUSART("#0p");
putsUSART(var);
putrsUSART("s200\r"); Como que la tarjeta no acepta esta trama.

Espero que me puedan ayudar, ahhh adicionalmente vi en el manual de la ssc32 esa función para el Atom
serout p0,i38400,["#0P",DECservo0pw,"T",DECmovetime,13];
HAY UNA FORMA DE HACER ESTO MISMO EN EL C18??

GRACIAS...

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest