Autor Tema: Tutorial para PIC18  (Leído 39698 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Tutorial para PIC18
« en: 18 de Abril de 2006, 02:57:45 »
Hola amigos

Como ya usé la mayoría de módulos y hardware que traen los PIC16 y los PIC12 me parece que ya debo empezar a usar los PIC18. Hace como 2 años pedí a Microchip el PIC18F452 y hasta ahora no lo he usado.

Me preguntaba si alguien tiene una guía o tutorial sobre los PIC18 con ejemplos, explicaciones y toda la cosa para iniciarse en su programación ensamblador. Quiero usar ensamblador para después pasar a lenguaje C (CCS o C de Microchip) y saber que está haciendo el PIC a nivel máquina.

Si tienen de preferencia algún pdf o doc sobre el PIC18F452 será mejor para mi. La hoja de características es bueno, pero que mejor que una guía paso a paso para digerir lo nuevo.

Gracias  :-/

- Santiago

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #1 en: 18 de Abril de 2006, 08:28:03 »
Hola amigos

Como ya usé la mayoría de módulos y hardware que traen los PIC16 y los PIC12 me parece que ya debo empezar a usar los PIC18. Hace como 2 años pedí a Microchip el PIC18F452 y hasta ahora no lo he usado.

Me preguntaba si alguien tiene una guía o tutorial sobre los PIC18 con ejemplos, explicaciones y toda la cosa para iniciarse en su programación ensamblador. Quiero usar ensamblador para después pasar a lenguaje C (CCS o C de Microchip) y saber que está haciendo el PIC a nivel máquina.

Si tienen de preferencia algún pdf o doc sobre el PIC18F452 será mejor para mi. La hoja de características es bueno, pero que mejor que una guía paso a paso para digerir lo nuevo.

Gracias  :-/

- Santiago

migsantiago no tengo un tutorial, de hecho yo aprendí con las application notes en los 16F (de hecho no es la mejor forma pero fue la que me tocó a mi en tiempos en que internet no era tan comun y accesible).   Luego la migracion a los 18F fue muchisimo más fácil, es más facil pasar de los 16F a los 18F que viceversa.

Los 18F tienen aún mas cosas y son mucho mas potentes, los he programado poco en ensamblador, de hecho los programo en C18 porque los firmware que me tocaron hacer eran bastante complejos en la parte matemática y lógica en la cual en ensamblador se hace bastante tediosa la programación. 

Una vez que uses los 18F rara vez pasaras a los 16F salvo que los costos lo justifiquen :)

Un 18F452 por ejemplo, tiene casi el mismo precio que un 16F877 pero tiene el doble de ram, de program memory (16Kwords , 32Kbytes), corre al doble de Mips (40Mhz) , y el código en C generado para ellos es muy óptimo.  Lo bueno de los 18F es que no tienes bancos de memoria de programa! asi que te olvidas de seleccionar la página antes de un call o un goto :) :)

Te quería comentar que de todas formas te puedo echar una mano si no entiendes algo, como te dije antes no he visto tutoriales al respecto pero sí varios application notes que te pueden ayudar a dar los primeros pasos.

Si vienes del C, el cambio será importante por lo cual te aconsejo paciencia :)  :lol: :lol:

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #2 en: 18 de Abril de 2006, 23:00:25 »
Gracias Maunix.

Tendré en cuenta la ayuda que me ofreces.  :wink:

Por ahora adjunto un tutorial con ejemplos realizado por Andrés Prieto-Moreno Torres.

Curso compilador C18.pdf
curso compilador c18 - ejemplos.rar
http://www.4shared.com/file/9622385/215c2dc/Curso_C18.html
« Última modificación: 28 de Enero de 2007, 12:36:32 por migsantiago »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #3 en: 19 de Abril de 2006, 08:15:08 »
Gracias Maunix.

Tendré en cuenta la ayuda que me ofreces.  :wink:

Por ahora adjunto un tutorial con ejemplos realizado por Andrés Prieto-Moreno Torres.

