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

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

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Dolor de cabeza con PIC 12F683...
« en: 11 de Febrero de 2011, 21:22:21 »
Hola a todos, primero que nada permitanme presentarme con ustedes porque soy nuevo en la comunidad y felicitarlos porque veo mucha gente con potencial en la programacion con muy buenos proyectos, por eso espero puedan ayudarme con algo dejen les cuento mi problema.
Resulta que tengo algunos PIC 12F683 que e usado para unos proyectos usando unos HEX que me encontre por internet pero ahora que quiero aprender a programarlos se me aconvertido en un dolor de cabeza, despues de buscar informacion en el foro solo encontre ejemplos en C y en BASIC pero yo quiero empezar desde abajo con el ASM y ejemplos con este lenguaje no encontre, me e leido todo el tutorial de Leon Pic (ASM desde 0) y en base a eso y a los ejercicios que van haciendo con los PIC 16F... trate de hacer prender por lo menos un LED cuando presionara un Push Botton pero parece que me fue imposible, les anexo el codigo que hice en MPLAB que se que esta mal y les anexo un diagrama que hice en FlowCode que por cierto funciona en el simulador pero en la protoboar no, les doy las gracias de antemano y si alguien puede ayudarme se lo agradecere.
Código: [Seleccionar]
;Declarando PIC

list p=12F683
#include <p12F683.inc>

__CONFIG   _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSCIO

; Declarando Variables
LED equ 5
Pulsador equ 3


Reset

ORG 0x00
goto inicio
ORG 0x004


inicio
bcf LED

bucle
btfsc Pulsador
goto apagar
bsf LED
goto bucle

apagar
bcf LED

end

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #1 en: 12 de Febrero de 2011, 14:57:32 »
Falta que configures los pines del puerto como entradas o como salidas, también esta mal esa parte cuando apagas el LED ya que jamás se volvería a encender y como recomendación final deberías declarar los pines del LED y Pulsador con la directiva #define.

Código: [Seleccionar]
list      p=12F683        ; list directive to define processor
#include <p12F683.inc>    ; processor specific variable definitions

errorlevel  -302          ; suppress message 302 from list file

__CONFIG   _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

; Declarando Variables
#DEFINE LED GPIO,5 ; Asignamos el pin GPIO,5 a LED
#DEFINE Pulsador GPIO,3 ; Asignamos el pin GPIO,3 a Pulsador

;**********************************************************************
ORG     0x000             ; processor reset vector



goto inicio
ORG 0x004


inicio
banksel TRISIO ; Seleccionamos el banco al que pertenece TRISIO (Banco 1)
bcf LED ; Ponemos como salida el pin correspondiente al LED (TRISIO,5)
banksel GPIO ; Seleccionamos el banco al que pertenece GPIO (Banco 0)

bucle
btfsc Pulsador; Salta si esta inactivo el Pulsador (GPIO,3)
goto apagar ; de lo contrario salta hacia la etiqueta apagar.
bsf LED ; Enciende el LED (GPIO,5 = 1)
goto bucle ; salta hacia la etiqueta bucle

apagar
bcf LED ; Apaga el LED (GPIO,5 = 1)
goto bucle ; Salta hacia la etiqueta bcle

END                       ; directive 'end of program'
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 El_cuarenton

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #2 en: 12 de Febrero de 2011, 20:51:01 »
Saludos sQs.

Veo que estas aprendiendo desde lo mas basico, te recomiendo la lectura del libro "Microcontrolador pic16f84 desarrollo de proyectos del señor Enrique Palacios". Es bastante simple y de seguro te va a ayudar su lectura. Buscalo que es simple de encontrar y bienvenido al mundo de los microcontroladores.

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #3 en: 13 de Febrero de 2011, 00:58:20 »
Gracias por su ayuda, ese libro que comentas le di una ojeada y la verdad que si esta muy bueno pero como me puse a intentar programar este PIC me fallan muchas cosas que por ejemplo este solo tiene puerto A y los 16F... cuantan con mas puertos y e batallado un poco con eso. Ahora si no es mucho abusar de su confianza no se si puedan aclararme algo.
Quiero guardar en memoria EEPROM supongo que es la que no se borra aunque se deje de suministrar corriente al PIC, encontre unas rutinas para guardar y leer datos de la memoria si pueden verlas.

ESCRIBIR EN MEMORIA:
Código: [Seleccionar]
Write
bsf    STATUS, RP0
movwf    EEDAT
movlw    0x02
movwf    EEADR
bsf    EECON1, WREN ;Enable write
bcf    INTCON, GIE ;Disable INTs
btfsc    INTCON, GIE ;See AN576
goto    $-2
movlw    0x55    ;Unlock write
movwf    EECON2
movlw    0xAA
movwf    EECON2
bsf    EECON1, WR    ;Start the write
WaitForEEWrite
btfsc   EECON1, WR ;wait for hardware to clear (done writing)
                goto    WaitForEEWrite
bcf    STATUS, RP0 ;Bank0
bsf    INTCON, GIE ;Enable INTS
    return

LEER EN MEMORIA:
Código: [Seleccionar]
Read
bsf     STATUS    , RP0 ;Bank1
movlw 0x02
    movwf   EEADR
    bsf     EECON1    , RD ;start read
    movf    EEDAT    , W
bcf     STATUS    , RP0 ;Bank0
    return

La gran duda que tengo es por ejemplo que con esta rutina leo y grabo algun dato pero en un espacio de memoria, si por ejemplo quiero almacenar 4 datos diferentes en diferentes localidades de memoria que tengo que cambiar o como le ago para que no me la guarde en una que ya esta guardada, digamos que usar 4 localidades de memoria diferentes donde lea y guarde, ¿Es necesario hacer las cuatro rutinas cambiando algun dato o con la misma rutina es posible?, estoy un poco confundido con esto, y por ejemplo en este caso que el valor de cual variable de todas las que estan ahi es la que va a grabar en memoria, no se alguien que tenga conocimiento avanzados en eso pueda explicarme un poco como podria hacerle y disculpen estar preguntando cosas que supongo han de ser basicas para ustedes.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #4 en: 13 de Febrero de 2011, 11:26:14 »
Hola, fijate si con esto se entiende... por ejemplo si quieres grabar algo en la posicion 02, colocas este valor en DIRECCION, luego cargas BYTE con el dato a grabar....  CALL GRABAR_EE y ya esta :mrgreen:, luego cambias la direccion y el dato y puedes grabar en otra direccion... se entiende?



Código: ASM
  1. ;****************************************************************
  2. GRABAR_EE
  3.         bsf STATUS,RP0 ;Bank 1
  4.         MOVF    DIRECCION,W     ;TOMA la posicion a grabar, que colocamos en DIRECCION
  5.         MOVWF   EEADR
  6.         MOVF    BYTE,W                     ;en el registro BYTE, cargamos el dato a grabar
  7.         MOVWF   EEDATA
  8.         bsf EECON1,WREN ;Enable write
  9.         bcf INTCON,GIE ;Disable INTs
  10.         movlw 55h ;Unlock write
  11.         movwf EECON2 ;
  12.         movlw 0XAA      ;.170 ;AAH
  13.         movwf EECON2 ;
  14.         bsf EECON1,WR ;Start the write
  15.         bsf INTCON,GIE ;Enable INTS
  16.  
  17. ESCRCOMPLETA
  18.         BTFSC   EECON1,WR       ;BYTE ESCRITO?
  19.         GOTO    ESCRCOMPLETA
  20.         BCF     STATUS,RP0
  21.         RETURN
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #5 en: 13 de Febrero de 2011, 16:05:35 »
Ok a la variable DIRECCION la que vamos a cargar antes antes de llamar la rutina con la direccion de memoria que queremos grabar, pero el valor que quiero grabar entonces va cargado en BYTE?, BYTE seria otra variable o BYTE es una instruccion de ASM  :oops: sorry si es una pregunta tonta, y para hacer la rutina de leer siguiendo con tu ejemplo seria algo asi?

Código: [Seleccionar]
LEER_EE
bsf STATUS, RP0 ;Bank1
movf DIRECCION,W ;Carga la direcion de memoria en el acumulador
movwf   EEADR
bsf     EECON1, RD ;Empieza a leer
movf    EEDAT, W
bcf     STATUS, RP0 ;Bank0
return

Despues que llame esta rutina LEER_EE el valor que obtuvo de la memoria me lo llevara en "w"?

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #6 en: 13 de Febrero de 2011, 16:44:28 »
asi es, correcto, solo que escribiste mal, es eedata

Byte es un registro creado por nosotros, puedes ponerle otro nombre ok?

Saludos
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #7 en: 13 de Febrero de 2011, 17:15:24 »
Muy bien parece que voy mejorando  :) cualquier problema que me atore les comento, gracias todopic y a todos por su ayuda.

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #8 en: 15 de Febrero de 2011, 04:20:34 »
Parece que funciono a la perfeccion el grabar y leer en la EEPROM  :) gracias por la ayuda, ahora si me pueden sacar de estas dudas.

Si declaro una variable al inicio por ejemplo (VARIABLEX  equ  0x34) sabemos que se esta alojando en la casilla 34h de la memoria del PIC pero el valor que toma por defaul tambien es 34h (D'52')?, o por default tendra valor 0?.
La otra duda es que hacer operaciones que se requiera usar decimales como 5.3 + 4.6, eso es imposible en ASM?, porque en cuanto a los valores hexadecimales todos son enteros que es lo que se puede hacer en estos casos. Creo que ya les voy a deber la cena a todos con tanta pregunta.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #9 en: 15 de Febrero de 2011, 09:59:28 »
  Hacer operaciones con números reales no es imposible en ASM pero sí muy engorroso. En el sitio de microchip hay algunos documentos que explican como trabajar con número reales en ASM.
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 #10 en: 15 de Febrero de 2011, 11:18:46 »
Citar
pero yo quiero empezar desde abajo con el ASM...
:shock:
eso no es empezar desde abajo, sin embargo es la mejor manera de comenzar, ya que aon este lenguaje no solo aprends a programar si no que tambien comprendes la estructura de los micros y el manejo de sus registros, si dominas el ensamblador cualquier otro lenguaje sera mucho mas facil, te lo digo por expeiencia, en mi caso estube usando el ensamblador cerca de un año y la verdad nunca utilice ni basic ni C por miedo al cambio y por pensar que era lo mas dificil, pero cuando use C por primera vez, a la semana ya habia hecho un programa muy complejo que hasta la fecha despues de casi dos años esta funcionado al 100%,y lo mejor de todo es que es mucho pero mucho mas facil que el ensamblador, tambien debes aprender a diferenciar los lenguajes y ver las ventajas y desvntajas de cada uno y saber cuando usar uno y cuando usar el otro.

Saludos,suerte y mucha paciencia.
Visiten: www.xbot.es/ezkybel tengo tutoriales para pics con visual basic...:)

Desconectado sQs

  • PIC10
  • *
  • Mensajes: 47
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #11 en: 16 de Febrero de 2011, 08:11:38 »
Hola de nuevo molestandoles, que tengo un problema que ya le di vueltas al goggle y no se como puedo hacerlo o mas bieno no supe como buscarlo, pero quiero hacer lo siguiente si me pudieran dar la mano.
Quiero guardar algo asi como una lista que sea digamos en 3 columnas y necesitare 8 filas pero aqui pongo 4 para el ejemplo.

--------------- LISTA -----------------
valor1    |    valor2    |    valor3    |
----------------------------------------
   5        0          D7
   8        4          D3
  20        9          CE
  13        8          FF
----------------------------------------

Como puedo hacer en este caso si digamos que de la EEPROM leo el valor 5 y que me de los otros 2 valores que estan relacionados con el 5, no se si me explique bien pero espero que si porque ya me hoze bolas.  :(

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dolor de cabeza con PIC 12F683...
« Respuesta #12 en: 16 de Febrero de 2011, 09:00:59 »
  Yo guardaría los valores de cada fila de manera continua. Suponiendo que empiezo a guardar en la dirección 10h, dicha dirección va a tener el "valor1" de "fila1", luego el próximo corresponderá con "valor2" de la "fila1", después "valor3" de "fila1". El siguiente corresponderá a "valor1" de "fila2" y así sucesivamente.
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 #13 en: 16 de Febrero de 2011, 16:07:10 »
Yo creo que el lenguaje ensamblador es útil si quieres conocer el funcionamiento interno del dispositivo, y si quieres que tu código sea eficiente. Para mí, es mejor comenzar con lenguaje C y a medida que vayas adentrandote en el tema aprendas lo básico sobre ASM.

Ciertamente yo aprendí a trabajar con los PIC con ASM, pero solamente lo básico luego me pasé a los lenguajes de alto nivel ya que todo es más fácil, pero utilizo los conocimientos de ASM para hacer que mis códigos sean eficientes y cuando el lenguaje de alto nivel no puede resolver el problema.

Pero de todos modos te deseo 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 #14 en: 16 de Febrero de 2011, 16:21:56 »
Efectivamente el lenguaje C es mucho mas sencillo de hecho ya e trabajado con el lenguaje C pero no para programacion de PIC, pero pues quiero conocer a fondo lo mas que se puedo ASM y luego pasarme a Basic y por ultimo a C, y 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?.
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.


 

anything