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

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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #15 en: 25 de Abril de 2006, 23:17:34 »
EDITO: Bueno, por leer mal, me brinqué la parte en la que se explica cómo configurar el compilador y sus carpetas:  :mrgreen:

Jejeje, a mi me pasó lo mismo con mi primer programa con el c18!!

Recién leo el post y lo vi ya con el edit que hiciste y me reía porque se ve que dimos los mismos pasos  :D :D :D :D
- 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 maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #16 en: 25 de Abril de 2006, 23:30:25 »
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

Cuentame que lenguaje prefieres usar.  El ensamblador es una linda opción pero también es muy muy util el C en los 18.

Si te interesa el C,  fijate el siguiente link

Tienes la versión estudiante que es free!

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

Una vez que te hayas decidido en que lenguaje programarás improvisaré algun ejemplo simple sobre como prender algun led o algo asi.  ¿Te parece?

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 maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #17 en: 25 de Abril de 2006, 23:48:15 »
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?.

Me parece bien que uses los 18F. Lo normal es empezar por los 16F pero a mi modo de ver, los 18F tienen muchas menos complejidades en montones de aspectos sobre todo en el tema paginación.  Es cierto que tienen muchos modos de oscilación lo cual hace confuso 'comenzar' pero unan vez que lograste entender como se setean los configuration bits,  luego opino que es mas facil trabajar con los 18F que con lo 16F.

AL oscilador o al modo oscilador accedes mediante los configuration bits.  Esos bits, se configuran cuando vas a 'quemar' como dices tu al pic.  Para ahorrar tiempo en la elección de estos configuration bits uno los puede dejar seteados ya en el código de manera de no tener que setearlos cada vez que uno quiere quemar el pic.

Algo que me parece importante notar es que en estos pics, es posible reprogramar los configuration bits durante la ejecución del programa, pero te aconsejo que NO HAGAS ESTO porque podrias dejar al pic sin funcionar y necesitarias reprogramarlo.  No es que se dañe el pic, simplemente dejará de funcionar si seteas algo mál en el código.


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.

Fijate te puse otro post, dime en que lenguaje (entre ensamblador y C18 que es lo que yo uso) y veré de improvisar algun ejemplo aunque para los 18F452 hay cientos de ejemplos por internet.  Opino que es una muy buena elección para comenzar ya que tienes todos los módulos y puedes hacer casi de todo con el. 

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?

No es ningun inconveniente  a ver como te explico.  Cuando le dices al pic que ponga un PIN en alto, el pin no se pone 'instantanemente en alto' sino que tarda un tiempo.  El tiempo varía en como es el circuito de salida.  Yendo a un ejemplo simple si enciendes una fuente de voltaje que alimenta a un circuito RC,  el circuito llegará a su máxima tensión en un tiempo que depende de la constante RC.  Bueno, en el pic sucede lo mismo, el pic recibe el comando de poner un 5V, pero a la salida tarda unos nano segundos o microsegundos en hacerse realidad.

Sumado a esto, es costummbre usar las instrucciones bsf y bcf.  Con estas instrucciones uno puede setear un solo bit de un puerto a la vez, lo cual puede ser muy cómodo en muchos casos.

El tema es que dichas instrucciones, no se ejecutan directamente sino que tienen un ciclo de lectura, de modificación y luego de escritura.

Te pongo con un ejemplo a ver si es mas claro

Imaginemos que el PORTA tiene la siguiente salida

1) Paso 1.  PORTA = 00000010

2) Paso 2.  Hacemos un bsf PORTA,2.  -->  El PORTA, recibió la instrucción.  Lee el contenido del PORTA = 00000010, lo modifica 00000110 y lo escribe (sacandolo por el hardware).  Es que la instrucción en si actua sobre un registro interno del pic no directamente sobre el hardware. (Condición esperada es que PORTA = 00000110)


3) Paso 3.  Inmediatamente queremos hacer un bsf PORTA,3 (para tener una salida esperada PORTA=00001110).  Como la instrucción en realidad lee el contenido del PORTA, lo modifica y escribe luego en el PORTA, lo que sucede es lo siguiente.

3.1) Si el PORTA<2> tiene una salida poco cargada o poco capacitiva , la salida al finalizar el paso 3, habrá sido PORTA = 00001110.
3.2) Si el PORTA<2> aun no se puso en 1 porque la salida aun no se haya puesto en 1, en realidad al finalizar el paso tres habremos tenido PORTA = 00001010  Es decir que el PORTA<2> no se habrá seteado!


