TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: komun_roji en 31 de Agosto de 2010, 08:00:44

Título: AYUDA CON EL C18 Y LA TRANSMISION POR RS 232!!!
Publicado por: komun_roji en 31 de Agosto de 2010, 08:00:44
Hola a todos!!!

Era para ver si me podrias hechar una mano, ando detras del proyecto final de carrera y me estoy intentando familiriazar con el pic y too su mundillo. Ando haciendo un programilla para que el pic me envie el abecedario completo al hyperterminal a la vez que mediante un juego de led q tiene la placa con la que estoy jugando, PICDEM HPC EXPLORER BOARD, me muestre su valor hexadecimal iluminando los correspondioentes led.

Todo creo q esta mas o menos bien hecho, me estado guiando por la marivilla de tutorial de Suky, y mas o menos e sacado algo, lo malo esq el ejemplo de ese tutorial es de recepcion de datos por el pic, no de envio.
Hice un programa por mi cuenta pero lo malo esq apedar de funcionar perfectamente los led, en el hyperterminal solo me apraecen Ç, 38 para ser exactos,cuando el abecedario tiene 25, enviandome primero una despues 4, o 3, otra vez 1....Ademas de que intetnto que cuando el rs232 este transmitiendo a traves de la funcion Busyusart,  se me enciendo un led exteriror a la placa y no se me enciende.

No se donde podre tener el fallo y llevo ya una semana detras de el...Os dejo el programa aqui y si alguien me pudiera echar una manita se lo agradeceria!!!

//*includes*//

#include <p18f8722.h>
#include <p18cxxx.h>
#include <usart.h>
#include <delays.h>

//*progrmación pic*//

#pragma config OSC = INTIO67, FCMEN = OFF,IESO = OFF    //osc interno de 8Mhz
#pragma config PWRT = ON,BOREN = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF

         
             
//*main*//

void main(void)

{

//* configuración de usart
  Open1USART( USART_TX_INT_OFF  &   //sin interrupciones de transmision

             USART_RX_INT_OFF  &   

             USART_ASYNCH_MODE &   //modo asincrono
   
             USART_EIGHT_BIT   &   //8bit

             USART_CONT_RX     &   //recepcion-envio continuo

             USART_BRGH_HIGH,51 ); // velocidad oscilador 8mhz, baud =9600//





//* intento de hacer funcionar los led, segun el valor hexadecimal de cada letra


   ADCON1=0x0F;   //**salidas/entradas digitales; 0 salidas /1 entrada
   TRISD = 0;
   TRISA = 0;
   TRISB = 1;

 

while(1){

   if (PORTBbits.RB0==1){      //Leds apagados.-
   PORTD=0;
}
    
   else {
   
   char a=0x61;

   char z=0x7A;

   for(PORTD=a;PORTD<=z;PORTD++){

   Write1USART( PORTD );

   
   Delay10KTCYx(15);            //retardo entre letra y letra
while (Busy1USART()==1){      //mientras usart transmita encender led aparte de la placa
    LATAbits.LATA1=1;
      }      
   
   }
Close1USART();

}
}   
}

Esperando alma caritativa q responda, gracias por adelantado!!
Título: Re: AYUDA CON EL C18 Y LA TRANSMISION POR RS 232!!!
Publicado por: Suky en 31 de Agosto de 2010, 11:05:03
Hola  komun_roji. Habrá muchas más almas caritativas si no rompes las reglas del foro. Todo el titulo en mayúscula, y con la palabra ayuda, hace que muchos se salteen el post.  :?

Así como está debería de enviar los caracteres correctamentes, salvo que esté mal configurado el oscilador interno y no esté trabajando a 8MHz. Revisa el datasheet, seguramente en el main hay que setearlo a 8 MHz.

Luego para trabajar correctamente con los registros PORT y LAT, y para que veas el led prendido deberías hacerlo de la siguiente forma:


Código: C
  1. for(LATD=a;PORTD<=z;LATD=++PORTD){
  2.                
  3.                                 Write1USART( PORTD );
  4.                                 while (Busy1USART()==1){      //mientras usart transmita encender led aparte de la placa
  5.                                         LATAbits.LATA1=1;
  6.                                 }      
  7.                    
  8.                         }


Saludos!
Título: Re: AYUDA CON EL C18 Y LA TRANSMISION POR RS 232!!!
Publicado por: komun_roji en 01 de Septiembre de 2010, 05:25:55

Muchas gracias por la respuesta suky!!

Ya ta solucionado, era la velocidad del micro, porque cambie el valor de la velocidad del hyperterminal y me funciono, se me ocurre eso despues de una semana... porq el valor de spbrg lo habia mirado en unas tablas y daba por supuesto q taba bien, pero por la pinta no era asi.

Si nos por ti entre esto y tu tutotial no se si habria hecho algo... gracias!!!