Autor Tema: (SOLUCIONADO)Problema en recepcion RS232 y Display 128x64  (Leído 1221 veces)

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

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
(SOLUCIONADO)Problema en recepcion RS232 y Display 128x64
« en: 04 de Diciembre de 2014, 22:17:35 »
Hola a todos, de nuevo por aquí. Estoy tratando de recibir un carácter por RS232, pero no puedo leerlo. El programa entra a la función de interrupción de RDA, carga el valor del buffer en la variable "Estado" siempre con el valor 0xFF. Debuggueando observo que en el Buffer del puerto, se carga siempre el valor 0xFF, no encuentro la rozan de porque. Estoy usando un 18F4620 y el registro del buffer es RCREG segun su hoja de datos. Supongo que es alguna configuración que estoy pasando por alto, ya que revise el hardware y en la pata RC7 llegan los datos bien, los constate con el osciloscopio. Tienen alguna opinión al respecto? A continuación dejo el programa que uso, "muy simple". Espero puedan ayudarme....Gracias!

Código: [Seleccionar]
#include <18f4620.h>                     //PIC A UTILIZAR                              
#Fuses XT, NOWDT         //Configuramos los fuses
#Use Fast_Io(B)                                                 //Optimizamos E/S del PORTB
#Use Fast_Io(A)    
                                         //Optimizamos E/S del PORTA
#use delay(clock=10000000)               //A 10MHZ
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,parity=N,bits=8)
#byte portb = 0x06

#include <glcd.c>
#include <string.h>
#include <stdio.h>

#USE FAST_IO (D)
#USE FAST_IO (c)
#USE FAST_IO (b) //INCLUIMOS GLCD.C DE PICC
              
char Estado=0;
char Est=0;



main() {

//-----------------------configuramos la interrupciones------------------------------------------
disable_interrupts(global);                               //desactivo todas las interrupciones

//-----------------------ACTIVO INTERRUPCION DE RS232-------------------------------------------
enable_interrupts(int_rda);


set_tris_a( 0x00 );
set_tris_d( 0x00 );
set_tris_c( 0x80 );
set_tris_b( 0x00 );
  
//---------------------------//activo las interrupciones---------------------------------------

enable_interrupts(global);

while(1)
{

}

}

#int_rda
void serial_isr()
{
if(kbhit()){
Estado=getchar();           //almaceno dato serial(rs232) en Estado
  }
}

 
Saludos-
« Última modificación: 05 de Diciembre de 2014, 00:16:07 por Ranculche »

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
Re: Problema en recepcion RS232
« Respuesta #1 en: 04 de Diciembre de 2014, 23:48:18 »
Hola a todos!! Pude solucionar el problema con la recepcion, cambie el fuse XT por HS, pero tengo un problema mas ahora, al cambiar ese fuse, me empieza a funcionar mal un display que me funcionaba bien con el fuse XT. El display que uso es un winstar 128x64, y para eso uso la libreria glcd.h. Ya no se mas que hacer, cuando soluciono algo, aparece otro error. Agradezceria si me ayuduran. dejo el programa.

Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////////
////                                                       ////
////                                                                 ////
////     ////
////                                                                 ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////       ////
/////////////////////////////////////////////////////////////////////////

#include <18f4620.h>                     //PIC A UTILIZAR                              
#Fuses HS, NOWDT         //Configuramos los fuses
#Use Fast_Io(B)                                                 //Optimizamos E/S del PORTB
#Use Fast_Io(A)    
                                         //Optimizamos E/S del PORTA
#use delay(clock=10000000)               //A 10MHZ
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,parity=N,bits=8)
#byte portb = 0x06

#include <glcd.c>
#include <string.h>
#include <stdio.h>

#USE FAST_IO (D)
#USE FAST_IO (c)
#USE FAST_IO (b) //INCLUIMOS GLCD.C DE PICC
              
char Estado=0;
char Est=0;
char Modulos[16]={'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N''N'};
char Address=0;



main() {

//-----------------------configuramos la interrupciones------------------------------------------
disable_interrupts(global);                               //desactivo todas las interrupciones

//-----------------------ACTIVO INTERRUPCION DE RS232-------------------------------------------
enable_interrupts(int_rda);


set_tris_a( 0x00 );
set_tris_d( 0x00 );
set_tris_c( 0x80 );
set_tris_b( 0x00 );
  
//---------------------------//activo las interrupciones---------------------------------------

enable_interrupts(global);

char  texto[] = " Proyecto final "; // Palabras QUE SE
char  texto2[] = " hola ";              // van a mostrar
int x=0,y=0;

glcd_init(ON);   // iniciamos la lcd                              
glcd_fillScreen(OFF); //LIMPIAMOS LA PANTALLA


while(1)
{
delay_ms(10);
//glcd_circle(44,28,10, yes, ON);     //muestra un circulo
//glcd_pixel(100,30,OFF);           //pinta un punto en la lcd
//glcd_bar(30,20,50,40,2,ON);       //pinta una linea variando su grosor
delay_ms(10);
glcd_rect(0,20,30,30,NO,ON);        //pinta un rectangulo
delay_ms(10);
glcd_text57(0,5,texto,1, ON);       //muestra TEXTO
delay_ms(10);
glcd_text57(0,40,texto2,2, ON);     //muestra TEXTO
delay_ms(10);
//glcd_circle(68,28,8, yes, ON);      //muestra un circulo
delay_ms(10);
glcd_circle(88,28,6, yes, ON);      //muestra un circulo
delay_ms(10);
glcd_circle(104,28,4, yes, ON);     //muestra un circulo
glcd_circle(116,28,2, yes, ON);     //muestra un circulo
delay_ms(10);
glcd_line(0,20,30,30,ON);
delay_ms(10);
glcd_line(0,30,30,20,ON);

  


}

}

#int_rda
void serial_isr()
{
if(kbhit())
{
Estado=getchar();           //almaceno dato serial(rs232) en digito
Address=Estado & 0b00001111;
Est= (Estado & 0b10000000);
if(Est == 0b10000000)
{
Est='A';

}
if(Est == 0b00000000)
{
Est='D';

}
Modulos[Address]=Est;
  }
}

Saludos.-

Desconectado Ranculche

  • PIC12
  • **
  • Mensajes: 74
Re: Problema en recepcion RS232
« Respuesta #2 en: 05 de Diciembre de 2014, 00:14:43 »
Hola!! Como un loco me voy a contestar. Pude solucionar el Problema del display, para que funcione con el fuse HS. Entre al archivo glcd.h y modifique las funciones delay_us(2) y las cambie por delay_us(4). Me imagine que era un problemas de tiempos, porque lo que quería mostrar en el display estaba desformado.

Saludos.-


 

anything