Autor Tema: Hyperterminal  (Leído 7015 veces)

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

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Hyperterminal
« en: 28 de Junio de 2011, 10:34:08 »
Bien, desde el pc puedo controlar el pic, ya que así lo hago, para controlar unos anchos de pulso, luego el max232 lo tengo bien conectado.

El problema es cuando trato de leer desde hiperterminal lo que me envía el pic.

En el pic le digo que envie primero una "H", luego "o", luego "l", luego "a" y no recibo nada en el hiperterminal, habiendo conectado todo bien en el max232.

El problema es que cuando lo simulo en proteus con el terminal virtual si lo hace perfecto.

Alguien sabe donde esta el problema del hiperterminal, o como configurarlo?

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Hyperterminal
« Respuesta #1 en: 28 de Junio de 2011, 11:34:28 »
Ummm, la verdad es que es muy raro, ya que lo normal es que sea al contrario, quiero decir, que recibas pero no transmitas.

El hiperterminal es un poco sensible al envio, hasta que no esta todo coreecto no te deja, pero para la recepción no. El hiperterminal, si estas utilizando el que tiene windows, no hay que configurar nada, únicamente la velocidad.

Te diria que tienes mal configurada la velocidad, pero no creo que sea eso, ya que dices que si que puedes enviar bien, así que descartado.

Una prueba sencilla es unir TX y RX de tu max232 para ver si lo que envias lo recibes (un eco), es una manera sencilla de comprobar si lo tienes bien montado y funcionando.

En el caso de que la prueba anterior sea satisfactoria, podrías poner como has configuardo el pic, quiero decir un trozo de código, para mirar el lenguaje y si te has podido olvidar de algo???.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Hyperterminal
« Respuesta #2 en: 01 de Julio de 2011, 12:18:16 »
Hola Muchachos, estoy teniendo el mismo problema. Previamente hice la prueba de conectar los pines del max 232 (los que van al pic) y puedo ver el eco en el HyperTerminal por lo que desde el max232 hasta la pc esta todo correcto (max bien conectado)
Estoy usando un pic 18f4550, he comprobado infinidad de veces y ambos estan 9600 baudios 8N1 y el condenado pic sigue sin responderme. Lo peor de todo es que en proteus con el virtual terminal funciona correctamente. Ademas por curiosidad lo probe con un pic 16f88 en la implementacion practica y tambien funciona.
Hay algun secreto sobre los 18Fxxxx que se me pueda estar escapando??? cualquier sugerencia sera muy bien recibida. adjunto los archivos para q puedan verlos.
Gracias
Saludos

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hyperterminal
« Respuesta #3 en: 01 de Julio de 2011, 14:23:39 »
 yo he trabajado con el 4550 enviando y recibiendo datos y trabaja perfectamente, no se que pueda ser.podrias poner tu programa para verlo,
"Nada es imposible, no si puedes imaginarlo"

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Hyperterminal
« Respuesta #4 en: 01 de Julio de 2011, 16:29:34 »
Hola Muchachos, estoy teniendo el mismo problema. Previamente hice la prueba de conectar los pines del max 232 (los que van al pic) y puedo ver el eco en el HyperTerminal por lo que desde el max232 hasta la pc esta todo correcto (max bien conectado)
Estoy usando un pic 18f4550, he comprobado infinidad de veces y ambos estan 9600 baudios 8N1 y el condenado pic sigue sin responderme. Lo peor de todo es que en proteus con el virtual terminal funciona correctamente. Ademas por curiosidad lo probe con un pic 16f88 en la implementacion practica y tambien funciona.
Hay algun secreto sobre los 18Fxxxx que se me pueda estar escapando??? cualquier sugerencia sera muy bien recibida. adjunto los archivos para q puedan verlos.
Gracias
Saludos

OK, te paso parte de código en hitech que estoy utilizando y por ahora funciona:
Código: [Seleccionar]
#define _XTAL_FREQ 4000000
#define DS3232_PWR LATA6
#define RS232_BAUD 9600
#define DIVIDER ((int)(_XTAL_FREQ/(16UL * RS232_BAUD) -1))