Como ves, 'depende' de como sea el hardware de salida.  La palabra LATCH proviene de los viejos circuitos LATCH que retenian un valor indefinidamente hasta que no se le cambie la condición que haga que cambie.  Es por eso que uno entonces en los 18F termina poniendo al LATDA<2> en 1, para que en algun momento se ponga la salida en 1 en dicho pin.  Si luego uno de inmediato quiere indicar que e ponga en uno el PORTA<3>, setea el LATA3 , eso se hace de inmediato y luego la salida se irá estableciendo en función de como sea el circuito de salida del PORTA,3

Espero te haya sido más clara esa explicación.


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.

Coincido con migsantiago,  es muy raro que quemes un pic con estática salvo que le hagas una descarga realmente importante. 

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 B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #18 en: 26 de Abril de 2006, 02:45:27 »
Muchas gracias por la orientación, prefiero utilizar el lenguaje ensamblador que es el que más conozco, de lenguaje c realmente no se nada.

El latch seria entonces por la velocidad que tarda el micro en realizar la siguiente instrucción, puede ser excesivamente rápida y no darle tiempo al puerto cambiar de estado antes de leerlo nuevamente?. Y este registro latch se encarga de no leer el puerto hasta que la instrucción anterior se ejecutó?, en el ejemplo que diste Maunix, lee el puerto una vez se asegure que se seteo el PORTA<2>?, para luego setear el PORTA<3>, estoy en lo correcto? :?

Otra pregunta sobre ese lat register, hice un programa en mplab para simular y ver los cambios en los registros y a la hora de colocar el puerto a como salida y enviar los datos los escribió en el registro LATA, el mismo micro se encarga de enviar esos datos escritos en el LATA por el mismo puerto A?, o hay que hacer algo más?
B3u!6N()

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #19 en: 26 de Abril de 2006, 06:49:06 »
Muchas gracias por la orientación, prefiero utilizar el lenguaje ensamblador que es el que más conozco, de lenguaje c realmente no se nada.
Bueno, veré que improviso para que emipieces con algo en ensamblador.


El latch seria entonces por la velocidad que tarda el micro en realizar la siguiente instrucción, puede ser excesivamente rápida y no darle tiempo al puerto cambiar de estado antes de leerlo nuevamente?. Y este registro latch se encarga de no leer el puerto hasta que la instrucción anterior se ejecutó?, en el ejemplo que diste Maunix, lee el puerto una vez se asegure que se seteo el PORTA<2>?, para luego setear el PORTA<3>, estoy en lo correcto? :?

Otra pregunta sobre ese lat register, hice un programa en mplab para simular y ver los cambios en los registros y a la hora de colocar el puerto a como salida y enviar los datos los escribió en el registro LATA, el mismo micro se encarga de enviar esos datos escritos en el LATA por el mismo puerto A?, o hay que hacer algo más?

El latch es un registro que retiene el valor que le seteamos.  El latch está conectado directamente al registro del puerto por lo cual no hace falta hacer ningún refresco.

Como regla general entonces

Para sacar un dato por un puerto --> USA LOS LATCHs (registros LATx)
Para leer un dato de un puerto --> LEE los PORTs (PORTx)

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 #20 en: 26 de Abril de 2006, 17:15:42 »
Les comparto un programa que usa el puerto B para encender y apagar leds.

Compilado con C18 y MPLAB.


Desconectado B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #21 en: 27 de Abril de 2006, 13:17:08 »
Migsantiago sabes que bajé tu programa y lo intenté compilar en MPLAB y no se puede porque esta en lenguaje c, supuse que eso pasaría pero igual intenté, y buscando en la barra de herramientas me encontré con una pestaña que dice "configuration bits", casualmente ese configuration bits es en donde, según he entendido del manual se establecen las configuraciones especiales del micro, en el manual dice que se configura el wdt, osc, protección de código, y otro poco de cosas que en este momento no recuerdo. Obviamente me metí a ver de que se trataba esta pestaña y me consigo con que tiene las cosas que recuerdo que dice el maual para esa parte de configuraciones, tiene osc, wdt, osc switch enable, cade protect, etc. y con una especie de cuadro de selección en cada tópico(es la pestañita que tiene la barra de direcciones hacia abajo, no se como se llama) se escoge el osc, tiene para habilitar y desahbilitar la protección de código y todo lo que hay que configurar.