Curso compilador C18.pdf
curso compilador c18 - ejemplos.rar
http://www.4shared.com/dir/251403/ddb5213f/Todopic.html

Ah bien, te habia entendido que querias empezar con el ensamblador.  :) :)

Si quieres también te puedo ayudar con el C18, no soy experto pero he hecho alguna que otra cosa.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

adbensi

  • Visitante
Re: Tutorial para PIC18
« Respuesta #4 en: 19 de Abril de 2006, 09:51:03 »
Soy una esponja del C18 Compiler, los exemplos és excelente!
Gracias Santiago!!! Parabéns!! Saludos! Alexandre.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #5 en: 19 de Abril de 2006, 13:27:38 »
Sí Maunix, quiero empezar con ensamblador, pero hasta ahora solo he encontrado ese tutorial de C18, no por eso no lo iba a publicar.  :)

Voy a seguir buscando y lo que encuentre lo pego aquí. Si no encuentro más sobre ensamblador, empezaré con la hoja de características.

Lo bueno es que Abdensi los está aprovechando.  :wink:

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #6 en: 24 de Abril de 2006, 19:21:36 »
Hola

Leyendo la hoja del PIC18F452 me encuentro con algo nuevo para mi: PORTA, TRISA y ¿LATA?

¿Para qué sirve el LATA? Ahí dice que:

The Data Latch register (LATA) is also memory
mapped. Read-modify-write operations on the LATA
register reads and writes the latched output value for
PORTA.

Pero si sirve para leer-modificar-escribir el latch de porta, ¿para qué se agregó si porta y trisa ya existen?  :z)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #7 en: 24 de Abril de 2006, 23:09:26 »
Hola

Leyendo la hoja del PIC18F452 me encuentro con algo nuevo para mi: PORTA, TRISA y ¿LATA?

¿Para qué sirve el LATA? Ahí dice que:

The Data Latch register (LATA) is also memory
mapped. Read-modify-write operations on the LATA
register reads and writes the latched output value for
PORTA.

Pero si sirve para leer-modificar-escribir el latch de porta, ¿para qué se agregó si porta y trisa ya existen?  :z)

La explicación no es tan obvia , pero ahi trato de explicar a ver si se entiende.

Cuando se usa uun microcontrolador de gran velocidad, es comun que una señal a la salida no se establezca siempre en un ciclo de reloj.  Entonces por ejemplo si hacemos

1) bsf PORTA,0

En el simulador lo vemos de inmediato pero en el hardware eso tarda un tiempo.

La instrucción bsf, en realidad hace un read/modify/write. 

Si en la instruccion siguiente hacemos

2) bsf PORTA,1

Puede que el PORTA,0 aún no sea un 1, con lo cual el resultado esperado que es que el PORTA,0 y el PORTA,1 estén en 1, no será asi.  El PORTA,0 quedará sobreescrito con un 0 y el PORTA,1 con un 1.

De esa forma tendremos como salida el 01.

El LATCH viene a solucionar esto.  Al setear el LATCH,  nos despreocupamos de esta situación.  Entonces, seteamos el latch y el latch retiene el dato en el valor seteado, no importa si afuera se setea enseguida o si tarda algunos microsegundos. 

Por eso para salidas, conviene usar el LATCH, osea los registros LATx


Espero haber sido claro.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #8 en: 25 de Abril de 2006, 00:13:12 »
Interesante.

¿Qué tan malo es ese retraso? ¿Hay forma de calcularlo? ¿Eso mismo sucede en un PIC16 corriendo a 20MHz?

Me parece algo negativo que se presente ese retraso de activaciones.  :?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #9 en: 25 de Abril de 2006, 08:18:21 »
Interesante.

¿Qué tan malo es ese retraso? ¿Hay forma de calcularlo? ¿Eso mismo sucede en un PIC16 corriendo a 20MHz?

Me parece algo negativo que se presente ese retraso de activaciones.  :?

