TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: conilete en 09 de Septiembre de 2010, 12:02:41

Título: Transmision USART C18
Publicado por: conilete 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
Título: Re: Transmision USART C18
Publicado por: Suky 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í (http://www.todopic.com.ar/foros/index.php?topic=31611.0)


Saludos!
Título: Re: Transmision USART C18
Publicado por: conilete 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
Título: Re: Transmision USART C18
Publicado por: Suky 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!
Título: Re: Transmision USART C18
Publicado por: conilete 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
Título: Re: Transmision USART C18
Publicado por: conilete 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
Título: Re: Transmision USART C18
Publicado por: sshak9 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 (http://www.microchip.com/forums/m134736-print.aspx)). 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