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

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

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #30 en: 17 de Febrero de 2011, 18:13:18 »
Código: ASM
  1. movlw 10 ; en realidad seria el numero que tengas que sumar
  2. addwf variable,F      ; hago la suma y guardo el resultado en la variable
  3. movlw 19h               ; el numero a comparar
  4. subwf variable,F      ; a variable le resto W
  5. btfsc STATUS,C        ;  si el carry esta en 1 variable es mayor a 19h
  6. goto $+2                 ; salto a la linea actual + 3
  7. btfsc STATUS,Z       ; si el Z esta en 1 variable es igual a 19h
  8. movwf variable; como W valia 19h lo guardo en variable, porque esta linea se ejecuta si el Zero era 1
  9. ;aca seguiria el flujo del programa

Me confundi con la instruccion sorry, estoy usando la instruccion INCF para ir sumando de 1 en 1 y en este caso que no exeda de los 19h, entonces seria igual que el ejmplo solo eliminaria la linea 1 y cambiaria la 2, algo asi.

Código: ASM
  1. ;movlw 10 ; en realidad seria el numero que tengas que sumar
  2. incf variable,F      ; INCREMENTAR EN 1
  3. movlw 19h               ; el numero a comparar
  4. subwf variable,F      ; a variable le resto W
  5. btfsc STATUS,C        ;  si el carry esta en 1 variable es mayor a 19h
  6. goto $+2                 ; ------------En este me quedo la duda-------------
  7. btfsc STATUS,Z       ; si el Z esta en 1 variable es igual a 19h
  8. movwf variable; como W valia 19h lo guardo en variable, porque esta linea se ejecuta si el Zero era 1
  9. ;aca seguiria el flujo del programa

Algo asi quedaria usando INCF ?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #31 en: 17 de Febrero de 2011, 18:22:13 »
  Sí, creo que así debería funcionar bien
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 #32 en: 18 de Febrero de 2011, 18:36:33 »
Oigan me estoy volviendo loco como es que puedo declarar variables al inicio del programa que lleven guardadas direcciones de memoria EEPROM con las que quiero trabajar por ejemplo si quisiera trabajar con la direccion A, E1, FF como definiria esas 3 variables al inicio para despues que quiera leer en la eeprom solo tomo el valor de la variable, o no se puede?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #33 en: 18 de Febrero de 2011, 19:02:04 »
Oigan me estoy volviendo loco como es que puedo declarar variables al inicio del programa que lleven guardadas direcciones de memoria EEPROM con las que quiero trabajar por ejemplo si quisiera trabajar con la direccion A, E1, FF como definiria esas 3 variables al inicio para despues que quiera leer en la eeprom solo tomo el valor de la variable, o no se puede?

  No se puede hacer eso. Lee el datasheet del PIC en cuestión que siempre aparece un ejemplo de como leer y como escribir en la EEPROM.
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 #34 en: 18 de Febrero de 2011, 22:12:23 »
Tendra alguien un mini proyecto en ASM que grabe y lea en la EEPROM por lo menos en 2 direcciones diferentes que pueda compartir, no importa que eliminen todo el contenido importante  :oops:

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #35 en: 18 de Febrero de 2011, 22:14:07 »
Tendra alguien un mini proyecto en ASM que grabe y lea en la EEPROM por lo menos en 2 direcciones diferentes que pueda compartir, no importa que eliminen todo el contenido importante  :oops:

  No es nada difícil trabajar con la EEPROM. Vamos, un poco de voluntad
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 #36 en: 18 de Febrero de 2011, 22:48:15 »
  No es nada difícil trabajar con la EEPROM. Vamos, un poco de voluntad

Supongo que no debe ser dificil pero como son tantas cosas las que aun me fallan pues ya no se por donde empezar jeje repaso y repaso y solo logro grabar un registro en loa EEPROM y cuando leo la EEPROM del PIC siempre me pone los mismo datos de la EEPROM osea estos:
Código: ASM
  1. ;   EEPROM-Data
  2.     Org 0x2100
  3.     DE 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  4.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  5.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  6.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  7.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  8.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  9.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  10.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  11.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  12.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  13.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  14.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  15.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  16.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  17.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  18.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  19.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  20.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  21.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  22.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  23.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  24.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  25.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  26.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  27.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  28.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  29.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  30.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  31.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  32.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  33.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........
  34.     DE 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF   ;  ........

Y pues no puedo hacer mis conclusiones si estoy grabando en el lugar correcto o no, pero siempre me pone en 0x00 la direccion 0 y por eso ya no se como puedo hacerle tal vez sea algo insignificante pero ya me tiene un dia con eso :S

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #37 en: 18 de Febrero de 2011, 23:22:19 »
  Mostrá el código que estás usando para grabar.

  Mirando en la página 73 del datasheet, muestra claramente que hay que realizar los siguientes pasos para escribir un dato en la EEPROM

Código: ASM
  1. bsf eecon1,wren
  2. bcf intcon,gie
  3. btfsc intcon,gie
  4. goto $-2
  5. movlw 55h
  6. movwf eecon2
  7. movlw aah
  8. movwf eecon2
  9. bsf eecon1,wr
  10. bsf intcon,gie

  Por supuesto hay que darle cierto tiempo para que se graben los datos, y tal vez lo que te ocurre es que intentas grabar uno seguido al otro y por ello se genere algún error.
  También tenés que tener en cuenta de colocar el dato adecuado en EEDATA y EEADR.

  La secuencia que yo usaba para grabar y esperar a que termine de grabar antes de hacer otra cosa era algo así

Código: ASM
  1. bcf intcon,gie ; esta linea solo es necesaria si estaban habilitadas las interrupciones
  2. bsf eecon1,wren
  3. movlw 55h
  4. movwf eecon2
  5. movlw aah
  6. movwf eecon2
  7. bsf eecon1,wr ;activo la escritura
  8. btfsc eecon,wr ; testeo el bit wr, si se hace 0 es porque termino de escribir
  9. goto $-1
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 #38 en: 19 de Febrero de 2011, 06:03:37 »
Ok mas omenos asi es como estoy manejando el codigo y no logro grabar ni leer en mas direcciones de la EEPROM no se en lo que este mal haber si me pueden corregir y hechar a volar esto de una vez.

Código: ASM
  1. ;--------------------------- INICIO DEL PROGRAMA -----------------------------
  2.  
  3.         list      p=12F683
  4.         #include <p12F683.inc>
  5.  
  6.         errorlevel  -302
  7.         __CONFIG   _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSCIO
  8.  
  9.        
  10. ; initialize eeprom locations
  11.  
  12.         Org 0x2100                                         ; ESTAS 2 LINEAS LAS E PUESTO AQUI Y AL FINAL IGUAL NO ME A FUNCIONADO
  13.         DE 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF  ; Como pueden ver se supone que la direccion 3h contiene el valor 80h
  14.  
  15.  
  16.  
  17. ;Variables que estoy usando para para la EEPROM (leer, grabar, direccion, y direcciones)
  18.  
  19. DATOSEE                 equ     0x44
  20. DIRECCIONEE             equ     0x45
  21.  
  22. DireccionEEPROM1        equ     0x01
  23. ;DireccionEEPROM1       equ     h'1' ;La he declarado tambien de esta manera y no me a funcionado
  24. DireccionEEPROM2        equ     0x02
  25. DireccionEEPROM3        equ     0x03
  26.  
  27.  
  28. ;---------------- Estas son las rutinas que e usado para leer y grabar en la EEPROM
  29. LeerEE
  30.         bsf     STATUS, RP0
  31.         movf    DIRECCIONEE, w
  32.         movwf   EEADR
  33.         bsf     EECON1, RD
  34.         movf    EEDAT, W
  35.         bcf     STATUS, RP0
  36.         return
  37.  
  38.  
  39. GrabarEE
  40.         bsf     STATUS, RP0
  41.         movf    DATOSEE, w
  42.         movwf   EEDAT
  43.         movf    DIRECCIONEE, w
  44.         movwf   EEADR
  45.         bsf             EECON1,WREN
  46.         bcf             INTCON, GIE
  47.         btfsc   INTCON, GIE
  48.         goto    $-2
  49.         movlw   0x55
  50.         movwf   EECON2
  51.         movlw   0xAA
  52.         movwf   EECON2
  53.         bsf     EECON1, WR
  54. EsperarAGrabarEE
  55.         btfsc   EECON1, WR
  56.         goto    EsperarAGrabarEE
  57.         bcf     STATUS, RP0
  58.         bsf     INTCON, GIE
  59.         return
  60.  
  61.  
  62. ;Cuando voy a Grabar lo hago asi
  63.         movlw   0x10                    ;Un valor cualquiera que quiera guardar
  64.         movwf   DATOSEE                 ;Lo paso a la variable DATOSEE que defini al inicio
  65.         movf    DireccionEEPROM1, w     ;Cargo el acumulador con la direccion que se supone defini al inicio
  66.         movwf   DIRECCIONEE             ;Paso W a la variable que DIRECCIONEE que es la que se supone va a leer la rutina de GrabarEE
  67.         call    GrabarEE                ;Llamo la rutina de grabar
  68.  
  69.  
  70. ;Cuando leo en la EEPROM lo ago asi
  71.         movf    DireccionEEPROM1, w     ;Cargo en el acumulador la direccion que supuestamente contiene la variable DireccionEEPROM1
  72.         movwf   DIRECCIONEE             ;Paso el valor a DIRECCIONEE
  73.         call    LeerEE                  ;Finalmente llamo la rutina de leer en la EEPROM

Asi es como lo estoy haciendo pero no me da resultados :S

ALgo mas que me gustaria preguntarles es si un puerto de este PIC 12F683 puede usarse como entrada y que tambien sirva como salida o solo se puede definirce por una de las 2, para ser mas especifico tengo los puertos GP0 y GP1 declarados como salida pero con el transcurso del proyecto necesito que tambien me sirvan como entrada en un apartado del proyecto, puede eso ser posible?, y si es posible como los tendria que definir en el MAIN?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #39 en: 19 de Febrero de 2011, 09:36:46 »
  En tu código veo mal que estás cambiando al banco 1 (con la instrucción)

Código: ASM
  1. bsf STATUS,RP0

  ... y luego haces

Código: ASM
  1. movf DIRECCIONEE,W

  ... pero DIRECCIONEE está en el banco 0, por ende W no está tomando el verdadero valor de DIRECCIONEE.

  En cuanto a la consulta de cambiar el puerto de entrada a salida o viceversa, sí se puede. Así como lo configuraste la primera vez, lo podés volver a configurar dentro del programa.
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 #40 en: 19 de Febrero de 2011, 13:00:38 »
  En tu código veo mal que estás cambiando al banco 1 (con la instrucción)

Código: ASM
  1. bsf STATUS,RP0

  ... y luego haces

Código: ASM
  1. movf DIRECCIONEE,W

  ... pero DIRECCIONEE está en el banco 0, por ende W no está tomando el verdadero valor de DIRECCIONEE.

  En cuanto a la consulta de cambiar el puerto de entrada a salida o viceversa, sí se puede. Así como lo configuraste la primera vez, lo podés volver a configurar dentro del programa.


Código: ASM
  1. bsf STATUS,RP0
Pero en cuanto a esta linea en el mismo Data Sheet del PIC 12F683 esta especificada

Código: ASM
  1. movf DIRECCIONEE,W
Y esta linea yo la defini asi:

Código: ASM
  1. movf    DireccionEEPROM1, w
  2. movwf   DIRECCIONEE
Donde se supone que al inicio declare la variable  DireccionEEPROM1 y se cargo con la direccion de memoria 0x01, ya estoy hecho bolas demas


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #41 en: 19 de Febrero de 2011, 14:16:19 »
  Está bien que cambies al banco 1 porque los registros EECON1 y EECON2 están en dicho banco, pero tu variable DIRECCIONEE pertenece al banco 0, entonces no podes obtener los datos allí almacenados si estás trabajando en el banco 1
  Tu código debería quedar algo así...

Código: ASM
  1. bcf STATUS,RP0 ; me aseguro de estar en el banco 0 para trabajar con la variable DIRECCIONEE
  2. movf DIRECCIONEE,W ; guardo en W la dirección en la cual quiero escribir
  3. bsf STATUS,RP0 ; paso al banco 1
  4. movwf EEADR ; muevo al registro EEADR la direccion en la cual quiero escribir
  5. bcf STATUS,RP0 ; vuelvo al banco 0, para trabajar con la variable DATOSEE
  6. movf DATOSEE,W ; muevo a W los datos que quiero escribir
  7. bsf STATUS,RP0 ; vuelvo al banco 1
  8. movwf EEDAT; muevo al registro EEDAT el dato a escribir
  9. bcf INTCON,GIE ; deshabilito las interrupciones
  10. bsf EECON1, WREN ; habilito la escritura
  11. movlw 55h
  12. movwf EECON2
  13. movlw aah
  14. movwf EECON2
  15. bsf EECON1, WR ; comienzo la escritura
  16. btfsc EECON1,WR ; testeo para saber si termino la escritura
  17. goto $-1 ; si no termino vuelvo a la linea anterior
  18. ...
  19. ....
  20. ; si no voy a escribir mas....
  21. bsf STATUS,RP0 ; paso al banco 1
  22. bcf EECON1,WREN ; deshabilito la escritura
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #42 en: 19 de Febrero de 2011, 14:29:38 »
Una instrucción sumamente útil es banksel esta se utiliza para seleccionar el banco al que pertenece el registro que vamos a utilizar sin necesidad de saber exactamente a cual banco pertenece.

Por ejemplo:
Código: [Seleccionar]
banksel TRISB   ;selecciona el banco 1 ya que TRISB pertenece a ese banco
Produce el mismo resultado que:
Código: [Seleccionar]
bsf   STATUS,RP0  ;Pone a uno el bit RP0 del registro STATUS
bcf   STATUS,RP1  ;Pone a cero el bit RP1 del registro STATUS

Nota: Esta instrucción no ahorra espacio de programa ya que solamente es un equivalente.
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 #43 en: 19 de Febrero de 2011, 14:38:02 »
  Tiene razón el coleta bigluis. Yo no lo había mencionado ya que nunca la había utilizado pero sí la había visto en la ayuda del MPLAB.
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 #44 en: 19 de Febrero de 2011, 14:58:03 »
Ok entonces la instruccion:

bcf    STATUS, RP0
movf DIRECCIONEE, W
bsf    STATUS, RP0

Si quiero utilizar otra direccion de memoria tengo que estar cambiando el RP0 a RP1 o a cual?, entonce no me servira una sola rutina de GrabarEE para grabar en diferentes direcciones?