Es cierto que tienen muchos modos de oscilación lo cual hace confuso 'comenzar' pero unan vez que lograste entender como se setean los configuration bits,  luego opino que es mas facil trabajar con los 18F que con lo 16F.

AL oscilador o al modo oscilador accedes mediante los configuration bits.  Esos bits, se configuran cuando vas a 'quemar' como dices tu al pic.  Para ahorrar tiempo en la elección de estos configuration bits uno los puede dejar seteados ya en el código de manera de no tener que setearlos cada vez que uno quiere quemar el pic.

Por medio de esa pestaña me da la impresión que se accede a la dirección 300000h, que de hecho a la izquierda la tiene, ¿es ahi donde se configuran los bits?, porque no entiendo mucho el manual en esa parte y creo que hay que acceder a esas direcciones por medio de tablas, que es otra cosa que tampoco entiendo....

Supongo que para correr el programa que enviaste migsantiago tengo que instalar el compilador de c18, no?
B3u!6N()

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #22 en: 27 de Abril de 2006, 14:51:39 »
Sí, necesitas C18 y MPLAB instalados.

Mira, te estás confundiendo un poco.

Tú dices que ya tienes varios programas del f84 compilados. Debes tener archivos .HEX de esos programas. Intenta grabar el programa HEX en un f84. Necesitas tener el programa WinPic800.

http://perso.wanadoo.es/siscobf/

Decárgalo de esa dirección.

Una vez que lo tengas, selecciona de la lista de pics el f84. Luego abre el HEX que hayas compilado. Ve a la pestaña de config. Ahí verás todo lo que se configura de los configuration bits. Selecciona los que te convengan (XT para cristal, nowdt para no watchdog, noprotect para no proteger código, etc.).

Y graba tu PIC. Necesitas empezar a usar el f84 aunque sea unas cuantas veces para que continúes con el PIC18.

Para indicarle al PIC que configuration bits deseas tener hay muchas formas:

