ayuda por favor!!! con modulo usart

Ir abajo

ayuda por favor!!! con modulo usart

Mensaje por Pincho_86 el Vie 14 Ene 2011 - 14:55

hola a todos estoy tratando de transmitir algo y noc cual es el problema, me compila bien pero cuando lo pruebo con el proteus me trnsmite todo cero, de esta manera: 00 00 00 00 esto es lo que muestra la terminal virtual del proteus. estoy usando la libreria de USART (proporcionada por arcachofo), la cual consegui de aca:
http://pic-linux.forosactivos.net/t36-sdcc-driver-para-usart-pic16?highlight=USART

el codigo que tengo es el siguiente:

#include
#define Br 9600
#define Tx TRISC6
#define Rx TRISC7
#define FREQ 4000
#include

/* ----------------------------------------------------------------------- */
/* Configuration bits: adapt to your setup and needs */
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;

void delay_ms(long ms)
{
long i;
while (ms--)
for (i=0; i < 300; i++);
}
void main()
{ /* << insert code >> */
int i=0;
char nombre[10];
init_serie();
nombre[0]='m';
nombre[1]='a';
nombre[2]='r';
nombre[3]='t';
nombre[4]='i';
nombre[5]='n';
nombre[6]='\0';
while(1)
{
for(i=0;i<5;i++);
{
putchar(nombre[i]);
delay_ms(300);
}
}
}


Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por Risanti el Jue 20 Ene 2011 - 3:25

Hola Pincho..

He estado revisando tu codigo y lo hice funcionar pero con un pic16f876 , es basicamente lo mismo a lo que quieres tu.

Encontre dos problemas el primero es en la libreria (aunque deberia funcionar en teoria, quiza sea un problema de sdcc.)


Revisa la libreria USART.h y ve a esta seccion .
Código:

#define x      (FREQ * 1000 / Br - 16) / 16    // calculo para SPBRG
y cambia por esto,
Código:

#define x    25    //    valor para 9600 para SPBRG
No se porque el compilador no realiza el calculo correctamente , pero si lo ingresas directo se soluciona. jajajaj


El otro problema es con tu codigo en la seccion

Código:

for(i=0;i<5;i++);
Tienes que eliminar le ultimo ; ya que el ciclo for no realiza lo que esta abajo del codigo y solo saldra del loop cuando termine con i=5.

dejalo asi

Código:

for(i=0;i<5;i++)
{
putchar(nombre[i]);   
delay_ms(300);
}   


Ademas si quieres manejar cadenas te recomiendo que uses la funcion print
Ejemplo

Código:

print("Martin");


Espero que te sirva y nos cuentes tus experiencias, SDCC es un compilador bastante bueno aunque aun esta en desarollo, yo por lo menos me he divertido bastante, aunque aveces da algunos problemas, te recomiendo bajar la ultima version desde la pagina de sdcc.

Saludos
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

GRACIAS RISANTI!!!!!!

Mensaje por Pincho_86 el Jue 20 Ene 2011 - 14:43

Gracias risanti sos muy gorso!!! hice lo que me dijiste y me funciono perfecto, lo unico que no entiendo es porque cuando lo hago en el proteus en la terminal lo unico que se ve es 00 00 00 y asi sucesivamente, pero si voy enviando la cadena a un display si me muestra los valores.
tambien aprobecho para preguntarte algo. el SDCC no acepta funciones de para menejar cadenas??? como por ejemplo "strcpy". muchas gracias por tu disposicion para responder y ayudar. saludos

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por maigke el Vie 21 Ene 2011 - 5:15

Hola bienvenido!,
Ya ando metiendo mi cuchara Smile, con respecto a tu pregunta SDCC si maneja la libreria string.h

Checate un "porting" que hice de la página de RedPic, para controlar servos con un pic18F2550; solo que debes tomar en cuenta que, el usar strcpy genera mucho código.

Te dejo el link y espero te sirva
Manejo de servo por puerto serial

Esta es la parte donde hago uso de strcpy, strncpy y atoi rabbit
Código:

