TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: andres48 en 02 de Noviembre de 2011, 22:07:53
-
Estimados
recurro a ustedes porque agote mis conocimientos
estoy en pleno desarrollo de un sistema de control con un master y varios esclavos
el master lleva un 16f876A y... todo bien hasta que avanzando con la programacion, al generar el ASM niple me acomodo los bancos automaticamente.
el tema es que, a partir de alli ya no funciono el programa
Pude generar el Hex sin problemas ni errores pero este no corre una vez grabado, y antes de ese proceso si lo hacia.
alguno de ustedes a tenido este problema antes?
gracias por su atencion
PD subo el NPL por si quieren verlo
-
¿Con que version estas trabajando?
Se que habia una version no recuerdo bien que no funcionaba el cambio de banco.
Esta tarde pruebo y te adjunt lo que me genera ami para que puedas ver si te funciona
F.
-
Te adjunto lo que he realizado para comprobar si te funciona.
-
He estado echando un vistazo al programa y tengo algunas dudas, ¿las puedes aclarar?
Tienes implementados unos dispositivos: Un DS1307 y 2 ee-prom, conectadas a un bus I2C pero cada uno de los dispositivos tienes creado una red I2C con los pines SCL y SCK colocados cada uno en unos pines del puerto A: A0-A1, A2-A3 y A4-A5 respectivamnete.
Ademas las memorias las tienes ambas como Nº dispositivo=0 ¿no deberia ser uno el dispositivo 0 y otro el 1 por ejemplo?
No seria mas aconsejable utilizar un unico bus para los 3 dispositivos, cambiando la direccion de cada uno de ellos.
Por otra parte dentro del programa no veo por ningun lado que escribas ni leas de la ee-prom 2 ¿Estoy equivocado?
F.
-
Antes que nada, gracias por la atencion dispensada Fermin. Un gusto poder leerte nuevamente.
Te comento que el programa deberia tener las subrutinas de lectura y escritura en eeprom, solo que, habida cuenta del inconveniente que tenia, las fui eliminando. Despues envio el programa completo.
Respecto a la disposicion de los I2c, si bien es muy cierto lo que sugeris, a nivel pcb me resulto mas facil hacerlo de este modo, y dado que cada elemento posee su propio bus fisico, no me fue necesario identificarlos ya que sobre cada uno de ellos solo cuelga 1 I2c.
esto lo he podido comprobar y funciona sin problemas. Los problemas empezaron solo cuando, por extenesion del programa, niple forzo el reacomodo de la memoria. A partir de alli la cosa ya no funciono mas.
Envie un correo por este tema a Jorge y estoy esperando respuestas.
La version que estoy usando en la 5.6 plus con licencia y funciona de maravillas, salvo este tema que me tomo de sorpresa.
Este programa administra un master y varios esclavos y algo que observe con respecto a la comunicacion es que, si bien el maestro puede administrar el RS485 por codigo, los esclavos deben hacerlo a travez de USART. De otro modo, no encontre la manera de que se sincronicen y tuve muchos dolores de cabeza con esto.
Demas esta decir que si puedo ser util en algo a la comunidad, sean tan amables de pedirlo.
muchas gracias a todos
Andres
-
¿Probaste lo que adjunté?
F.
-
Aun no.
Estoy en la oficina y no tengo aca los elementos.
Gracias
Andres
-
Wait.......................................................... ;-)
-
Hola F
probe el hex pero seguimos con lo mismo
el sistema queda colgado. Ni siquiera presenta en pantalla.
sigo investigando que paso
un abrazo
andres
-
Fermin
aca envio otros archivos donde veras que la version base funciona correctamente, solo que ocupa el 1005 del banco 0
despues de agregar algun detalle menor, me acomodo automaticamente los bancos y ya no funciono mas. (base2)
si pudieras verlos me seria de mucha ayuda
gracias
Andres
-
Hola Andrés.
En ciertas ocasiones , cuando NIPLE ha organizado los bancos de memoria tb. me ha ocurrido lo que a ti.
He cambiado la subrutinas de banco y el error que estaba saltando " owerflow stack return call .....", esta subsanada.
En proteus funciona, me falta implementar la comunicación con los dispositivos 485 para que el programa avance.
Ya me tienes al día.
-
Me deje los archivos
juanfra
-
Al parecer éste tema Niple lo arrastra desde hace tiempo!
Antes de que lean el siguiente texto quisiera que lo tomen mas como un aviso de prevencion antes que una queja, esto basado en mi experiencia claro!!!
Estuve trabajando en un soft que envia mensajes atraves de un cell y todo esto lo hice con el entorno de niple, todo venia muy bien tomando en cuenta algunas precauciones que detallo a continuacion
1 Nunca declaren tantas variables como para llenar solo el banco 0 ya que el niple tambien los declara alli y cuando dicho banco se llena y el niple toma MIS variables y las REORDENA entre el banco 0 y el 1 que hace esto? Hace que el programa se vuelva loco!!! y el proyecto se vaya a la basura!!!! Claro si es que no manejan asembler y los corrijen una vez generado el codigo. En mas de una ocacion reporte este error a los desarrolladores de niple, en particular al Sr Jorge Cano y este simplemente se limito a decirme "Estamos trabajando en ello", si ustedes se fijan hay un post que habri cuando me tope con este problema....Cual fue la solucion esta ves..... Empece a crear variables en los otros bancos y dejar al niple que cree sus variables unicamente en el banco 0, pero cada vez que uno crea una variable fuera del banco cero el niple dice"El niple le recomiendo llenar el banco", no se para que? si al final destruye tu programa!!
Una ves que tuve en cuenta todo esto me dije a mi mismo problema solucionado!!!!
En realidad no sabia lo que me esperaba!!!... Ya que cuando mi programa fue creciendo y llene la PAGINA 0 o sea los primeros 2k de memoria el niple me pide que reorganice el programa o mas bien que el (programa) me reorganizara automaticamente, dandome la opcion de colocar MIS rutinas en la pagina 0 (si hubiere lugar) o en el banco 1 pero solo mis rutinas ya que las interrupciones y el programa principal son intocables.... Que ocurrio? Lo reorganice tal como me lo pidio, me genero perfectamente el archivo HEX, pero al colocar el micro grabado en el circuito hacia cualquier como menos lo que deberia, esto me obligo a simular el soft, y me dio lo mismo es decir mi programa estaba loco, es decir los saltos que hacian no eran los correcto iba a rutinas que yo no pedia......
La unica alternativa que tuve es la de minimizar el programa lo mas que pude llegando a ocupar el 98% de la primera pagina, hasta hoy no encontre un solucion a todo esto, es por eso les escribo advirtiendoles por un lado y si alguien ya paso por esto que sea tan amable de darme la solucion.
La unica salida a todo esto es poder uno mismo mover los codigos a la pagina que desea de tal forma que el niple no haga ninguna organizacion pero.... no lo puedo hacer ya que no puedo introducir la opcion ORG XXXX que es el que organiza las lineas de codigos en determinados lugares de memoria. Si alguien sabe como utilizar el ORG en niple que me avise por favor!!!!
Todo esta experiencia, rabia, frustracion, me llevo a hacer la siguiente pregunta????
Sera que realmente nos venden lo que dicen vendernos? Ya que para evitar cualquier mal momento inverti dinero en un soft legal para que funcionara de la mejor forma, y no tuviera que tener contratiempos en mis proyectos, pero pareciera ser que fue todo en vano!!!!
OJO no apoyo bajo ninguna circunstancia la pirateria, solo que hay veces que uno cuando esta apunto de terminar un proyecto y le ocurre todo esto,,,, quesiera tirar la llave y el soft a la basura....
Desde ya muy agradecido por los comentarios, aportes y sugerencia dadas!!!!!!!!!!!!!!!
-
Antes que nada, gracias a todos por la colaboracion
les comento algo que me llamo la atencion
veran que en el caso del 16f876A y el 873A, cuando declaran registros, el banco 1 aparece en color blanco y el 2 y 3 en rojo en niple plus 5.6 rev0
esto lo chequee con otros pics y la cosa es siempre verde salvo en estos dos ..??
entonces, use el niple 5.2, donde el banco 1 / 2 / 3 estan en verde y ... wala funcion bien.
supongo que Jorge debera estar trabajando en esto.
Juanfra
voy a probar lo que enviaste
un abrazo a todos
Andres
-
En ciertas ocasiones , cuando NIPLE ha organizado los bancos de memoria tb. me ha ocurrido lo que a ti.
He cambiado la subrutinas de banco y el error que estaba saltando " owerflow stack return call .....", esta subsanada.
En proteus funciona, me falta implementar la comunicación con los dispositivos 485 para que el programa avance.
Hola Juanfra, ¿el acomodo lo haces directamente desde ASM?. Ahora no tengo el programapesente pero ¿no tiene Niple la opcion de REcolocar las subrutinas, una vez que las ha colocado la 1ª vez? Esto no lo he probado voy a investigar.
supongo que Jorge debera estar trabajando en esto.
Si no se le comunica, no se si lo hará. Tampoco sé si tu lo has hecho, pero me he permitido el decirselo a ver que nos dice.
-
Hola Fermin.
Desde el mismo niple, a la hora de generar el *.hex, podrás observar la distribución de bancos y subrutinas, si clikas encima de cualquiera de ellas te da la opción de recolocar la en uno u otro banco, si es cierto que a veces , (sobre todo en versiones anteriores) niple no gestionaba bien la ubicación dela subrutinas, lo cierto es que desde las ultimas versiones no he notado dicho problema.
De todas maneras, para mi es un verdadero placer poder ayudarte, cosa que se, que para ti es practica habitual con todos los usuarios del foro, siempre o haces de forma rápida y clara.
Desde aquí , gracias por tu dedicación.
Te adjunto imagen de la reestructuracion de las subrutinas.
Gracias Fermin
Juanfra
-
Si esa opcion ya la sabia y se corrigio ( :shock: esperemos :shock:) en las nuevas versiones.
Lo pregunte porque pense que lo cambiabas directamente en el fichero Asm generado por Niple.
F.
-
Estimados
buenos dias
les comento que Jorge Cano me envio un parche para el 5.6 con el cual deberia haber quedado resuleto el aocmodo de paginas, pero por mas que lo probe en distintas versiones del programa, la cosa sigue igual.
Ya le envie este comentario y espero alguna solucion porque realmente estoy muy comprometido con este trabajo
si alguien puede darme una mano de como reacomodar los bancos si que niple los reorganice, me seria de mucha ayuda.
si bien es cierto que este te permite luego reacomodarlos, la cosa sigue igual y el programa no se ejecuta (pereciera que queda en algun bucle infinito)
gracia a todos
Adjunto en NPL del programa en cuestion
Andres
-
Mientras te responde Jorge voy a ver si echo un vistazo a lo que has adjuntaado y te puedo decir/ayudar en algo.
F.
-
Mira he realizado varios cambios de bancos dentro de Niple y al compilar nunca me dio error, monté un pequeño circuito en Proteus y cargaba bien.
No se que puede pasar en la realidad al cargar el hex en el pic.
Luego queda la otra y es que una vez generado el primer ASm por Niple, le editea y agrgues los cambio de pagina de forma manual con las instrucciones ORG y controlando el Pclath. ¡¡ Tarea engorrrosa, pero no imposible !!!
F.
P.d.: Volvia a contar con Jorge y le he vuelto a preguntar por el problema y me comentó que lo revisará.
-
OK
Gracias Fer
no soy ducho en Assembler asi que seguire tratando de resolver desde Niple.
Nunca tuve problemas con simulacion y el .hex siempre se me genero sin error. Pero al cargar el pic y montar en la placa, este no realiza o bien todas o algunas de las sentencias del programa.
El mismo programa, si lo simplifico hasta ocupar solo un banco, funciona correctamente, solo que no hace todo el trabajo que necesitaria.
Asi que descarto el cargador, el pcb o el mismo pic
un abrazo
Andres
-
No desesperes, que supongo que se está trabajando en ello...............
¿Cosultaste con Jorge a cerca del problema detectado?
-
Hola Fer
consulte a Jorge y este me envio un parche, pero continuo con el mismo inconveniente.
cuando Niple me acomoda los bancos (las sub rutinas) el programa ya no se ejecuta.
volvi a indicarle el problema pero a la fecha no hay resultados.
No se si este problema es solo con el 16f876A. de estar seguro de otro pic, cambiaria el PCB e inicio todo nuevamente.
Lamentablemente no domino el assembler y no puedo resolverlo desde ahi.
Gracias Fer por la ayuda dada.
Andres
-
Si quieres probar con otro micro y no quiers cambiar de momento todo, puedes montar un pequeño pcb solo con los pines del nuevo micro y realizando la adaptacion de pines al micro que estas utilizando. pero claro esto solo lo puedes realizar si estas utilizando un zocalo para el micro en tu pcb.
F.
-
OK
creo que lo mejor ser hacer lo que sugieres.
Armare un protoboard con un 16f877A y vemos como se comporta.
Siempre quise armarme una placa de ensayos, pero son esas cosas que dejamos para mas adelante ....
Los PCB siempre los armo con zocalos-
Gracias Fer y si no tengo oportunidad de volver a contactarte, te deseo lo mejor para estas fechas.
Un abrazo
Andres
-
Alguien encontro alguna solucion practica a este problema del niple o simplemente hay que saber asm o C? Porque la solucion practica que da el fabricante asi como lo expuse alguna vez es que enviemos el asm generado y el Sr Jorge C. (desarrollador del niple) lo arregla solo que si modificamos el programa tendrias que enviarlo de nuevo.... en fin si alguien tiene la solucion al tema de cambio de banco por NIPLE agradeceria que lo publicaran..... Ahora no me dejan muchas opciones programo en ASM y aprendo a FULL C con CCS no es mi gusto pero no hay de otra...... :( :( :( :( :(