Autor Tema: Transmision USART C18  (Leído 5551 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado conilete

  • PIC10
  • *
  • Mensajes: 29
Transmision USART C18
« en: 09 de Septiembre de 2010, 12:02:41 »
Hola a todos,
Estoy empezando con la programacion de PIC's con el compilador C18.

Estoy intentando comunicar datos a traves de puerto serie, he hecho un pequeño programa muy sencillo, que unicamente inicializa el modulo USART y manda al puerto serie un string, pero no consigo visualizar nada.
Este es el codigo:

Código: [Seleccionar]
#include <p18f2680.h>
#include <delays.h>
#include <stdlib.h>

#include <usart.h>

                void main(void){

        OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT
          & USART_SYNC_SLAVE & USART_CONT_RX & USART_BRGH_HIGH, 25);
                         putrsUSART((const far rom char *)"hola");
}



La cuestion es que no me aparece nada en el hyperterminal!!

Agradeceria mucho vuestros comentarios y sugerencias.
Un saludo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Transmision USART C18
« Respuesta #1 en: 09 de Septiembre de 2010, 12:08:33 »
Ese cast que has realizado no lo implemento nunca y funciona. La función ya sabe que son datos almacenados en la rom, así que no es necesario.

Revisa por aquí


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado conilete

  • PIC10
  • *
  • Mensajes: 29
Re: Transmision USART C18
« Respuesta #2 en: 09 de Septiembre de 2010, 12:25:42 »
Gracias suky, pero ese manual ya lo tengo, y de el me base para hacer este programa.

En el codigo que he puesto aqui, aparece el casting que mencionas, pero he probado tambien sin el, ademas de las otras funciones para enviar datos que existen.

Entonces, ¿te parece que el codigo esta correcto?

Un saludo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Transmision USART C18
« Respuesta #3 en: 09 de Septiembre de 2010, 17:32:40 »
Sip! Puedes intentar configurar la UART mediante el datasheet y cargando los valores en los registros.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado conilete

  • PIC10
  • *
  • Mensajes: 29
Re: Transmision USART C18
« Respuesta #4 en: 10 de Septiembre de 2010, 05:58:24 »
He configurado la UART de otra forma, el programa compila sin problemas, pero sigue sin aparecer nada en el hyperterminal.

Este es el codigo

Código: [Seleccionar]
#define USE_OR_MASKS
#include <p18f2680.h>
#include "usart.h"

unsigned char Rxdata[25];
unsigned char Txdata[] = "HOLA";

void main(void)
{
    unsigned char config=0,spbrg=0,baudconfig=0,i=0;

    CloseUSART();
   
    config = USART_TX_INT_OFF | USART_RX_INT_ON | USART_ASYNCH_MODE | USART_EIGHT_BIT | USART_CONT_RX | USART_BRGH_HIGH;
    spbrg = 25;                   
    OpenUSART(config, spbrg);       
    baudconfig =  BAUD_8_BIT_RATE | BAUD_AUTO_OFF;
    baudUSART (baudconfig);

 
//------USART Transmission ----
    while(BusyUSART());             
    putsUSART((char *)Txdata);       
     
//---USART Reception ---
    getsUSART((char *)Rxdata,24);             

    while(BusyUSART());             
    putsUSART((char *)Rxdata);             

    CloseUSART();
    while(1);                       

}


El pic tiene una frecuencia de 40 MHz, ¿puede que este mal configurada en el programa?

Un saludo, y muchas gracias por responder

Desconectado conilete

  • PIC10
  • *
  • Mensajes: 29
Re: Transmision USART C18
« Respuesta #5 en: 10 de Septiembre de 2010, 06:11:33 »
Bueno, despues de muchas pruebas y cambios de configuracion, con este codigo consigo que se transmita algo y se visualice en el puerto serie. Pero el problema, es que siempre se manda una X, lo que no entiendo, puesto que estoy mandando la cadena "HOLA".

¿Alguna sugerencia de por que pasa esto?



Código: [Seleccionar]
#define USE_OR_MASKS
#include <p18f2680.h>
#include "usart.h"

unsigned char Rxdata[25];




void main(void)
{
    unsigned char config=0,spbrg=0;
    CloseUSART();  //turn off usart if was previously on

    config = USART_TX_INT_OFF | USART_RX_INT_ON | USART_ASYNCH_MODE | USART_EIGHT_BIT | USART_CONT_RX | USART_BRGH_HIGH;
    spbrg = 25;                  

    OpenUSART(config, spbrg);        
    
    while(1) {
          putsUSART((char *)"HOLA");          
     }
}


Graciasssss
« Última modificación: 10 de Septiembre de 2010, 06:15:31 por conilete »

Desconectado sshak9

  • PIC10
  • *
  • Mensajes: 4
Re: Transmision USART C18
« Respuesta #6 en: 21 de Octubre de 2010, 03:37:58 »
Saludos, recién he empezado hace un mes a trabajar con el compilador C18 y me ha dado mas de un dolor de cabeza aunque admito que en el camino he aprendido bastante. Una de las cosas que he visto es que por ejemplo al usar ptrsUSART, tienes que especificar el tipo de dato, porque por defecto el compilador usa el tipo de memoria reducido (small) usando la variable como near, y por ello tienes que especificarle el far en tu código, pero esto puedes cambiarlo modificando la librería (Microchip Suggestions). Otra cosa que es muy probable que este fallando, es que los baudios con los que trabajas es para un oscilador de 4MHZ, recuerda que la formula es con FOSC, puede que por ello no estés leyendo el dato enviado, ya que he visto que muchas veces se confunde y se toma la frecuencia de trabajo es decir el FOSC modificado por los PLL's, yo lo he trabajado con un cristal de 20 MHZ.
Yo he hecho exactamente lo mismo que tú y me ha corrido sin problemas con las consideraciones que te indico. Espero haberte podido ayudar y me respondas si t sirvió aunque a estas alturas creo que ya debes haber solucionado tu problema.
Código: [Seleccionar]
#include <p18f4550.h>
#include <delays.h>
#include <usart.h>
#include <config.h>
#include <stdlib.h>

void main (){
OpenUSART(USART_TX_INT_OFF&USART_RX_INT_OFF&USART_ASYNCH_MODE&USART_EIGHT_BIT&USART_BRGH_HIGH,129);
putrsUSART(" Prueba USART");
while(1);
}

Adjunto la imagen del resultado en proteus




 

anything