TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: migsantiago 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
-
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:
-
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
-
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
-
Soy una esponja del C18 Compiler, los exemplos és excelente!
Gracias Santiago!!! Parabéns!! Saludos! Alexandre.
-
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:
-
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)
-
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
-
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. :?
-
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
-
OK Maunix, gracias por la explicación. Seguiré leyendo la datasheet y cualquier otra duda la seguiré publicando aquí. :mrgreen:
-
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.
-
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.
-
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í:
(http://img177.imageshack.us/img177/8311/mplab2px.jpg)
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.
(http://img117.imageshack.us/img117/3522/error4qx.jpg)
-
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
-
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
-
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 (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
-
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
-
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?
-
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
-
Les comparto un programa que usa el puerto B para encender y apagar leds.
Compilado con C18 y MPLAB.
-
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?
-
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.
-
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.
-
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.
-
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?.
-
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
-
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
-
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
-
buen tutorial amigos a ver q tal me va con el C18
-
Hola buenas tardes, he estado leyendo la informacion que tiene sobre los pics, soy nuevo en este foro. estoy terminando mi carrera de ingeneria electronica y pues he desarrollado aplicaciones sencillas como:
El control de temperatura de un horno controlado con un PID con el pi18f4550 y este señor lo programamos con ccs(funciono excelente), pero en CCS he notado que hay funciones que no las toma como cuando le quiero decir que AN3 o RA3 o +vref con setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); pues no me reconoce que quiero utilizarlo con una tension de referencia externa.
Ahora he visto en el foro que recomiendas el c10 y mplab, pero no me adapte a ellos cuando porgramaba con assambler y por eso he ido mas a la programacio de c.
para finalizar actualmente estoy iniciando mi tesis de grado y voy hacer un sistema de control de medicion de corriente en las viviendas utilizando el sensor acs712 y el pic 18f4550, la cual toma la senal analoga del sensor y la convierte analoga a digital, y a la salida del pic tendremos el circuito de potencia encargado de activar o desactivar un triac para corte de corriente.
pues necesito ayuda para programar el pic a medida que conversemos y me ayudes con tus grandes aportes te envio mas detalles. gracias
-
Hola buenas tardes, he estado leyendo la informacion que tiene sobre los pics, soy nuevo en este foro. estoy terminando mi carrera de ingeneria electronica y pues he desarrollado aplicaciones sencillas como:
El control de temperatura de un horno controlado con un PID con el pi18f4550 y este señor lo programamos con ccs(funciono excelente), pero en CCS he notado que hay funciones que no las toma como cuando le quiero decir que AN3 o RA3 o +vref con setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); pues no me reconoce que quiero utilizarlo con una tension de referencia externa.
Ahora he visto en el foro que recomiendas el c10 y mplab, pero no me adapte a ellos cuando porgramaba con assambler y por eso he ido mas a la programacio de c.
para finalizar actualmente estoy iniciando mi tesis de grado y voy hacer un sistema de control de medicion de corriente en las viviendas utilizando el sensor acs712 y el pic 18f4550, la cual toma la senal analoga del sensor y la convierte analoga a digital, y a la salida del pic tendremos el circuito de potencia encargado de activar o desactivar un triac para corte de corriente.
pues necesito ayuda para programar el pic a medida que conversemos y me ayudes con tus grandes aportes te envio mas detalles. gracias
hola estimado colega y de que parte de venezuela eres ya casi otro ing para la republica que nuevo.
Al tema desconosco del sensor y nose su funcionamiento basico pero si explicas un poco mejor con gusto ayudo lo que si tengo claro es que quieres hacer un medidor de corriente y luego segun su corriente hacer control de la misma atraves del pic y actuandoi en una etapa de potencia cosa que me parece muy bien pero y el fin de tal proyecto su alcance y mas detalles no lo tengo claro; luego la parte de programar el píc ya veo que usas c, pero hay varios compiladores para c CCS, pic18 mikroC y demas ahora tendriamos que ver el codigo para analizar tu codigo de conversion para ver el porque no te funciona lo del voltaje de referencia y buscar solucion entre todos.
Saludos y estamos a la orden siempre y cunato usted lo desee.
Atten.
Alexander Santana.
Venezuela-Anzoategui.
Observacion: Mil disculpas por desvial un poco el tema pero el asunto lo amerita o bien el colega tiene que abrir un tema para su consulta sobre su medidor de corriente.
-
Gracias Alexander Santana
Pues estoy finalizando la carrera en la unexpo puerto ordaz, y actualmente trabajo con el compilador CCS de C y con el proteus 7.6 sp4, te voy a enviar lo que he realizado para que me ayudes.
con respecto al sensor acs712 maneja corrientes directas en ac y dc de 5amp, 20 amp, 30 amp y su salida es de 0 a 5v proporcional a la entrada, es decir, a medida que incremente el consumo de corriente incrementara su voltaje de salida pero teniendo en cuenta que su limite es de 5 amp (mi caso), al pasarlo por el pic lo conviertto A/D y voy a controlar la potencia activa, proque voy a referenciar 500 kw/h y el va ser el encargado de decirme si el usuario ya sobre paso los limites de corrientes al mes . como es un prototipo va ser monofasico de 120v rms y el sensor de 5 amp. este es mi alcance hasta los momentos
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,XT,NOMCLR,
#device adc=10
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use delay(clock=4000000)
#INCLUDE "lcd_c.c"
FLOAT VALOR;
FLOAT X;
VOID MAIN(VOID)
{
SET_TRIS_A(0XFF); // Puerto A como entrada
SET_TRIS_B(0X00); // Puerto B como salida
OUTPUT_A(0X00); // Limpio el puerto A
SETUP_PORT_A(AN0_ANALOG_AN3_REF); // UTILIZA CONV AN0 Y COLOCO AN3 COMO REFERENCIA
SETUP_ADC(ADC_CLOCK_INTERNAL);
lcd_init(); // Inicializa la rutina lcd
while(true)
{
set_adc_channel(0); // Especifica el canal de lectura
delay_us(10); // retardo de 10 us
valor=read_adc(); // Valor lee lo que esta en el canal seleccionado
X=(valor*5)/1023; // Multiplica valor por 5v / 1024 conversor de 10 bits
delay_ms(500); // retardo de 500 ms
printf(lcd_putc,"\f"); // indica que envia un valor float
printf(lcd_putc," P=%2.3g volt",X); // Indica que envia X 2 enteros, 3 decimales volt
delay_ms(1000); // retardo de 1000 seg
}
}
muchas gracias. y si es necesario abrie un tema lo hacemos
-
hola colegas. estoy desarrollando un sistema de control de temperatura para una cladera en lenguaje ensamblador y se me presentaro un problema....hace poco un compa me paso un programa para medir la temparutura pero hay un incomveniente el uso de una tabla q no conosco para la pantalla LCD la instrucción es TBLRD y no tengo idea como manejarlo les agradeceria que me ayudarano que me pasaran un ejemplo sencillo de manejo de lcd con ese metodo
-
hola colegas. estoy desarrollando un sistema de control de temperatura para una cladera en lenguaje ensamblador y se me presentaro un problema....hace poco un compa me paso un programa para medir la temparutura pero hay un incomveniente el uso de una tabla q no conosco para la pantalla LCD la instrucción es TBLRD y no tengo idea como manejarlo les agradeceria que me ayudarano que me pasaran un ejemplo sencillo de manejo de lcd con ese metodo
Hola
Este tema es de lenguaje C, utiliza el buscador en un subforo correcto por favor.
-
Gracias Alexander Santana
Pues estoy finalizando la carrera en la unexpo puerto ordaz, y actualmente trabajo con el compilador CCS de C y con el proteus 7.6 sp4, te voy a enviar lo que he realizado para que me ayudes.
con respecto al sensor acs712
Hola buenos dias, disculpa mi demora oye ya estoy mas al dia con el sensor ACS712 es como el metodo hall para el calculo de consumo de corriente.
Ahora me alegra que miembros de este foro sean de mi pais y que este haciendo proyectos involucrando los pic ya que siempre hacen proyectos que solo es papeleria y no son nada aplicables en tu caso es un proyecto muy util de hecho voy hacer algo parecido pero para una fuente de poder personal es decir una fuente para mi banco de trabjo donde dicha fuente presente en un lcd , temperatura de la fuente, Voltaje de salida ya que la fuente es variable, corriente consumida por la carga y cualquier otro dato que me sugieran.
Saludos y cualquier cosa seguimos en la marcha y lo de usar proteus es una herramienta muy util y que se le puede sacar mucho provecho.
Atten.
Alexander Santana.
Venezuela-Barcelona.
-
hola jeanvega54, me gusto tu proyecto podrias subir el circuito?
-
hola jeanvega54, me gusto tu proyecto podrias subir el circuito?
No es para desilucionarte pero el usuario jeanvega al abrir su perfil dice esto:
Última vez activo: 17 de Abril de 2012, 19:53:25
No creo que entre, esto es un tema del 2010/2011
-
y ya que hablaste vos lo tenes al circuito?
-
No, no poseo el circuito