- Indicándolo directamente en el archivo ASM ensamblador y el compilador lo agrega al HEX automáticamente
- Indicándolo en el archivo de C (en CCS es #fuses nowdt,noprotect...) y el compilador lo agrega al HEX automáticamente
- O directamente antes de grabar el PIC en software como WinPic800 o ICProg.


Desconectado B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #23 en: 27 de Abril de 2006, 16:08:21 »
Si, como dije antes, he hecho varios programas con el f84, programas sencillos, pero nunca los he pasado al componente físico, por lo tanto no se configurar el osc, el wdt, y todo lo que conlleva pasar el programa al micro, lo único que he hecho es escribir el programa en .asm, compilarlo y simularlo con MPLAB, de resto no tengo ni idea de como hacerlo, tengo un programador de pic, y el ic-prog pero no los he utilizado todavia, a parte que no tengo un f84 a la mano en este momento para hacer alguna prueba.

Realmente las primeras pruebas las quiero hacer con el 18, es el que tengo en este momento disponible.

B3u!6N()

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Tutorial para PIC18
« Respuesta #24 en: 27 de Abril de 2006, 16:45:10 »
Hola B3u!6N(), si aceptas un consejo te doy el mio, empieza con el F84 y deja el 18F para cuando ya tengas experiencia, yo tengo amplia experiencia con el F84 y te aseguro que ni se le aproxima a cualquier 18 en lo que a complejidad se refiere.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado B3u!6N()

  • PIC10
  • *
  • Mensajes: 6
Re: Tutorial para PIC18
« Respuesta #25 en: 27 de Abril de 2006, 21:49:11 »
Me gustaría poder hacer pruebas con el f84, pero no dispongo de tiempo para hacerlas, se que el 18f tiene cosas mas complejas pero es el que dispongo para trabajar, a parte que no necesito muchas cosas internas del micro, realmente lo utilizo es por la cantidad de memoria y la cantidad de puertos que tiene, el f84 no tiene la cantidad que necesito tanto de memoria como de puertos. El proyecto es bastante sencillo.

Estuve realizando unas simulaciones en MPLAB, enviar un 1 por un puerto y desplazarlo hacia la izquierda, y me encontre con el BSR, que realmente no entiendo lo que hace, sé que es el registro de acceso de bancos, y según entiendo sirve lógicamente para acceder a los distintos bancos, pero por ejemplo la instruccion RLNCF tiene en su sintaxis el BSR, si se le coloca 0 o 1.

En el programa escribí "RLNCF  LATA,1,0" y desplazó el número, pero a la hora de desplazarlo en un registro creado por mí mismo es necesario escribir "RLNCF  PRUEBA,1,1" o sea hay que cambiar el BSR, leí el manual y no entiendo muy bien, según creo para acceder a los SFR's el BSR debe estar en 0 y para acceder a los registros creados por el usuario el BSR (en la sintaxis de la instrucción) debe estar en 1. Probé colocando el registro en el banco 2 y no realizo el cambio del registro hasta que escribí "MOVLB  .2", por lo que veo el BSR sería el RP0 del f84, ahora lo que dije antes es una regla?, para modificar los SFR's el BSR (en la sintaxis de la intrucción) debe estar en 0, y para acceder a los GPR's debe estar en 1 en la instrucción?, o en la sintaxis realiza algo más?.

Una pregunta, para realizar la configuración de los bits basta con modificar la pestaña "configurations bits" que esta en "configurations" del MPLAB, si modifico allí los bits para configurar el oscilador y todo lo demás?.
B3u!6N()

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tutorial para PIC18
« Respuesta #26 en: 27 de Abril de 2006, 22:22:54 »
En el programa escribí "RLNCF  LATA,1,0" y desplazó el número, pero a la hora de desplazarlo en un registro creado por mí mismo es necesario escribir "RLNCF  PRUEBA,1,1" o sea hay que cambiar el BSR, leí el manual y no entiendo muy bien, según creo para acceder a los SFR's el BSR debe estar en 0 y para acceder a los registros creados por el usuario el BSR (en la sintaxis de la instrucción) debe estar en 1. Probé colocando el registro en el banco 2 y no realizo el cambio del registro hasta que escribí "MOVLB  .2", por lo que veo el BSR sería el RP0 del f84, ahora lo que dije antes es una regla?, para modificar los SFR's el BSR (en la sintaxis de la intrucción) debe estar en 0, y para acceder a los GPR's debe estar en 1 en la instrucción?, o en la sintaxis realiza algo más?.

Mira te explico

1) Si PRUEBA está declarado en la seccion ACCESS RAM del banco 0 (de 0x00 a 0x5F)  entonces puedes dirigirte a PRUEBA desde cualquier pagina a donde estes apuntando simplemente haciendo

RLNCF  PRUEBA,1,0

LATA está tabmien en la ACCESS RAM  pero en la parte superior (de 0x60 a 0xFF pero a partir del banco 15).
Entonces por eso la accedes con el ,0



2) Ahora si PRUEBA está declarado en el la seccion GPR entonces si deberas indicar que la memoria está en un banco GPR (por ejemplo PRUEBA esté en la direccion 0x61 del banco 0) y ahi haces

RLNCF  PRUEBA,1,1

Pero para eso deberás estar 'apuntando' al banco 0 con el BSR.

Espero te haya aclarado algo el panorama.  Sé que no es simple al principio pero es así como funciona.

La ventaja respecto a los 16F es que en los 16F eran pocos los pics que tenian registros 'unbanked' y encima los registros principales del pic estaban en el banco 0 o el 1.  En los 18F se los puede acceder a todos sin necesidad de andar cambiando de banco!  GENIAL!

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 Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tutorial para PIC18
« Respuesta #27 en: 27 de Enero de 2007, 18:21:17 »
Hola saludos, ya paso tiempo del post, pero weno, esque he intentado bajar los tuttiales del principio de c18 y no he podido porque ya no estan disponibles, migsantiago los podrias colgar otraves, o alguien que los tenga, si es necesario a mi correo
gracias.

pd esta muy buena la info de este hilo
« Última modificación: 04 de Mayo de 2008, 19:37:31 por Cryn »
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tutorial para PIC18
« Respuesta #28 en: 28 de Enero de 2007, 12:35:57 »
Olvidé checar mi cuenta de 4shared y me la borraron. Aquí un link a los archivos.

http://www.4shared.com/file/9622385/215c2dc/Curso_C18.html

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Tutorial para PIC18
« Respuesta #29 en: 20 de Abril de 2007, 18:08:33 »
buen tutorial amigos a ver q tal me va con el C18
El conocimiento se consigue a base de esfuerzo...