#include <htc.h>
#include <stdio.h>

void putch(unsigned char);

void putch(unsigned char c){
    while(!TRMT)    // TRMT1 vacio cuando TSR esta libre
        continue;
    TXREG = c;     
}

void main(void){
//Puerto serie
SPBRG = DIVIDER;
RCSTA = 0x90;
TXSTA = 0x24;
 while(1){
        printf("Hola, esto es una prueba para ivanbv4\r\n");
 }
}

Soló que lo corro en un 18F26J50, tedrías que mirar para el 4550, pero supongo que será parecido, también puedes comprobar si lo tienes bien a la uart 1...

Lo malo que el proteus da mucha cosas por hecho, si no configuras cristal tb va, si no pones las alimentaciones bien...

Espero que te sirve, Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Hyperterminal
« Respuesta #5 en: 02 de Julio de 2011, 01:28:57 »
rivale he subido el codigo en el txt adjunto, garcias por responder.  DaYeS muchas gracias por tu aporte, mañana voy a tratar de verificar todo...y si, es el gran problema de proteus. pero cristal, frecuencia, alimentaciones, master clear a 5V..creo tener todo controlado. Seguire intentando y les cuento. Se agradecerá cualquier otro aporte.
Saludos muchachos

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hyperterminal
« Respuesta #6 en: 02 de Julio de 2011, 12:37:50 »
Código: [Seleccionar]

#include <18f4550.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=20000000)
#use rs232(uart1, baud=9600, xmit=PIN_D2, rcv=PIN_D3, BITS=8, stop=1, PARITY=N,ENABLE=PIN_D1 ) //uart1, tiene q   ir por lo menos para q funciones el virtual terminal


int8 buffer1;

void main()
 {
 
 while( TRUE )
   {
    putc('P');
    delay_ms(500);
    buffer1=getc();
    putc(buffer1);
       
   }
   
 }

porque no haces la lectura por interrupcion, ya que asi como tienes tu codigo siempre trata de leer algo del puerto rs232, pero no creo que siempre tengas algun dato en tu buffer. tal vez eso te cause problemas
"Nada es imposible, no si puedes imaginarlo"

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Hyperterminal
« Respuesta #7 en: 02 de Julio de 2011, 12:47:39 »
Gracias por el aporte. Haré esta prueba que me decis hoy mismo por las dudas. He implementado el mismo programa pero para un 16F88 y no he tenido inconvenientes, pero puede que haya conflicto como decis.
Sobre algun minimo avance que logre es dejando en el codigo solo la parte de esperar un caracter y luego enviarlo (como espejo) y usando el Virtual Terminal y por lo menos me parecen cruces (xxxxx) una por cada tecla que presiono. Me esta volviendo loco esto jajaja

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Hyperterminal
« Respuesta #8 en: 02 de Julio de 2011, 17:41:08 »
Gracias por el aporte. Haré esta prueba que me decis hoy mismo por las dudas. He implementado el mismo programa pero para un 16F88 y no he tenido inconvenientes, pero puede que haya conflicto como decis.
Sobre algun minimo avance que logre es dejando en el codigo solo la parte de esperar un caracter y luego enviarlo (como espejo) y usando el Virtual Terminal y por lo menos me parecen cruces (xxxxx) una por cada tecla que presiono. Me esta volviendo loco esto jajaja

Aquí tienes un proxy (espejo) del uart mediante interrupción:
Código: [Seleccionar]
void interrupt isr(void) {
    //Lo que llegue por UART se manda por UART
    if (RC1IF && RC1IE)                                         //miramos si esta habilitado y a saltado interrupción
    {
        if (RCSTA&0x02 || RCSTA&0x04){                //por si ha fallado el puerto serie lo reiniciamos
            RCSTA &= 0xEF;
            RCSTA |= 0x10;
        }
        else                                                            //sino a fallado sacamos lo que entra
            putch(RCREG);

        RC1IF=0;
    }
}    