flagcommand=false;
  //Recibe el nombre del servo a mover
  strcpy(cmd,cbuff);
  strncpy(servo,cmd,1);
  //guarda la posicion del servo
  strcpy(cmd,cbuff);
  for(i=1;i<4;i++){
      pos[i-1]= cmd[i];
  }
  posicion = atoi(pos);
  //guarda la velocidad a la que se moverá el servo
  strcpy(cmd,cbuff);
  for(i=4;i<7;i++)
  {
      velocidad[i-4]=cmd[i];
  }
  vel = atoi(velocidad);
  tempo = 0;
  tempoh=0;
  tempol=0;
  switch(servo[0]){
      case 'a':
        posI=SelectServo(0);
        break;
      case 'b':
        posI=SelectServo(1);
        break;
      case 'c':
        posI=SelectServo(2);
        break;
      case 'd':
        posI=SelectServo(3);
        break;
      case 'e':
        posI=SelectServo(4);
        break;
      case 'f':
        posI=SelectServo(5);
        break;
      default:
        Print_str("3"); //Error 3 opcion elegida no válida
        Printf(INTRO);
        break;
  }
Smile
avatar
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 41
Localización : Mexico

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por Risanti el Sáb 22 Ene 2011 - 12:06

Hola.

maigke, yo no lo he probado pero mi consulta es si la libreria string.h es solo para pic18f??? en el caso de trabajar con un pic16f, quiza se pueda usar lo que publico felixls en el foro de ucontrol (ver utilities)


Librerias SDCC


Ademas si quieres revisa wikipedia, explica como usar esta funcion y los mas interesante que muestra posibles formas de realizar la funcion strcpy strcpy



Código:
char *strcpy(char *dest, const char *src)
{
  unsigned i;
  for (i=0; src[i] != '\0'; ++i)
    dest[i] = src[i];
  dest[i] = '\0';
  return dest;
}

Código:


char *strcpy(char *dest, const char *src)
{
  char *save = dest;
  while(*dest++ = *src++);
  return save;
}

Quiza sea posibles adaptarlas y probarlas en sdcc

Saludos
Risanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por maigke el Dom 23 Ene 2011 - 5:24

Saludos Risanti, yo la verdad no he usado string.h en pic16, aunque no se hasta que punto sea conveniente, ya que esta librería usa mucho espacio.

Los links de la wikipedia que pones son muy interesantes, enhorabuena! Very Happy
avatar
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 41
Localización : Mexico

Volver arriba Ir abajo

Muchas gracias!!!

Mensaje por Pincho_86 el Dom 23 Ene 2011 - 16:30

gracias por sus aprotes muchachos!! ya me voy a poner a investigar un poco mas sobre esto

Pincho_86
Participante
Participante

Mensajes : 12
Fecha de inscripción : 08/01/2011

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por fredska4 el Lun 22 Ago 2011 - 1:31

Pincho_86 escribió:hola a todos estoy tratando de transmitir algo y noc cual es el problema, me compila bien pero cuando lo pruebo con el proteus me trnsmite todo cero, de esta manera: 00 00 00 00 esto es lo que muestra la terminal virtual del proteus. estoy usando la libreria de USART (proporcionada por arcachofo), la cual consegui de aca:
http://pic-linux.forosactivos.net/t36-sdcc-driver-para-usart-pic16?highlight=USART

el codigo que tengo es el siguiente:

#include
#define Br 9600
#define Tx TRISC6
#define Rx TRISC7
#define FREQ 4000
#include

/* ----------------------------------------------------------------------- */
/* Configuration bits: adapt to your setup and needs */
typedef unsigned int word;
word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;

void delay_ms(long ms)
{
long i;
while (ms--)
for (i=0; i < 300; i++);
}
void main()
{ /* << insert code >> */
int i=0;
char nombre[10];
init_serie();
nombre[0]='m';
nombre[1]='a';
nombre[2]='r';
nombre[3]='t';
nombre[4]='i';
nombre[5]='n';
nombre[6]='\0';
while(1)
{
for(i=0;i<5;i++);
{
putchar(nombre[i]);
delay_ms(300);
}
}
}


hola, yo soy nuevo en esto y me preguntaba si me podrian facilitar la libreria USART y algun software que me permita hacer la conexion, asi como los comandos de la misma Very Happy
otra cosa, me pueden pasar algun tutorial para instalar proteus ? gracias!!
PD. normalmente uso el pic 16f887

fredska4
Nuevo Usuario
Nuevo Usuario

Mensajes : 2
Fecha de inscripción : 30/07/2011

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por maigke el Lun 22 Ago 2011 - 2:59

saludos compañero

revisa este link que postee hace un rato, en ella encontraras el manejo de una libreria para USART de un PIC18f, asì como el uso de strings en SDCC.

http://pic-linux.forosactivos.net/t317-control-de-8-servos-de-rc-por-puerto-serie-original-de-redpic-traducido-a-sdcc

avatar
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 41
Localización : Mexico

Volver arriba Ir abajo

Re: ayuda por favor!!! con modulo usart

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.