Autor Tema: Dolor de cabeza con PIC 12F683...  (Leído 28269 veces)

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

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #45 en: 19 de Febrero de 2011, 15:15:45 »
Tienes que saber que el PIC posee tres tipos de memoria.
  • La memoria de Programa que puede ser del tipo PROM o FLASH
  • La memoria de Datos que puede ser de tipo RAM
  • La memoria EEPROM

Los Bancos que cambias son los de la memoria de datos tipo RAM, es decir, la memoria EEPROM solo posee un banco, por así decirlo, por lo tanto si puedes utilizar la misma rutina para grabar en distintas posiciones de la EEPROM.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #46 en: 19 de Febrero de 2011, 15:18:59 »
  Sí, sirve si querés grabar en diferentes direcciones. Porque podés hacer lo siguiente

Código: ASM
  1. DIRECCIONEE equ 40h ; aqui se almacena la direccion a escribir
  2. fila1 equ 00h ; primera direccion a escribir
  3. fila2 equ 10h ; segunda direccion a escribir
  4. fila3 equ 20h ; tercera direccion a escribir
  5.  
  6. grabaree
  7. bcf STATUS,RP0 ; me aseguro de estar en el banco 0 para trabajar con la variable DIRECCIONEE
  8. movf DIRECCIONEE,W ; guardo en W la dirección en la cual quiero escribir
  9. bsf STATUS,RP0 ; paso al banco 1
  10. movwf EEADR ; muevo al registro EEADR la direccion en la cual quiero escribir
  11. bcf STATUS,RP0 ; vuelvo al banco 0, para trabajar con la variable DATOSEE
  12. movf DATOSEE,W ; muevo a W los datos que quiero escribir
  13. bsf STATUS,RP0 ; vuelvo al banco 1
  14. movwf EEDAT; muevo al registro EEDAT el dato a escribir
  15. bcf INTCON,GIE ; deshabilito las interrupciones
  16. bsf EECON1, WREN ; habilito la escritura
  17. movlw 55h
  18. movwf EECON2
  19. movlw aah
  20. movwf EECON2
  21. bsf EECON1, WR ; comienzo la escritura
  22. btfsc EECON1,WR ; testeo para saber si termino la escritura
  23. goto $-1 ; si no termino vuelvo a la linea anterior
  24. ...
  25. ....
  26. ; si no voy a escribir mas....
  27. bsf STATUS,RP0 ; paso al banco 1
  28. bcf EECON1,WREN ; deshabilito la escritura
  29. bcf STATUS,RP0
  30. return
  31.  
  32. principal
  33.  
  34.   movlw fila1 ; esto mueve el valor 00h al registro W
  35.   movwf DIRECCIONEE
  36.   call grabaree
  37.  
  38.   movlw fila3 ; esto mueve el valor 20h al registro W
  39.   movwf DIRECCIONEE
  40.   call grabaree
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #47 en: 19 de Febrero de 2011, 15:45:02 »
Muchas gracias AngelGris llegando a mi casa lo pongo a prueba, creo que definitivamente no hubiera encontrado la solucion por mi solo en varios dias.
En tu codigo dejas un apartado con puntos, eso seria en caso de necesitar grabar otro dato en otra direccion ?, menciono esto por que en un apartado del codigo grabo en una direccion y en otras 4 ocaciones necesitare grabar 3 datos diferentes en diferentes localidades de memoria, yo pensaba hacerlo llamando en 3 veces seguidas la rutina de grabar cambiando el valor de la direcicon y el dato a grabar, si lo hiciera como tu ejemplo con una rutina para grabar 3 datos con una misma llamada tendria que repetir el codigo del ejemplo que me acabas de dar de la linea 7 a la 23 pero cambiando las variables DIRECCIONEE a DIRECCIONEE2 y DIRECCIONEE3, asi como la de DATOSEE a DATOSEE1 y DATOSEE2, esto no afectaria en nada si lo llamo solo para guardar 1 dato ?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #48 en: 19 de Febrero de 2011, 15:48:28 »
  En realidad esos tres puntos los dejé por si vos hacías otras cosas en ese lugar. Pero fijate que en mi último ejemplo hago tres llamadas a la rutina grabaree,
  Yo lo implementaría asi, cambiando el dato y la dirección y haciendo la llamada. Queda mas legible el código.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #49 en: 19 de Febrero de 2011, 16:12:24 »
Asi es como lo tengo ahorita en el que no me a funcionado que claro que llegando debe quedar listo con el ejemplo que me diste solo te lo comento porque por ahi habia leido que es importante no cortar la corriente o cualquier cosa cuando este grabando porque se puede dañar el PIC entonces tratando que todo el proceso sea mas eficiente era solo esa mi duda, pero en mi opinion me agrada mas asi, llamar la rutina 10 veces si es necesario de manera seguida, Gracias por tu ayuda brother.

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #50 en: 21 de Febrero de 2011, 00:57:12 »
Bueno al fin pude hacerlo, con el ejemplo que me diste AngelGris solo que no pude hacerlo usando variables al inicio tuve que cargarle el valor al acumulador y pasarlo a DIRECCIONEE justo antes de llamar la rutina de grabar, al fin funciona, algo que me gustaria me sacaran de la duda, con que instruccion o algo que pueda optimizar el codigo, me pasa que en ocaciones por ejemplo si se trata de hacer parpadear un led habeces lo hace parpadear mas rapido que otras veces, que es lo que puede ocacionar esto?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #51 en: 21 de Febrero de 2011, 10:11:55 »
  Habría que ver el código como está hecho.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #52 en: 21 de Febrero de 2011, 12:14:34 »
  Habría que ver el código como está hecho.