Es de uno que tiene 2 uarth, pero será muy parecido.

Lo que es raro es lo de las x?????  :shock:

Salu2
« Última modificación: 03 de Julio de 2011, 07:17:15 por DaYeS »
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hyperterminal
« Respuesta #9 en: 02 de Julio de 2011, 23:09:50 »
las x supongo que son los caracteres que tu hiperteminal no conoce y te las ecribe todas como x.


para hacer un echo puedes usar algo asi:

Código: [Seleccionar]
char dato;
#int_rda
void recepcion()
{
    dato=getc();
   putc(dato);
}


void main()
{
enable_interrupts(global);
enable_interrupts(int_rda);
while(true);

}


"Nada es imposible, no si puedes imaginarlo"

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Hyperterminal
« Respuesta #10 en: 03 de Julio de 2011, 07:19:21 »
las x supongo que son los caracteres que tu hiperteminal no conoce y te las ecribe todas como x.

¿?¿?¿? que caracteres no reconoce el hiperterminal??

En todo caso caracteres no imprimibles, como intro, tab....

De todas maneras decia que le salia con todo, es raro raro raro...

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Hyperterminal
« Respuesta #11 en: 06 de Julio de 2011, 16:47:16 »
Parece problema de velocidades, o almenos me da esa sensación...  Teneis el PLL bien configurado?
Saludos

Desconectado DaYeS

  • PIC16
  • ***
  • Mensajes: 119
Re: Hyperterminal
« Respuesta #12 en: 06 de Julio de 2011, 18:07:13 »
Ok, ya he conseguido reproducir tú error. No se da en todos, debe ser una errata, en el caso que hayas habilitado las interupciones de recepción tienes que escrbir la interrupción, quiero decir código dentro de una rutina de interrupción, o los caracteres son todas x.

Así que el problema no es del hiperterminal, sino del pic, o mejor dicho, de la programación del pic.

Salu2
Si buscas resultados distintos, no hagas siempre lo mismo. Albert Einstein.

Desconectado ivanbv4

  • PIC10
  • *
  • Mensajes: 21
Re: Hyperterminal
« Respuesta #13 en: 14 de Julio de 2011, 11:31:16 »
Hola muchachos agradezco sus respuestas. He retomado con esta tarea ya que tuve que colgarla unos días.
DaYeS el primer programa que escribí no usaba interrupciones y no tenia habilitada las interrupciones, todo estaba desarrollado en el main y es ahí cuando "logre" lo de las xx en el hyperterminal. Este programa corre bien y sin errores en Proteus. el programa es:

#include <18f4550.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=20000000)
#use rs232(uart, baud=9600, xmit=PIN_D2, rcv=PIN_D3, BITS=8, stop=1, PARITY=N,ENABLE=PIN_D1 )

int8 buffer1;

void main()
 {
  while( TRUE )
    { 
      buffer1=getc();
      putc(buffer1);
    }
 }

Luego hice la prueba que sugirió rivale. Intente lo mismo pero con la interrupción de recepción de rs232, pero a este programa no pude ni hacerlo andar en Proteus.

#include <18f4550.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=20000000)
#use rs232(uart, baud=9600, xmit=PIN_D2, rcv=PIN_D3, BITS=8, stop=1, PARITY=N,ENABLE=PIN_D1 )
char dato;

#INT_RDA
void recepcion()
{
    dato=getc();
    putc(dato);
}


void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);

  while(true)
  {
   output_toggle(PIN_D0);
   delay_ms(100);
  }

}

No puedo entender como algo que parecía sencillo se ha vuelto tan complejo. Les agradeceré cualquier sugerencia muchachos
Saludos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Hyperterminal
« Respuesta #14 en: 14 de Julio de 2011, 12:41:01 »
Hola, lo que pasa que para que funcione la interrupción #INT_RDA, el UART debe estar implementado por hardware, y los únicos pines que están habilitados para esto son: el RC6 (TX) y el RC7 (RX).