Autor Tema: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.  (Leído 3980 veces)

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

Desconectado diegostreetbob

  • PIC12
  • **
  • Mensajes: 51
Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« en: 17 de Noviembre de 2010, 18:00:10 »
Hola compañeros,
Estoy bastante desesperado con este asunto, tengo el programa practicamente terminado, pero necesito enviar datos por el puerto serie y en el hyperterminal me salen caranteres erroneos
Por ejemplo con printf("hola"); me sale en pantalla el simbolo  ÷
si utilizo putc("hola"); entonces me sale en pantalla VHº
La verdad ando loco con esto, no se si hay que calibrar el oscilador, nose,estoy desesperado, lo he problado por puerto serie y por usb con un adaptador con identico resultado.
El hyperterminal lo tengo con  2400 8N1 control de flujo hardware.

#include <12F629.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BANDGAP_HIGH         
#FUSES RESERVED                 //Used to set the reserved FUSE bits
#use delay(internal=4000000)
#use rs232(baud = 2400,parity=N,xmit=PIN_A1,bits=8)
#byte porta=0x05
#byte trisa=0x85
#use fast_io(a)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
//aqui tambien he probado la directiva #use rs232
#zero_ram
int lectura();//funcion lectura
int1 detecta(void);//funcion detectar pulso bajo
void memo(int v);//funcion memo, en v se almacenara el valor de leido una vez pulsado memo
void compara(int w);//función compara lectura con datos de eprom para identificar boton
int boton;
int boton1,boton2,boton3; //variable numero boton
int leido;
void main()
{
   set_tris_a(0b110000);
   int1 detectado;//recibira el valor del flagdetecta mediante el return de la funcion detecta()
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   set_timer1(0);
while(true)
{
if(bit_test(porta,4)==0) memo(leido);
else detectado=detecta();//llamada funcion detecta,y almacenado mediante el return el valor de flag detecta
leido=lectura();//llamamos funcion lectura y cargamos leido con valor y de lectura Return(y)
compara(leido);//llamamos a compara y le enviamos el valor de leido
}
}
int1 detecta(void)
{
int1 flagdetecta; //variable que se pondrá a 1 cuando haya sido detectado
star:
if(bit_test(porta,4)==0) memo(leido);//va a memorizar si pulsamos memo
set_timer1(0);
while(bit_test(porta,5)==0) //cuando el pulso es bajo, leemos el timer1 para medir el ancho de pulso
{
if(get_timer1()>18000)//retardo para detectar primer pulso largo bajo del mando
{
flagdetecta=1;//detectado
return(flagdetecta);//devolvemos el 1 de flagdetecta
}
}
goto star;
}
int lectura()
{
output_high(pin_a1);//para disparo del ikalogic
int codigo[3]; // Array de [3]Bytes, 24bits para la lectura del código boton1
int x; //para el for-next y lectura del array
int y;//almacenaremos codigo0+codigo1+codigo2
for(x=0;x<21;x++)//leemos 22bits, los 4 que faltan los obviamos con el retardo de 8000 de la linea 59.
{
delay_us(2439);//retardo para conincidir con el flanco tren de impulsos
shift_left(codigo,3,bit_test(porta,5));//registra lo que entra por portc,0 en los 2 bytes del array código
}
output_low(pin_a1);//para disparo ikalogic
y=codigo[0]+codigo[1]+codigo[2];
set_timer1(0);
output_low(pin_a0);//para encender el led hay que sacar 0
delay_ms(250);
output_high(pin_a0);
delay_ms(250);
output_low(pin_a0);//para encender el led hay que sacar 0
delay_ms(250);
output_high(pin_a0);
return(y);
}
void memo(int v)
{
boton++;//aunmenta una vez cada vez que entra en la funcion
if(boton>3) boton=1;
switch(boton)//depende las veces que se haya pulsado el boton de grabar se graba en una posición distinta
{
case 1:
write_eeprom(0x00,v);//grabamos leido(asignado a V) en la eprom
break;
case 2:
write_eeprom(0x01,v);
break;
case 3:
write_eeprom(0x02,v);
break;
}
{
output_low(pin_a0);
delay_ms(1000);
output_high(pin_a0);
delay_ms(1000);
output_low(pin_a0);
delay_ms(1000);
output_high(pin_a0);
}
}
void compara(int w)
{
output_low(pin_a0);//para encender el led hay que sacar 0
delay_ms(50);
output_high(pin_a0);
delay_ms(50);
output_low(pin_a0);//para encender el led hay que sacar 0
delay_ms(50);
output_high(pin_a0);
printf("hola");
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #1 en: 17 de Noviembre de 2010, 21:03:24 »
Hola.

Configura el hyperterminal sin el control hw a ver que sucede
El papel lo aguanta todo

Desconectado pablolode

  • PIC16
  • ***
  • Mensajes: 123
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #2 en: 17 de Noviembre de 2010, 23:10:13 »
prueba tambien con un cristal, segun la experiencia de algunos compañeros en el foro

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #3 en: 18 de Noviembre de 2010, 02:39:38 »
Se supone estos micros que emulan lo hacen a través de rutinas. Se le recomienda bajar la tasa de transferencia a 300 b/s
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado diegostreetbob

  • PIC12
  • **
  • Mensajes: 51
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #4 en: 18 de Noviembre de 2010, 17:21:54 »
ok,
mañana en cuanto pueda hago las pruebas y os comento.

Muchas gracias.

Desconectado diegostreetbob

  • PIC12
  • **
  • Mensajes: 51
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #5 en: 19 de Noviembre de 2010, 17:40:00 »
Hola,
ya funciona perfectamente, bajado el baudrate a 300, desactivado el control por hardware.

Muchas gracias de nuevo a todos.

Un saludo desde España.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #6 en: 20 de Noviembre de 2010, 00:50:45 »
Y a 9600 y sin control de HW? a mi me funciona bien en la simulación  ;-) prueba a ver que tal
El papel lo aguanta todo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #7 en: 20 de Noviembre de 2010, 03:52:35 »
Me huele a problemas con el oscilador, ¿has probado a jugar con OSCCAL para calibrarlo?

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #8 en: 20 de Noviembre de 2010, 17:29:44 »
Que tal,

al igual que nocturno, definitivamente me inclino a que es el OSSCAL, hay que calibrarlo. No tengo experiencia en C, pero igual se pueden agragar las lineas de ensamblador para hacerlo:

BSF STATUS, RP0 ;Bank 1
CALL 3FFh ;Get the cal value
MOVWF OSCCAL ;Calibrate
BCF STATUS, RP0 ;Bank 0

Saludos

elreypic.

Desconectado IsaHarvar

  • PIC10
  • *
  • Mensajes: 12
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #9 en: 22 de Noviembre de 2010, 21:48:42 »
Yo no llevo mucho tiempo en el mundo de los PIC, pero ya he hecho varios circuitos con un hyperterminal y al principio tenía ese fallo y también me quedaba tan sorprendida como tú. Lo resolví como dice MLO, configurando el hyperterminal en "Edit Component" a la misma velocidad de la conexión serie que se indica en la directiva #USE RS232 (baud= XXX...)

Desconectado IsaHarvar

  • PIC10
  • *
  • Mensajes: 12
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #10 en: 22 de Noviembre de 2010, 21:50:19 »
Si quieres puedo subir algunos ejemplos que funcionan con su simulación en proteus

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Desesperado con 12f629 e hyperterminal, mejor dicho Muy desesperado.
« Respuesta #11 en: 23 de Noviembre de 2010, 07:37:02 »
Hola diegostreetbob ,el control de flujo por hardware en pic, no funciona si no lo implementas tu a parte, pues el pic nativa mente no gestiona lo pins como el cts, rts y compañía, y el modo Xon ,Xoff también hay que simularlo, siempre he utilizado sin protocolo y va bien yo creo que asta 9600 sin recepción, deberías poder alcanzarlos.
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.