Autor Tema: pasar datos de eeprom a hyperterminal con hitech  (Leído 12274 veces)

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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #15 en: 07 de Febrero de 2011, 04:01:46 »
hola:

estamos con ello, pero:

¿que diferencia hay entre la rutina de manejo por sofware y por hardware. Comprendo que por sofware usamos cualquier patilla y por hardware usamos la uart del pic, pero ¿que ventajas tiene uno sobre el otro?


por otro lado, la funcion itoa pasa de integer a ascii, pero las posiciones de memoria eeprom son char, ¿cambio la variable a integer?


saludos y muchas gracias por todo tu aporte para que yo aprenda más...


Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #16 en: 07 de Febrero de 2011, 04:32:25 »
hola de nuevo:

ahora tengo asi el programa (solo pongo lo relevante):

he incluido los includes como en el ejemplo:

#include <stdio.h>
#include <stdlib.h>

tambien he definido asi las variables:

unsigned char char_data[5]; //para rs232
unsigned int input;

y el codigo lo pongo asi:

void SEND_RS232(void)
   {
   InitSoftUart();
   __delay_ms(250);

   Putst_s ("Number of High Levels: ");   // envia el string
   while(WR)continue;
   input = EEPROM_READ(0xD0);
   itoa(char_data,input,16);
    Putch_s (char_data);
   Putst_s ("\n");     // envia el salto de linea


lo que me aparece en el hyperterminal, es algo pero no lo que debe pues en DO tengo un 55 (en ascii una U)

pero en el hyperteerminal aparece un 1 superindice.

Number of High Levels: ¹


eso me pasa con cualquier valor.


tampoco se que suncion tiene el parametro base en itoa...


saludos




Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #17 en: 07 de Febrero de 2011, 04:38:08 »
ok, segun me estrujo, voy entendiendo:

el fallo es que seguia poniendo putch y hay que cambiar a putst porque ahora pasamos un string (que fallo).

voy pillanldo el tema.

ahora, todavia me falta entender para que sirve el paramentro base (yo pongo como en el ejemplo (16)).

y las diferencias entre las librerias de manejo por software y por hardware.


esto me gusta ya me sale lo que queria, al final, con tu ayuda voy a lograrlo (jeje), que alegria:

Number of High Levels: 55

biennnn!!!

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #18 en: 07 de Febrero de 2011, 04:45:02 »
bueno, pues esto de leer un rango no me lo hace, algo pasa, pues en el hyperterminal, es como si nada...


for (i=0x00; i > 0x0F ; i++)
      {
      while(WR)continue;
      input = EEPROM_READ(i);
      itoa(char_data,input,16);
       Putst_s (char_data);
      Putst_s (" ");     // envia el salto de linea
      }

pretendo leer las posiciones de memoria desde la 0x00 hasta la 0x0f, o lo que es lo mismo desde la 0 a la 16 y plasmar su contenido, pero na de na...


gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #19 en: 07 de Febrero de 2011, 09:35:24 »
  Respondiendo a dudas anteriores... la diferencia entre las rutinas de RS232 por SoftWare y HardWare es que en el caso de las de SoftWare hace todo el programa, por lo tanto vas a quedar allí hasta que se terminen de transmitir todos los datos (y por supuesto ocupa mucha más memoria de programa). Si utilizas las de HardWare, lo único que hace el programa es ir llenando el registro TXREG. Como se lo está utilizando es casi lo mismo porque envías todo seguido, pero en el caso de usar por HardWare se podría usar interrupciones y llenar el TXREG sólo cuando éste esté vacío. Otra diferencia será que por HardWare se puede tener un rango más amplio de velocidades.

  En cuanto el parámetro base de la función itoa se usa para elegir el tipo de representación. Si usas base 10, sera representación decimal y si usas base 16 será Hexadecimal.

  En cuanto al bucle for, creo que está mal por como está puesto trabajaría mientras i sea mayor a 0x0F, pero el valor inicial de i es 0 por lo tanto nunca trabaja. Tendrías que ponerlo así.

Código: C
  1. for (i = 0x00; i < 0x0F; i++)
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #20 en: 07 de Febrero de 2011, 10:00:30 »
COORECTO:

Corregido lo del for.

entendido lo de las diferencias.

no termino de entender lo del parametro base, pues si le cambio a 10, directamente se bloquea el programa...

segun lo tengo, pues bien, leo una posicion de memoria y me pone por ejemplo 11, claro es en haxadecimal, y sale 11 por el hyperterminal. pero si quisiera que en el hyperterminal en vez de 11 (que es hexadecimal), quiero que ponga 17, que es su valor en decimal, ¿que haria? poner el itoa en base 10, o habria primero (antes de convertir a string), que convertir de hexadecimal a decimal?.

ya se que me estoy poniendo pesao, pero quiero aprender a usar bien todas estas cosas.... y bastante quie me hechas unn cable y voy cogiendo...


por otro lado, si quiero ahora que el pic espere un comando, es simplemente esperar y leer??

saludos y como siempre gracias por tu paciencia y dedicacion.
 :-/

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #21 en: 07 de Febrero de 2011, 10:36:46 »

no termino de entender lo del parametro base, pues si le cambio a 10, directamente se bloquea el programa...

segun lo tengo, pues bien, leo una posicion de memoria y me pone por ejemplo 11, claro es en haxadecimal, y sale 11 por el hyperterminal. pero si quisiera que en el hyperterminal en vez de 11 (que es hexadecimal), quiero que ponga 17, que es su valor en decimal, ¿que haria? poner el itoa en base 10, o habria primero (antes de convertir a string), que convertir de hexadecimal a decimal?.


  Basta con solo poner el itoa en base 10, para poder ver el valor en decimal. Así lo tengo en una prueba para un frecuencímetro

Código: C
  1. itoa (texto,Frecuencia,10);


por otro lado, si quiero ahora que el pic espere un comando, es simplemente esperar y leer??


  En teoría sí, es simplemente esperar y leer. Lógicamente hay varias formas distintas de implementar eso y todo dependerá de lo que quieras hacer en concreto.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #22 en: 07 de Febrero de 2011, 10:47:12 »
correcto:

no se que ocurriria, pero es cierto, al poner un 10, lo veo en hexadecimal...

muchas gracias.

la unica pega que veo es que al poner los datos en hexadecimal, los de dos cifras bien por ejemplo ff, pero los de 1 cifra por ejemplo 01, no me pone el 01 sino 1 solamente o en 0a solo me pone a, ¿hay foma de ajustarlo para que al volcarlo se vea un 01 0a, etc y no 1 a ...


con lo de recibir, pues podria, practicar en que el terminal se quede a la espera de un comando o letras y cuando el pic reciba ese comando, responda (por ejemplo , devolviendo el contenido de la eeprom).

en principio usare la libreria por software, pues esta comunicacion la hare solamente si entro especificamente a ese programita para ver la eeprom y como mucho si aprendo a dar algun comando.

el sentido de esto es que memorizo ciertas actividades de la aplicacion y despues poder saber cuantas veces ha ocurrido sin necesidad de programador...

un saludo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #23 en: 07 de Febrero de 2011, 11:49:01 »

la unica pega que veo es que al poner los datos en hexadecimal, los de dos cifras bien por ejemplo ff, pero los de 1 cifra por ejemplo 01, no me pone el 01 sino 1 solamente o en 0a solo me pone a, ¿hay foma de ajustarlo para que al volcarlo se vea un 01 0a, etc y no 1 a ...


  Y... quizá se podría implementar algo asi...

Código: C
  1. if (input <= 0x0f) Putch_s ('0'); //input seria lo que se lee de la eeprom
  2. //con la linea anterior se envia el 0 antes del valor leido siempre y cuando el mismo sea menor o igual a 0x0f
  3. Putst_s (char_data);


con lo de recibir, pues podria, practicar en que el terminal se quede a la espera de un comando o letras y cuando el pic reciba ese comando, responda (por ejemplo , devolviendo el contenido de la eeprom).

en principio usare la libreria por software, pues esta comunicacion la hare solamente si entro especificamente a ese programita para ver la eeprom y como mucho si aprendo a dar algun comando.

el sentido de esto es que memorizo ciertas actividades de la aplicacion y despues poder saber cuantas veces ha ocurrido sin necesidad de programador...

un saludo


  Entiendo lo que quieres hacer con esperar a un comando, pero mi comentario iba por ejemplo a que te podías quedar esperando en un loop infinito (y no hacer otra cosa) u organizar un loop infinito pero pudiendo hacer otras cosas o implementar la lectura de lo recibido vía interrupciones. Por éso decía yo que hay varias formas para implementarlo.

  En cuanto a la memorización de ciertas actividades de la aplicación, ten en cuenta que tienes un limitado número de veces el cual puedes grabar la eeprom. Eso está especificado en el datasheet. Tal vez sea más conveniente usar una eeprom externa (tipo 24Cxxx) y en el caso de que no sirva más simplemente cambias de memoria y listo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #24 en: 08 de Febrero de 2011, 04:03:39 »
el codigo de poner el cero, probado y correcto.

sobre la eeprom, pues tienes razon, pero, esos sucesos nunca llegaran al numero que se permite, por lo que en principio no impoorta mucho. ademas, casi por precio (depende del pic), cambias el pic entero... (quien sabe).

sobre el comando de recibir, pues tengo una duda, pues solo veo en la libreria un comando para recibir un caracter, Getch(), y veo que no tiene parametro, entonces yo pongo:

Getch_s();

y despues que variable es la que comparo, ¿quizás la interna "letra"?. Pues imagino que tendré que comparar lo que entra con un caracter (no se si se puede hacer con un comando como el retorno de carro), o incluso, con varias letras, por ejemplo, hacer algo cuando en el hyperterminal escribes read con retorno de carro...

saludos.

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #25 en: 08 de Febrero de 2011, 09:39:02 »
ok.

he probado de esta forma:

bb:
input=Getch_s();
   if (input == 0x0D)
        {
        .......
        lo que quiero hacer
        .......
        }
else
{ goto a bb;}


pero resulta que funciona, pero cuando le doy al intro unas veces obedece y otras no. no se si es porque tarda en llegar a leer o por otra cosa.

en fin mas o menos voy viendo....


saludos

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #26 en: 08 de Febrero de 2011, 09:43:15 »
el codigo de poner el cero, probado y correcto.

sobre la eeprom, pues tienes razon, pero, esos sucesos nunca llegaran al numero que se permite, por lo que en principio no impoorta mucho. ademas, casi por precio (depende del pic), cambias el pic entero... (quien sabe).


  Ah, bueno. En ese caso si que no conviene meter otro integrado.

sobre el comando de recibir, pues tengo una duda, pues solo veo en la libreria un comando para recibir un caracter, Getch(), y veo que no tiene parametro, entonces yo pongo:

Getch_s();

y despues que variable es la que comparo, ¿quizás la interna "letra"?. Pues imagino que tendré que comparar lo que entra con un caracter (no se si se puede hacer con un comando como el retorno de carro), o incluso, con varias letras, por ejemplo, hacer algo cuando en el hyperterminal escribes read con retorno de carro...

saludos.


  getch_s() es una función que devuelve un char, por lo tanto para leer el comando tendrías que hacer esto

Código: C
  1. variable = Getch_s();


  El problema de hacerlo así es que te quedás esperando si o si a que se presione una tecla, o sea que no podés hacer otra cosa hasta no salir de allí.

  Justo que estaba escribiendo apareció tu respuesta.

  Ojo! que Getch_s() es para leer un solo caracter, por lo tanto si sólo te interesa el "enter" tenés que asegurarte de no presionar ninguna otra tecla. Sino te va a tomar dicha tecla y obviamente no va a hacer nada porque tu if evalua el caracter del "enter"
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #27 en: 08 de Febrero de 2011, 09:48:58 »
EL UNICO PROBLEMA QUE VEO ES LA TARDANZA, QUE AUNQUE ESTE CONTINUAMENTE LEYENDO, RESULTA QUE NO OBEDECE A LA PRIMERA....


YA IMAGINO QUE SI QUIERES HACER COSAS MIENTRAS HABRA QUE USAR COMUNICACION POR HARD ¿VERDAD?.


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #28 en: 08 de Febrero de 2011, 12:31:46 »
  Le estoy prestando más atención a mi rutina de getch_s() y veo que en realidad no espera a que llegue un caracter, o sea que si la ejecutás cuando no envías nada puede generar fallos.
Tal vez se solucione haciendo algo así...

Código: C
  1. if (pinRX == 0) variable = Getch_s();

  Siendo pinRX el pin que quieras usar como RX y variable la variable donde quieras almacenar lo leído.

  Hago ese testeo para saber si el pin se pone en 0, porque por el protocolo el pin TX del transmisor está siempre en 1 y cuando se pone a 0 se lo toma como el inicio de la transmisión.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: pasar datos de eeprom a hyperterminal con hitech
« Respuesta #29 en: 08 de Febrero de 2011, 13:06:27 »
he colocado esta linea, y da resultado, incluso, ya me lee más rápido.... :D

gb:   if (RC7 == 0) {input = Getch_s();}else{goto gb;}

y despues segun el caracter, actuo...



nota: me quedaria estudiar la libreria mas a fondo y averiguar para introducir ese cambio directamente en la libreria. y por otra parte, descubir como recibir una cadena. pero me doy por satisfecho por el momento, porque gracias a ti, he aprendido a nejar un lcd y el rs232, en esta semana...


gracias....

 :-/


 

anything