¿Qué tan malo es ese retraso?
Es malo o no dependiendo de tu aplicación.  Si usas mucho el bsf y tu circuito además tiene cargas muy capacitivas la demora pudiera ser de algunos microsegundos y si además seteaste otro pin del mismo puerto en una instrucción subsiguiente la salida tendrá un valor 'no deseado'.  Como los cálculos se complican bastante es que uno termina usando los famosos simuladores basados en modelos Spice.  Si tienes en cuenta estas cosas, jamás tendrás problemas.  De hecho en la mayoría de los circuitos no se debiera notar problema alguno.  Lo que ocurre es que a mayores Mhz, mayores probabilidades que una carga capacitiva haga que la señal de salida no se estabilice en un ciclo de instrucción que es tipicamente 100ns o menos (ya que recordar que internamente la operación se produce en 4 ciclos de clock).

¿Hay forma de calcularlo?
En realidad es muy dependiente del hardware y del hardware del pic sabemos poco y nada. Solo sabemos que puede entregar 25mA pero no las características exactas.  Si simulas que el pin del pic es una fuente de corriente ideal de 25mA, el tiempo que tarde en ponerse en alto o bajo dependerá de la carga RC o LC o lo qeu sea que tengas a la salida.  Si usas solo resistencias la cosa es mas simple y no creo que tengas mayores inconvenientes.

¿Eso mismo sucede en un PIC16 corriendo a 20MHz?
Claro, ocurre en cualquier IC.  No es 'culpa' de los pics, es la electrónica misma.  Simplemente una señal que uno la pone a 5V no se pone a 5V instantaneamente, tarda un tiempo.

En los 16F si uno usa unas salidas algo 'cargadas' con componentes que tengan su señales de esa forma, lo que se hace es usar un 'shadow register' .  Uno setea en ese registro lo que quiere 'sacar' por el puerto.  Luego ese registro se mueve al puerto.  Entonces, uno si quiere poner en alto o bajo el puerto lo hace con ese shadow el cual a su vez lo pone en la salida.  Con el pasar de los useg si uno quiere setear el pin de al lado , vuelve a setear el registro shadow y lo vuelve a mover al puerto. 

El registro shadow es una variable en memoria que nosotros mismos preparamos.  Los 18F, 24F y dsPIC nos alivian de esa tediosa tarea con los latchs.

Me parece algo negativo que se presente ese retraso de activaciones.  :?
Es tan negativo o positivo como la electrónica misma.  Es lo mismo que porqué un pic no puede correr a 200Mhz, o porque un A/D de 100Msps salen tan caros.  Precisamente por esto.  Porque si bien en la teoría uno cree que todo es inmediato en la práctica todo se lleva retrasos.  Lo que se hace es que la variable más lenta del proceso sea lo suficientemente rápida para garantizar la máxima velocidad.

Te doy otro ejemplo para que te tranquilices.  Has ¿oido hablar de los circuitos buffer?.  Supongo que si, y bueno, los buffers son para eso, para aumentar la capacidad de entregar corriente para que una señal se estabilice más velozmente.  Si necesitas salidas muy rápidas le conectas un buffer a la salida del pic y asunto solucionado.

Espero haberte aclarado el panorama, y no hay que tener 'miedo' sino 'cuidado'. 

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #10 en: 25 de Abril de 2006, 14:55:35 »
OK Maunix, gracias por la explicación. Seguiré leyendo la datasheet y cualquier otra duda la seguiré publicando aquí.  :mrgreen:

Desconectado B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #11 en: 25 de Abril de 2006, 18:35:43 »
Hola, agradecería mucho si me ayudan.

Estoy empezando a programar pic's, de hecho es el primero, he hecho algunos programas con el 16f84 pero nunca los he quemado, tengo que hacer un proyecto y escogí el 18f452, pero no tengo mucha idea de como comenzar, he leído en el manual y en lo poco que entiendo dice que hay que existen varias caracteristicas especiales del CPU.

En la parte del oscilador dice que tiene varios tipos, y que se programan, entre las caracteristicas especiales está la selección del oscilador, quiero quemar un programa sencillo solo para observar como trabaja el componente, pero no estoy seguro si hay que configurar el oscilador o no es necesario, (pienso colocar un oscilador RC sencillo para probar), leyendo el manual dice que para programar el oscilador hay que acceder a la sección 300000h y solo se accede a la sección 300000h-3FFFFFh por medio de tablas, ¿que quiere decir esto?, como lo hago?.

Maunix he leido tus respuestas y se ve que tienes dominio sobre el componente, quisiera saber que posibilidades hay que coloques algun programa sencillo, encesnder leds, algo facil, solo para ver como se configuran los puertos tanto de entrada como de salida, configurar el oscilador, un programa que me dé alguna idea para arrancar a programar el micro.

Maunix, sería mucho pedir que volvieras a explicar la parte del latch de los puertos, no tengo muy claro lo que significa latch, creo que eso me crea problemas para entender de que se trata ese registro. Pienso que según la explicacion que escribiste sirve para evitar que por la velocidad del micro no se ejecuten instrucciones, ¿es asi?

Y por ultimo quisiera saber si la estática daña el componente, en la primera hoja del manual que tiene las caracteristicas generales dice que se fabrica con tecnología CMOS, también dice "Fully static design", qué significa esta frase?, fully es completamente y la lógica dice que la traducción de esa frase es completamente diseño estático, recuerdo que la tecnología CMOS es delicada con la estática y si el componente es fabricado con esa tecnología tengo la duda si la estática lo daña.

B3u!6N()

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #12 en: 25 de Abril de 2006, 19:14:46 »
Hola... B3u!6N()  :shock:

Si estás empezando a programar, deberías "quemarle" un programa a un PIC16F84 antes de usar los PIC18. Los osciladores de los PIC18 son mucho más complicados que los de PIC16; por ejemplo, los PIC18 pueden cuadruplicar la velocidad del cristal que le pongas.

Sobre la estática, no te preocupes, TODOS los PICs están protegidos ante cargas electrostáticas. Traen unos diodos internamente que limitan los voltajes. Puedes tocarlos con las manos y estar pisando una alfombra si quieres jeje, claro con sus limitaciones.

Para que empieces a programar debes indicarle a Maunix que lenguaje de programación usas: ensamblador (MPASM), lenguaje C (Compilador CCS o compilador Microchip) o lenguaje Basic por ejemplo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #13 en: 25 de Abril de 2006, 20:07:37 »
Hola

Ya instalé MPLAB 7.31 y el compilador C18 v3.02.

Estoy siguiendo las instrucciones de la Getting Started Guide que está aquí:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014

Voy en la parte de compilar el proyecto, ya agregué el archivo 18f452.lkr y también el stdio.h. Al darle Project - Build All, me sale el mensaje:

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F452 "primer programa.c" -fo="primer programa.o" -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\temporal\primer programa\primer programa.c:3:Error [1027] unable to locate 'stdio.h'
MPLAB C18 v3.02 (demo)
Copyright 1999-2005 Microchip Technology Inc.
Days remaining until demo becomes feature limited:  60
Halting build on first failure as requested.
BUILD FAILED: Tue Apr 25 18:05:48 2006

¿Alguna idea de cuál es el problema? En el proyecto los archivos están así:




EDITO: Bueno, por leer mal, me brinqué la parte en la que se explica cómo configurar el compilador y sus carpetas:  :mrgreen:

Pego la imagen de lo que me faltaba.

« Última modificación: 25 de Abril de 2006, 20:19:24 por migsantiago »

Desconectado B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #14 en: 25 de Abril de 2006, 20:24:27 »
Supuse que debí haber hecho algo asi, pero no tengo tiempo para probar, tengo que terminar el proyecto rápido, solo se utlizar el lenguaje assembler, que segun tengo entendido es el que trae el manual de intrucciones
B3u!6N()