Autor Tema: Inicio con PIC16F84A  (Leído 3443 veces)

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

Desconectado Pocopelo

  • PIC10
  • *
  • Mensajes: 13
Inicio con PIC16F84A
« en: 22 de Diciembre de 2009, 17:36:54 »
Hola a todos,

Acabo de empezar a programar este PIC, he leido mucho sobre el, pero no se por donde empezar para hacer el proyecto que quiero. Lo que quiero hacer es:

Por el puerto de entrada introducirle un numero en binario y en funcion de ese numero que salga uno especifico por el puerto de salida. Podrian indicarme a grandes rasgos como hacer esto y ya me ocupare yo de encontrar la forma de hacerlo.

Gracias y salu2.


Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Inicio con PIC16F84A
« Respuesta #1 en: 22 de Diciembre de 2009, 17:42:37 »
En que lenguaje piensas programas??
si es assembler este hilo
si es en C de CCS mira este
« Última modificación: 22 de Diciembre de 2009, 17:49:57 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Inicio con PIC16F84A
« Respuesta #2 en: 22 de Diciembre de 2009, 17:45:49 »
De todas formas, si utilizas el buscador seguro que encuentras mucha informacion para darte una idea de por donde empezar, que necesitas, lenguaje de programacion, programador,.........

fer.
Todos los días se aprende algo nuevo.

Desconectado Pocopelo

  • PIC10
  • *
  • Mensajes: 13
Re: Inicio con PIC16F84A
« Respuesta #3 en: 23 de Diciembre de 2009, 16:49:13 »
Creo que no me explique bien, quiero programar en el leguaje del PIC. Tengo el libro "MICROCONTROLADOR PIC 16F84A, desarrollo de proyectos" y he estado leyendo bastante. Yo lo que pretendo es que por el puerto A entre 0001001 por ejemplo y a esa entrada le corresponda en la salida 00000100; para otra entrada le correspondera otra salida, y asi etc. He probado ha hacerlo mediante una tabla pero se como empezar; es decir, para una unica entrada que le corresponde una unica salida.

No se si me he explicado bien esta vez.

Gracias y salu2.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Inicio con PIC16F84A
« Respuesta #4 en: 23 de Diciembre de 2009, 17:26:38 »
A ver Pocopelo,.

el lenguaje que entiende el micro es a base de 1 y 0 que unidos en grupos realizan unas funciones determinadas.
Como puedes comprender si existe alguna persona que programe de esa manera no estaria ni medio bien pagado. Por eso existen una serie de "lenguajes" que hacen mas facil la realizacion de programas para los micros.
Los hay de bajo nivel (proximos a lo que entiende el micro), nivel medio y de alto nivel(proximos al lenguaje humano).
Respescto al libro que indicas, la mayoria de la programacion está realizada en ASM=Ensamblador(bajo nivel), y es una serie de comandos(instrucciones) que luego necesitan ser traducidas a series de 1 y 0 para que el micro las entienda.

A la hora de aprender, desde mi punto de vista, habria que empezar a programas en ASM, de esta manera al ser un lenguaje muy proximo al lenguaje del micro, te permite tener un control muy exhaustivo del micro, ademas de se controla directamente cada una de sus posibilidades. De esta manera se aprende como funciona.

Mas adelante, lo normal es migrar a un lenguaje de mas alto nivel como puede ser: basic, C.....  Estos sistemas permiten realizar con pocas instrucciones o lineas de programa un monton de cosas, pero ademas de necesitarse tambien un traductor(compilador) de l codigo creado, son menos eficientes en el sentido de que necesitan mas memoria pues generan un codigo mas extenso. Todos tienen sus pros y sus contras. Al final es el usuario el que segun sus gustos o preferencias el que se decide por un lenguaje u otro.

Fermin
« Última modificación: 23 de Diciembre de 2009, 17:40:48 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Inicio con PIC16F84A
« Respuesta #5 en: 23 de Diciembre de 2009, 17:33:58 »
Como continuacion:

En es e libro, si has lesido bien, te indican como esta constituido el micro y te enseñan a configurar los didtintos elementos de que dispone. Por ejemplo:

-Si quieres que un puerto(pines del pic) sean entrada tendras que configurar cada uno de ellos con un 1 y si son de "salida" pues tienes que configurar el pin indicado con un 0. Esto se realiza con los registros "TRIS".
-Tendras que leer el puerto y quizas guardarlo en algun registro auxiliar (creador ti, en una determinada posicion de memoria)
-Quizas quieras realizar alguntipo de operacion con ese registro
- Escribir en algun pin una señal como salida(encender un led, por ejemplo)

Lo mmejor que puedes realizar es ir añadiendo lo que vas escribiendo y seguro que te lo vamos corrijiendo. Asi aprenderias mejor y antes que si te realizamos el programa.
Esperamos tus noticias

fermin
Todos los días se aprende algo nuevo.

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Inicio con PIC16F84A
« Respuesta #6 en: 23 de Diciembre de 2009, 17:35:23 »
Pocopelo, tienes que ser más especifico cuando dices el lenguaje del pic, es como si una persona que habla portugués le dices el lenguaje de las personas. El lenguaje al que tu te refieres es el lenguaje ensamblador. Para hacer lo que tu pretendes es muy fácil implementarlo mediante tablas.


te doy un trozo de código de ejemplo:
Código: ASM
  1. MOVF PORTB,W ;cojemos el numero introducido en el PORTB
  2. ANDLW B'00001111' ;Hago una AND para coger solo los 4 bits más bajos del PORTB
  3. CALL NUMERO ;Buscamos que numero le corresponde
  4. MOVWF PORTA ;Ponemos en el PORTA lo que hay en W
  5.  
  6. NUMERO:
  7.  
  8. ADDWF PCL,F ;Buscamos en la tabla el numero
  9.  
  10. RETLW 'NUMERO_0' ;Retornamos de subrutina y le devolvemos el NUMERO_0 a W
  11. RETLW 'NUMERO_1' ;...
  12. RETLW 'NUMERO_2' ;... mas de lo mismo
  13. RETLW 'NUMERO_3'
  14. RETLW 'NUMERO_4'
  15. RETLW 'NUMERO_5'
  16. RETLW 'NUMERO_6'
  17. RETLW 'NUMERO_7'
  18. RETLW 'NUMERO_8'
  19. RETLW 'NUMERO_9'
  20. RETLW 'NUMERO_10'
  21. RETLW 'NUMERO_11'
  22. RETLW 'NUMERO_12'
  23. RETLW 'NUMERO_13'
  24. RETLW 'NUMERO_14'
  25. RETLW 'NUMERO_15'

Así seria un ejemplo del código con 4 bits bajos del PORTB.

Si introducimos en el PORTB 00000100 y en la salida queremos tener un 10111011 pues lo que tenemos que hacer es sustituir en la parte de código donde pone "NUMERO_4" y poner B'10111011' fácil no ?


Salu2.
Share the world !

Blog's

http://www.area0x33.com

Desconectado Pocopelo

  • PIC10
  • *
  • Mensajes: 13
Re: Inicio con PIC16F84A
« Respuesta #7 en: 23 de Diciembre de 2009, 20:23:40 »
Muchas gracias a todos por vuestras amables respuestas. Efectivamente el lenguaje que estoy utilizando es el ASM. El programa que he estado estudiando para hacer lo que quiero es el que ha puesto jim_17, porque creo que hace lo que yo quiero, pero el pediros ayuda es porque hay una parte que no entiendo que es esta:

ANDLW B'00001111' ;Hago una AND para coger solo los 4 bits más bajos del PORTB

esta es la tabla que yo necesito:

ENTRADA       SALIDA             
0000              000     
0001              101
0010              001
0011              110
0100              010
0101              100
0110              100
0111              100
1000              100
1001              100

Este es el programa que he hecho, es muy parecido al hecho por ti, jim_17, pero aunque el ejemplo del libro sobre la instruccion andlw lo entiendo perfectamente no entiendo como se aplica aqui.

; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

; ZONA DE CÓDIGOS ********************************************************************

   ORG    0               ; El programa comienza en la dirección 0.
Inicio
   bsf      STATUS,RP0         ; Acceso al Banco 1.
   clrf           TRISB            ; Las líneas del Puerto B se configuran como salida.
   movlw   b'00011111'         ; Las 5 líneas del Puerto A se configuran como entrada.
   movwf   TRISA
   bcf      STATUS,RP0         ; Acceso al Banco 0.
Principal
   movf           PORTA,W            ; Lee el valor de las variables de entrada.
   andlw   b'00001111'         ; Se queda con los cuatro bits de entrada.
   addwf   PCL,F            ; Salta a la configuración adecuada.
Tabla
   goto   Configuracion0
   goto   Configuracion1
   goto   Configuracion2
   goto   Configuracion3
   goto   Configuracion4
   goto   Configuracion5
   goto   Configuracion6
   goto   Configuracion7
Configuracion0
   movlw    b'00000000'         ; (Configuración 0).
   goto   ActivaSalida
Configuracion1
   movlw    b'00000101'         ; (Configuración 1).
   goto   ActivaSalida
Configuracion2
   movlw    b'00000001'         ; (Configuración 2).
   goto   ActivaSalida
Configuracion3
   movlw    b'00000101'         ; (Configuración 3).
   goto   ActivaSalida
Configuracion4
   movlw    b'00000010'         ; (Configuración 4).
   goto   ActivaSalida
Configuracion5
   movlw    b'00000100'         ; (Configuración 5).
   goto   ActivaSalida
ActivaSalida
   movwf   PORTB            ; Visualiza por el puerto de salida.
   goto    Principal

   END

Disculpad pero no se como meter el codigo dentro de la ventana como ha hecho jim_17.

Gracias y salu2.

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Inicio con PIC16F84A
« Respuesta #8 en: 24 de Diciembre de 2009, 08:13:03 »
Si tranquilo, ahora te explico el funcionamiento de la función.


Cuando haces una AND entre A i B que sucede ?

Si A es igual a 0 tengamos lo que tengamos en B, siempre nos dará 0 no ?

Si A es igual a 1 siempre tendremos el mismo valor que haya en B no ?

Ejemplo con algebra de boole.

0·B = 0

1·B= B


Lo que hacemos para seleccionar los 4 bits bajos es una and del portb con '00001111' entonces seria así:

and PORTB con '00001111'

b0·1=b0
b1·1=b1
b2·1=b2
b3·1=b3
b4·0=0
b5·0=0
b6·0=0
b7·0=0

entonces en W obtendriamos 0,0,0,0,b3,b2,b1,b0

No se si me he explicado bien, un saludo.

Si quisieras seleccionar los 5 bits mas bajos pues pondrias 5 unos en la and y asi como tu quieras...

Para meter el codigo como lo hice yo tienes una ventana arriba y a la derecha que pone Geshi. Entonces tienes que cambiarlo y seleccionar ASM, te saldrá una cosa así:
[ code=asm]  Aquí va tu código [ /code]


Un saludo.
Share the world !

Blog's

http://www.area0x33.com

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Inicio con PIC16F84A
« Respuesta #9 en: 24 de Diciembre de 2009, 13:38:16 »
Mi consejo si queres emepzar es usar el PIC16F628 ya q trae osc interno, seria la version mas nueva del 16F84
En cuanto al lenguaje, proba con el PIC SIMULATOR IDE es una masa!! requete facil

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Inicio con PIC16F84A
« Respuesta #10 en: 24 de Diciembre de 2009, 14:23:00 »
Para empezar no está mal, pero te aconsejaria el utilizar la instruccion "GOTO" lo menos posible. Al final te vas a complicar y no vas a poder seguir correctamente la secuencia del programa desarrollado. Pero para depurar y realizar mas eficiente tu programa ya lo irasviendo poco a poco.
Todos los días se aprende algo nuevo.

Desconectado Pocopelo

  • PIC10
  • *
  • Mensajes: 13
Re: Inicio con PIC16F84A
« Respuesta #11 en: 24 de Diciembre de 2009, 17:21:48 »
Muchas gracias jim_17 por tu explicación. Ahora creo que he entendido con tu ejemplo, el significado de tomar los 4 bits mas bajos; pero sigo sin tener claro lo siguiente: dada una entrada por ejemplo 0010 por el puerto A que esta en la tercera linea, como sabe el PIC que tiene que ir a la configurancio2 de mi programa y sacar por el puerto B 001 que es la salida en la tercera linea?.

Siento molestarte tanto, pero hasta que no lo entienda no me quedaré tranquilo.

Gracias y salu2


Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Inicio con PIC16F84A
« Respuesta #12 en: 25 de Diciembre de 2009, 08:28:08 »
Segun creo con la instruccion movf portA,W estas leyendo el puerto despues con andlw te quedas con los 4 bits mas bajos y con el resultado y la instruccion addwf pch,f se busca el resultado que coincida con ella y segun eso se pone el resultado en la salida.

Fer.
Todos los días se aprende algo nuevo.


 

anything