Hemos probado a modificar la librería declarando el puerto A como digital con la instrucción de CCS "setup_adc_ports (no_analogs). Hemos puesto esta instrucción cada vez que aparecía un set_tris_a pero aún así sigue sin funcionar.
Si usas esa instrucción que configuras a los pines como digitales me parece bien para las operaciones de lectura.
No quiero ser insistente pero para mi un puerto analógico usado como salida es una salida y
no debiera interferir en las operaciones de escritura del display (pero aclaré que si en las de lectura).
Para mi el problema esta en otro lado.
En cuanto a que la memoria empiece en la dirección 20 en lugar de la 00 como en el 84 no sé cómo podría modificarse ni si será ese el problema que tenemos.
Creo que probaremos si no a cambiar los pines de control de la LCD al puerto C, aunque el problema es que tenemos una placa de pruebas para comprobar el funcionamiento y está conectada al puerto A sin posibilidad de modificación.
Muchas gracias por todo
Vanesa no entiendo lo de las memorias reservadas... si usas el C debiera este saber perfectamente donde ubicar el código y las variables en memoria.
No veo declaraciones en posiciones 'fijas' de memoria en las rutinas del display. Tampoco veo declaraciones de memorias globales todas son locales a las diferentes funnciones.
Respecto a lo que dices que la función te funciona con un string, realmente me dejaste anonadado. Para mi un char es un simple byte y si se le pasa un string como parámetro solo puede hacer 2 cosas: o que sea descartado el resto , o que sobreescriba memorias locales de la subrutina.
Sencillamente no veo en ningun lado que el software trate el envio de strings, salvo que el compilador se las ingenie para mandar varios chars ... lo cual lo considero medio extraño y hasta nada 'estandard' ya que el compilador debiera enviar lo que uno le dice y del otro lado recibir lo que espera recibir --> un char.
Ahora bien si un char a secas para el C que usas es un string.... no he dicho nada.
Que haría yo si fuera tu.
1) Es posible que tu pic16F873 no esté bien configurado en el compilador?
2) Es posible que el pic16F873 esté funcionando a mayor frecuencia que el 16F84? Si es asi --> aumentar los delays en las funciones de display. Donde dice delay_cycles aumentale a 10, a 20. Eso no hará nada dañino.
3) Si el compilador funciona bien yo descartaría toda posibilidad de eso de las memorias reservadas porque sencillamente para que está el compilador con su linker si no es para conocer esas cosas
4) Porque no pruebas con mandar un bucle de 10 caracteres? Y no un string? Es decir porqeu no llamas con un for, 10 veces a la rutina lcd_putc con una letra a?
Saludos