Entonces si es comun que suceda esto?, que el rendimiento del procesamiento del PIC dependa de algo mas que el codigo, digamos que cuando lo estoy probando funciona perfecto y cuando lo hecho a la practica el rendimiento o la velocidad parece disminuir, tal ves sea la fuente de energia que no se abastece correctamente.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #53 en: 21 de Febrero de 2011, 13:52:20 »
  ¿Qué es lo que pasa en concreto?

  No es común que pierda rendimiento si se mantiene dentro de los parámetros de funcionamiento dispuestos por microchip y que están expresados en el datasheet.

  El código sí puede afectar, si por ejemplo se hacen atenciones a interrupciones, que puedan afectar a los retardos utilizados.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #54 en: 21 de Febrero de 2011, 15:06:09 »
Pues creo que esta dentro de los parametros del datasheet este proyecto originalmente no es mio es por eso que batalle un poco para editar el codigo pero no movi parametros de interrupciones ni nada parecido mas bien agregue un poco de codigo con eso de guardar en la EEPROM y mas que nada condiciones de comparacion de bit (btfsc o btfss), tambien hice algunas rutinas y por lo tanto pues use mas el Call y el Goto, y ninguna de esta ultimas dos afecta algun bit del registro Status, algunos problemas que tuve eran por ejemplo cuando hacia un Call y a su ves esta rutina contenia otro call me daba fallas o se volvia mas lento, necesite eliminar los call que tenia cada rutina y resolvi esos problemas, tratare sa dar otro vistaso al codigo igual y puedo mejorar algo. Alguna sugerencia para hacer un codigo limpio y eficiente, que me aconsejas en cuanto a las interrupciones y cosas asi, saludos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #55 en: 21 de Febrero de 2011, 15:48:54 »
  No sabría decirte bien, pues sólo hago cosas por hobby. De todas maneras yo he usado call dentro de call y no he tenido problemas.

  Volviendo al caso que mencionabas anteriormente del parpadeo del led que en ocasiones lo hacía mas lento, ¿Podés poner el código?

  Tal vez lo que ocurra es que haces un testeo de alguna variable y si el valor es x querés grabar en la EEPROM (estoy especulando, no sé si hace eso tu programa) y en ese caso hay que tener en cuenta que escribir en la EEPROM lleva un tiempo, por lo tanto la frecuencia de parpadeo va a variar.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado dolphin_96

  • PIC12
  • **
  • Mensajes: 73
    • Ezkybel Electronics
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #56 en: 21 de Febrero de 2011, 17:50:52 »
debes buscar en la hoja de datos cuantos call anidados puedes hacer, todo depende de los niveles de la pila del micro, que es una especie de memoria interna que registra la direcciones en la cual se quedo antes de que hiciera dicha instruccion. por ejemplo para el pic16f877 tiene 8 niveles es decir pudes llamar un call dentro de otro call que a su vez este dentro de otro call y asi sucesivamente 8 veces, sin ningun problema, pero cuando hagas un noveno call este se sobreescribira en el primer nivel, por eso es recomendable que utilises con cuidado esta instruccion y que siempre las cierres con return para liberar un nivel del stack.

saludos
« Última modificación: 21 de Febrero de 2011, 18:02:50 por dolphin_96 »
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #57 en: 21 de Febrero de 2011, 17:57:03 »
  Es muy acertado el comentario de dolphin_96. En este caso en particular el micro tiene un stack de 8 niveles.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #58 en: 22 de Febrero de 2011, 11:21:38 »
Bueno creo que ya pude darme cuenta del porque bajaba un poco el rendimiento y creo que fue porque la pila ya estaba un poco descargada lo cheque con una pila mejor cargada y al parecer funciono mejor, en cuanto al Stack pude verlo que en el MPLAB te lo da en (View - Hardware Stack) y si es correcto me marca 8 ahi mismo te va poniendo en el numero que vas, por cierto en ese mismo menu que quiere decir "File Registers" ? y otra cosa tengo por ejemplo una interrupcion que se hace cuando GP0 y GP1 reciben conrriente o mejor dicho cuando se ponen en estado 0 porque creo que en 1 es apagado, pero en realidad puedo usar desde GP0 a GP5 osea todas para evaluar si se genera la interrupcion o no en una de las 6 entradas esas, porque segun el DataSheet eso es posible.

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #59 en: 22 de Febrero de 2011, 13:24:34 »
Así es, a eso se le llama interrupt on change IOC, esta interrupción ocurre cada vez que hay un cambio en las entradas ya sea de alto a bajo o de bajo a alto.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA