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

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #15 en: 16 de Febrero de 2011, 17:15:57 »
AngelGris no se si me pudieras dar el ejemplo un poco mas claro osea tu me dices que por ejemplo el valor de la fila1 columna1 osea el "5" lo guardarias en la direccion 10h y el siguiente de la misma fila1 que seria el "0" lo guardarias en la direccion 11h y por ultimo el siguiente de esa misma fila1 que seria el "D7" lo guardarias en la direccion 12h?.


  Claro, esa es la idea.


Y ahora si quiesiera Guardar los valores de la fila 2 empezaria en la direccion 20h de la EEPROM y para la fila3 en la direccion 30h?, no se si eso es lo que me quieras decir ya estoy un poco desesperado con esto.
Por cierto estuve buscando informacion clara en el datasheet del pic y no pude saver de que direccion inicia y en cual es la ultima que puedo usar para grabar en la EEPROM, gracias por responder.

  Yo no haría que la fila2 empieza en 20h, sino bien seguido del último dato de la fila1. O sea, si el valor3 de fila1 está guardado en 02h, el valor1 de fila2 lo guardaría en 03h.

  En cuanto a las direcciones de EEPROM, según la página 72 del datasseht van desde 00h hasta FFh
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 #16 en: 16 de Febrero de 2011, 17:36:26 »
  Yo no haría que la fila2 empieza en 20h, sino bien seguido del último dato de la fila1. O sea, si el valor3 de fila1 está guardado en 02h, el valor1 de fila2 lo guardaría en 03h.

Ok gracias viejo, ya te entendi pero como en este caso casi no voy a necesitar espacios de la EEPROM se me hace mas facil asi como te lo comenten yo que por ejemplo si quiero guardar los valores de la fila 1 empieze a usar la direccion 10h y si quiero guardar lo valores de la fila 2 empieze de la direccion 20h para llevar la secuencia de la fila con las memorias pero si entendi como tu me dices, ahora tengo declarado en las primeras filas de la programacion estas lineas, la verdad no se mucho que significan pero son con relacion a la EEPROM, ¿Crees que me afecte dejandola asi, o necesito cambiar algunos valores?

Código: [Seleccionar]
;   EEPROM-Data
    Org 0x2100
    DE 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00   ;  ..

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #17 en: 16 de Febrero de 2011, 18:52:05 »
  Si no me equivoco, eso es para que dichos datos queden en el archivo .hex, y por consiguiente cuando lo grabes en el PIC se van a grabar también los datos.
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 #18 en: 16 de Febrero de 2011, 19:14:53 »
Ok, entonces si omito esta linea no me afectara en nada?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #19 en: 16 de Febrero de 2011, 20:30:09 »
Ok, entonces si omito esta linea no me afectara en nada?

  En teoría no pasaría nada.... es cuestión de probar  :)
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 #20 en: 17 de Febrero de 2011, 00:49:51 »
Oigan ahi alguna instruccion que me sirva como para copiar el valor de una variable a otra porque me repase todas las instrucciones y no encuentro esa posibilidad, por ejemplo:
Tengo 2 variables
VARIABLE1 = h'10'
VARIABLE2 = h'5'

y que despues de hacer el copiado de la 1 a la dos me queden

VARIABLE1 = h'10'
VARIABLE2 = h'10'

Si uso el mov... pues la mueve, y si uso el ADD ps lo suma :( como puedo hacerle?

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #21 en: 17 de Febrero de 2011, 02:54:46 »
Los pic10 12 y 16 no la tienen siempre tienes que hacer lo siguiente:

Código: ASM
  1. movf variable1,w
  2. movwf variable2

creo que puedes usar tambien

Código: ASM
  1. movfw variable1
  2. movwf variable2

Si observas en ambos ejemplos siempre tienes que utilizar el registro de trabajo para realizar casi cualquier operación, es esta característica la que se conoce como ortogonalidad.

Los pic18 en adelante si la tienen es la siguiente:

Código: ASM
  1. movff variable1,variable2
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 bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #22 en: 17 de Febrero de 2011, 03:00:57 »
Una recomendación que te puedo dar es que no trates de comerte al mundo de un solo bocado, es decir, comienza de lo más básico y ve subiendo de poco a poco, te recomiendo que leas y práctiques los ejemplos que suky ha subido al foro y también que leas el libro Microcontrolador PIC16F84 desarrollo de proyectos del autor Enrique Palacios para mi es el mejor.

Un error que comete la mayoría de personas es querer aprenderlo todo de una sola vez y olvida que es imposible, así mismo creen que los grandes maestros lo son porque son unos genios, posiblemente lo sean  :D, pero la verdad es que les ha costado mucho llegar a donde estan y para ello se han esforzado mucho.

Suerte
 :-/
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 sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #23 en: 17 de Febrero de 2011, 03:15:40 »
Una recomendación que te puedo dar es que no trates de comerte al mundo de un solo bocado, es decir, comienza de lo más básico y ve subiendo de poco a poco, te recomiendo que leas y práctiques los ejemplos que suky ha subido al foro y también que leas el libro Microcontrolador PIC16F84 desarrollo de proyectos del autor Enrique Palacios para mi es el mejor.

Un error que comete la mayoría de personas es querer aprenderlo todo de una sola vez y olvida que es imposible, así mismo creen que los grandes maestros lo son porque son unos genios, posiblemente lo sean  :D, pero la verdad es que les ha costado mucho llegar a donde estan y para ello se han esforzado mucho.

Suerte
 :-/

Entiendo lo que me dices y creeme que si e leido mucho de hecho ese libro que comentas lo empeze pero justo ahora estoy editando un proyecto y ya me falta muy poco para terminarlo es por eso que no e tenido el tiempo de leer mas, pero es lo primero que hare terminando esto.

En cuanto a lo que me comentas bigluis eso pues es facil pero segun yo esos ejemplos lo que hace es mover los valores no?
Osea que si de variable1 la muevo al registro de trabajo "w" la variable1 quedara en 0x00 no?, es por eso que se me complico un poco, Gracias por tu respuesta men.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #24 en: 17 de Febrero de 2011, 09:12:12 »
.........
En cuanto a lo que me comentas bigluis eso pues es facil pero segun yo esos ejemplos lo que hace es mover los valores no?
Osea que si de variable1 la muevo al registro de trabajo "w" la variable1 quedara en 0x00 no?, es por eso que se me complico un poco, Gracias por tu respuesta men.

  No,  "movf variable, w" , lo que hace es copiar el valor de la variable a al registro W, pero la variable sigue manteniendo su valor
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 #25 en: 17 de Febrero de 2011, 12:19:34 »
.........
En cuanto a lo que me comentas bigluis eso pues es facil pero segun yo esos ejemplos lo que hace es mover los valores no?
Osea que si de variable1 la muevo al registro de trabajo "w" la variable1 quedara en 0x00 no?, es por eso que se me complico un poco, Gracias por tu respuesta men.

  No,  "movf variable, w" , lo que hace es copiar el valor de la variable a al registro W, pero la variable sigue manteniendo su valor

A ok eso no lo sabia, porque volvi a checar el manual de Leon y eso no me quedo claro, entonces para que me quede mas claro todas las intrucciones mov.... lo que hacen es copiar el valor, no borrar?.

Algo que siempre me da problemas es cuando uso el Call para llamar un Rutina y en ese block de codigo que llame vuelvo a llamar otra rutina digamos algo que aga demoras o algo parecido chico, pero esto siempre me da retrasos inesperados o simplemente no funciona como espero y lo que ago es mejor si llamo una rutina tener que generar el codigo que se necesite sin llamar otra rutina, entonces tambien tenia esa duda si hacer eso es posible o no, gracias y creo que va ir quedando un manual en este hilo ya de tanta duda :), les prometo en cuanto termine de editar este proyecto me pongo a terminar el manual del PIC 16F... que me han recomendado mucho

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #26 en: 17 de Febrero de 2011, 12:40:08 »
Se me paso comentarles tambien que por mas que leo las instrucciones XORLW, XORWF, IORWF, IORLW y todas esas de tipo logico que no se si hay mas no las uso porque hasta ahorita no e sabido bien como es que trabajan por ejemplo en el tutorial de Leon dice:

Código: [Seleccionar]
XORLW

Realiza la operación lógica XOR entre un literal o valor y el registro W. El resultado queda guardado en el registro W.
Ejemplo:

Código:
               XORLW        B'11000101'
Si antes de la instrucción W vale B'11111000', después de la instrucción W vale B'00111101'.


Pero de plano no se como hace las comparaciones y mas bien no puedo entender como es que funcionan.

Otra cosa que no e encontrado instruccion que pueda hacerlo es como comparar el valor de una variable con un valor o con otra variable como tipo if en los lenguajes de alto nivel, algo como los btfss o btfsc pero estos solo comparan 1 bit y lo que tuve que hacer en un ejemplo qu eme toco es tener que comparar un numero pero lo tuve que hacer bit por bit usando esas instrucciones btfs...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #27 en: 17 de Febrero de 2011, 13:23:59 »
  Para saber como trabajan las operaciones lógicas, tendrías que leer sobre electronica digital y las operaciones. AND, OR, NAND, NOR, XOR

  Para comparar una variable con cierto número lo que tenés que hacer es una resta y luego revisar el registro STATUS para saber el resultado de dicha operacion.

Código: ASM
  1. variable EQU 20h
  2.  
  3. movlw 10
  4. movwf variable
  5. ; si quiero comparar con el numero 5, puedo hacer lo siguiente
  6. movlw 5
  7. subwf variable,w ; hago la resta y almaceno en el resultado en w para no afectar la variable

  Luego hay que revisar los bits de Carry, Zero y creo que había otro más pero no lo recuerdo. Según el estado de dichos bits se puede saber si la variable es igual (en el caso de que la resta de 0, el bit Zero se pone en 1), Si la variable es mayor, creo que el bit de Carry quedaría en 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 #28 en: 17 de Febrero de 2011, 16:27:16 »
  Para saber como trabajan las operaciones lógicas, tendrías que leer sobre electronica digital y las operaciones. AND, OR, NAND, NOR, XOR

Ok es por lo cual jamas pude entenderle, bueno pues eso creo que si lo tendre que dejar para cuando me lea los manuales.  :)

Código: ASM
  1. variable EQU 20h
  2.  
  3. movlw 10
  4. movwf variable
  5. ; si quiero comparar con el numero 5, puedo hacer lo siguiente
  6. movlw 5
  7. subwf variable,w ; hago la resta y almaceno en el resultado en w para no afectar la variable

  Luego hay que revisar los bits de Carry, Zero y creo que había otro más pero no lo recuerdo. Según el estado de dichos bits se puede saber si la variable es igual (en el caso de que la resta de 0, el bit Zero se pone en 1), Si la variable es mayor, creo que el bit de Carry quedaría en 1.
[/quote]

Bueno creo que este ejemplo que me diste si lo entiendo, aqui mas que nada jugaria a saber si la variable afectada quedo en 0 despues de un subw.. comparandolo con "Z".
Pero el problema por decirlo asi que tengo es hacer la comparacion cuando estoy usando el ADDLW de manera que no se pase de cierta cantidad, ejemplo:

Si quiero que variable1 no pase de 19h como puedo hacer esa comparacion para que una ves que le alla sumado con ADDLW saber si se paso o no de 19h, y si se paso volver a dejarlo en 19h y si no se paso pues que se aplique correctamente el ADDLW, no se si me explique.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #29 en: 17 de Febrero de 2011, 17:23:11 »
Si quiero que variable1 no pase de 19h como puedo hacer esa comparacion para que una ves que le alla sumado con ADDLW saber si se paso o no de 19h, y si se paso volver a dejarlo en 19h y si no se paso pues que se aplique correctamente el ADDLW, no se si me explique.

  Tené en cuenta que las funciones que son SUBLW o ADDLW, restan o suman un número al registro W, no a una variable. Para trabajar con las variables son SUBWF Y ADDWF.

  Se podría resolver fácilmente de la siguiente manera

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
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas