Autor Tema: Problema hyperterminal y mi pic  (Leído 1565 veces)

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

Desconectado Clemen89

  • PIC10
  • *
  • Mensajes: 30
Problema hyperterminal y mi pic
« en: 28 de Mayo de 2012, 16:48:29 »
Hola

Estoy con el proyecto de final de carrera y tengo que usar el PIC16F877, solamente tiene una UART y yo necesito dos, asi que he tenido que implementar una por software.

Hoy la he estado probando con el hyperterminal, enviar si que envía, porque antes de este codigo probe un programa aunque el hyperterminal no me mostraba exactamente lo que le envio ( yo le envio 10101010 y el hyperterminal recibía 101010, supongo que sera por la velocidad o algo relacionado ), pero el problema ha llegado cuando he hecho este codigo, no se si estara bien implementada la UART, a ver si me podeis echar una mano porque ya no se si es problema del hyperterminal o del programa.

Para enviar una 'A' por el hyperterminal simplemente es Shift+A y luego ENTER ¿no?, se que parece trivial pero quiero descartar las tonterias que te puedes tirar mucho tiempo mirando que es lo que falla...

Debajo del codigo dejo un poco la explicacion del codigo.

El codigo es este ( compilador Hi tech ):

Código: [Seleccionar]
#include "htc.h"
#include "stdio.h"
#define _XTAL_FREQ 10000000

__CONFIG(0x3F72);

int i=0;
char recibido=0;
char auxiliar=0;

void interrupt isr(void){
if(INTF==1){
INTF=0;
INTE=0;
__delay_us(100);
for(i=0;i<8;i++){
if(RB0)recibido|= 0x80;
recibido>>1;
__delay_us(100);
}
if(recibido=='A'){
auxiliar='O';
RB1=0;
__delay_us(100);
for(i=0;i<8;i++){
if(auxiliar&0x01){
RB1=1;
}else{
RB1=0;
}
auxiliar>>1;
__delay_us(100);
}
RB1=1;
}else{
auxiliar='P';
RB1=0;
__delay_us(100);
for(i=0;i<8;i++){
if(auxiliar&0x01){
RB1=1;
}else{
RB1=0;
}
auxiliar>>1;
__delay_us(100);
}
RB1=1;
}
}
INTE=1;
}



void main()
{
GIE=1;
PEIE=1;
INTF=0;
INTEDG=0;
INTE=1;
RB1=1;
TRISB=0b11111101;
TRISC=0b10111111;
BRGH=1;
TXEN=1;
SPBRG=64;
RP0=0;
SPEN=1;
CREN=1;
while(1);
}

Vale, pues he cogido la interrupcion en el pin RB0 para cada flanco de bajada, para que de esta manera simule a la UART, cuando le llegue el '0' de START empiezo a recoger el caracter. También tengo cosas activadas de la otra UART pero de momento la dejaremos de lado me interesa que funcione la UART por software por probar la comunicacion simplemente.

Bueno, RB0 como he dicho es mi "RX" y RB1 mi "TX". Estoy usando la velocidad típica, 9600 baudios, serían 104 us de retardo entre bit y bit pero como he escuchado que no es bueno acercarse tanto al valor por eso he puesto 100us.

El programa es sencillo, si lo que he recibido es una 'A' devuelvo 'O' y sino he recibido una 'A' pues envío una 'P'. Donde mas dudas tengo es en los operadores de bits, a ver si algun experimentado en este tipo de operadores me echa un cable confirmandome que esta bien o que esta mal jeje. Y lo de como enviar por el hyperterminal... que puede parecer una tonteria pero a veces los fallos mas tontos son los mas puñeteros, para enviar la 'A' simplemente he puesto en el hyperterminal A y he pulsado enter. No me ha devuelto nada al hyperterminal.

He tenido en cuenta que primero se envia/recibe el bit menos significativo.

A ver si me podeis echar un cable una vez mas ya que estoy algo agobiado con el proyecto.

Un saludo y muchas gracias de antemano

EDITO: Me acabo de dar cuenta que las rotaciones solamente pongo "recibido>>1;", ¿con eso basta o hace falta poner "recibido=recibido>>1;"? Mañana lo probare a ver hoy ya no me da tiempo...
« Última modificación: 28 de Mayo de 2012, 17:02:20 por Clemen89 »

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Problema hyperterminal y mi pic
« Respuesta #1 en: 08 de Junio de 2012, 11:19:02 »
Hola Clemen89, mucha ayuda no te puedo ya que recién me pase al C18, yo programaba en ASM, para el cristal siempre uso uno de 18.432.000Hz, me da los tiempos exactos de cualquier frecuencia de transmición, y para la comunicación uso el Docklight, lo podes configurar fácilmente, podes grabar comandos para enviar o recibir, también podes configurarlo para que el PC sea como un puente entre tu PIC y cualquier otro dispositivo así poder ver exactamente lo que dice uno y responde el otro.
No se si podes cambiar a esto en tu proyecto pero espero que te ayude en algo.
Saludos

Desconectado Clemen89

  • PIC10
  • *
  • Mensajes: 30
Re: Problema hyperterminal y mi pic
« Respuesta #2 en: 08 de Junio de 2012, 12:52:05 »
Hola Clemen89, mucha ayuda no te puedo ya que recién me pase al C18, yo programaba en ASM, para el cristal siempre uso uno de 18.432.000Hz, me da los tiempos exactos de cualquier frecuencia de transmición, y para la comunicación uso el Docklight, lo podes configurar fácilmente, podes grabar comandos para enviar o recibir, también podes configurarlo para que el PC sea como un puente entre tu PIC y cualquier otro dispositivo así poder ver exactamente lo que dice uno y responde el otro.
No se si podes cambiar a esto en tu proyecto pero espero que te ayude en algo.
Saludos

Muchas gracias!!

Ya he descubierto el error, lo que pasaba era que el tiempo entre bits no estaba siendo el correcto, porque los delay son bastante precisos pero claro una sentencia como un while o un for también genera su retardo, y al ser tiempos tan pequeñajos en seguida se te fastidia todo jeje.

Aun así muchas gracias por tu interés!

Por si le sirve de ayuda a alguien que le este pasando algo parecido, yo lo hice con el simulador de MPLAB, calculando el tiempo que habia entre las instrucciones que me interesaban.

Un saludo!


 

anything