Professional Documents
Culture Documents
Manual de Usuario
Página 1 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Importante
Existe una serie de características, módulos y funciones que son comunes a todas las versiones de Ni-
ple. Tanto el diseño de las pantallas como así también la metodología de utilización e implementación de
muchos de estos módulos no varían de una versió n a otra.
Por esto, los manuales de las diferentes versiones comparten una importante cantidad de información y
si los mismos se imprimen por separado, se estaría generando una considerable cantidad de información
duplicada.
Dado que este manual ha sido diseñado para incluir las características de todas las versiones de Niple
4.0 hemos organizado la i n formación en 2 partes.
La primer parte consiste en toda aquella informaci ón que resulta comú n a todas las versiones, esto es,
información general y conceptos básicos sobre micro controladores, introducci ón a Niple, principios básicos
y generales de programación con Niple y la descripció n de los módulos comunes a todas las versiones.
La segunda parte consiste en las características particulares de cada línea de microcontroladores y las
descripciones de los módulos específicos de cada versión de Niple.
Página 2 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Índice
COMO UTILIZAR ESTE MANUAL ________________________________________________________________________ 2
Página 3 de 242
Niple v4.0 - Programación Visual de Microcontroladores
INSTRUCCIONES ____________________________________________________________________________________ 43
Instrucciones orientadas a Registros _______________________________________________________________ 43
ADDWF_______________________________________________________________________________________ 43
ANDWF_______________________________________________________________________________________ 44
CLRF _________________________________________________________________________________________ 44
CLRW ________________________________________________________________________________________ 44
COMF ________________________________________________________________________________________ 45
DECF_________________________________________________________________________________________ 45
DECFSZ ______________________________________________________________________________________ 45
INCF _________________________________________________________________________________________ 46
INFCSZ _______________________________________________________________________________________ 46
IORWF _______________________________________________________________________________________ 46
MOVF ________________________________________________________________________________________ 47
MOVWF ______________________________________________________________________________________ 47
RLF __________________________________________________________________________________________ 47
RRF __________________________________________________________________________________________ 48
SUBWF _______________________________________________________________________________________ 48
SWAPF _______________________________________________________________________________________ 48
XORWF_______________________________________________________________________________________ 49
Instrucciones orientadas a Bits ____________________________________________________________________ 49
BCF __________________________________________________________________________________________ 49
BSF __________________________________________________________________________________________ 49
Página 4 de 242
Niple v4.0 - Programación Visual de Microcontroladores
BTFSC ________________________________________________________________________________________ 50
BTFSS ________________________________________________________________________________________ 50
Instrucciones orientadas a Literales ________________________________________________________________ 50
ADDLW ______________________________________________________________________________________ 50
ANDLW ______________________________________________________________________________________ 51
IORLW _______________________________________________________________________________________ 51
MOVLW ______________________________________________________________________________________ 51
SUBLW _______________________________________________________________________________________ 52
XORLW_______________________________________________________________________________________ 52
Instrucciones de Control __________________________________________________________________________ 52
CLRWDT _____________________________________________________________________________________ 52
NOP __________________________________________________________________________________________ 53
SLEEP ________________________________________________________________________________________ 53
RUTINAS BÁSICAS __________________________________________________________________________________ 53
Iniciar Programa ________________________________________________________________________________ 53
Asignar Valor ___________________________________________________________________________________ 54
Asignar valor a un Bit ____________________________________________________________________________ 54
Asignar valor a un Registro ________________________________________________________________________ 55
Puertos ________________________________________________________________________________________ 56
Configurar Puerto _______________________________________________________________________________ 56
Leer Puerto_____________________________________________________________________________________ 56
Escribir Puerto __________________________________________________________________________________ 56
Conversión Analógica/Digital (A/D)________________________________________________________________ 57
Activar/Desact. A/D _____________________________________________________________________________ 57
Conversión A/D_________________________________________________________________________________ 58
EEPROM _______________________________________________________________________________________ 64
Leer EEPROM__________________________________________________________________________________ 64
Grabar EEPROM ________________________________________________________________________________ 65
Funciones Lógicas _______________________________________________________________________________ 65
Comparar Bit ___________________________________________________________________________________ 65
Comparar Registro (8 Bits) ________________________________________________________________________ 66
Comparar Registro (16 Bits) _______________________________________________________________________ 67
Matemáticas_____________________________________________________________________________________ 68
8 Bits _________________________________________________________________________________________ 68
Adición (8) __________________________________________________________________________________ 68
Sustracción (8) ________________________________________________________________________________ 69
División (8) __________________________________________________________________________________ 69
Multiplicación (8) _____________________________________________________________________________ 70
Reg(8) a BCD ________________________________________________________________________________ 70
Cálculos a 16 Bits ________________________________________________________________________________ 71
Adición (16) _________________________________________________________________________________ 71
Sustracción (16) _______________________________________________________________________________ 71
Multiplicación (16) ____________________________________________________________________________ 72
Reg (16) a BCD_______________________________________________________________________________ 72
Página 5 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 6 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 7 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 8 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 9 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 10 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Estructura de un microcontrolador
Básicamente, un microcontrolador esta compuesto por los siguientes componentes:
• Procesador o CPU (del inglés Central Prossesing Unit o Unidad Central de Proceso).
• Memoria para el programa tipo ROM.
• Memoria RAM para contener los datos.
• Líneas de E/S para comunicarse con el exterior.
• Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo,
CAD: Conversores Analógico/Digital, CDA: Conversores Digital/Analógico, etc.).
El procesador o CPU
Es el elemento más importante del microcontrolador y determina sus principales características, tanto a
nivel hardware como software. La CPU (Central Processing Unit o Unidad Central de Proceso) se encarga la
decodificación y ejecución del programa.
Memoria ROM
La memoria ROM es una memoria no volátil, es decir, que no se pierden los datos al desconectar el
equipo y se destina a contener el programa d e instrucciones que gobierna la aplicación. Los microcontrola-
dores disponen de capacidades de ROM comprendidas entre 512 bytes y 8 k bytes.
Existen distintos tipos de memorias ROM, la cual determinará la aplicación del microcontrolador.
• ROM con máscara: Es una memoria no volátil de sólo lectura cuyo contenido se graba du-
rante la fabricación del chip. El elevado costo del diseño de la máscara sólo hace aconseja-
ble el empleo de los microcontroladores con este tipo de memoria cuando se precisan can-
tidades superiores a varios miles de unidades.
• OTP: El microcontrolador contiene una memoria no volátil de sólo lectura "programable una
sola vez" por el usuario. OTP (One Time Programmable). Es el usuario quien puede escribir
Página 11 de 242
Niple v4.0 - Programación Visual de Microcontroladores
• EEPROM: Se trata de memorias de sólo lectura, las cuales se puede escribir y borrar eléc-
tricamente. EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la pro-
gramación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el
control programado de un PC. Es muy cómoda y rápida la operación de grabado y la de bo-
rrado. No disponen de ventana de cristal en la superficie. Los microcontroladores dotados
de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas
veces se quiera sin ser retirados de dicho circuito. Para ello se usan "grabadores en circui-
to" que confieren una gran flexibilidad y rapidez a la hora de realizar modificaciones en el
programa de trabajo. El número de veces que puede grabarse y borrarse una memoria EE-
PROM es finito, por lo que no es recomendable una reprogramación continua . Son muy idó-
neos para la enseñanza y la n
I geniería de diseño. Se va extendiendo en los fabricantes la
tendencia de incluir una pequeña zona de memoria EEPROM en los circuitos programables
para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo
a las condiciones del entorno. Este tipo de memoria es relativamente lenta.
• FLASH: Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y bo-
rrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña. A dife -
rencia de la ROM, la memoria FLASH es programable en el circuito. Es más rápida y de
mayor densidad que la EEPROM. La alternativa FLASH está recomendada frente a la EE-
PROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y
tolera más ciclos de escritura y bor rado.
Memoria RAM
La memoria RAM es una memoria volátil, es decir, que se pierden los datos al desconectar el equipo, y
se destina a guardar las variables y los datos. Los microcontroladores disponen de capacidades de RAM
comprendidas entre 20 y 512 bytes .
Página 12 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Registros y Bits
Un registro es una posición de memoria en la cual se puede almacenar un dato. Es decir que la memoria
esta dividida en pequeñas “partes” llamadas “Registros”.
Dentro de la memoria, cada registro se identifica mediante un número, el cual se denomina “Dirección de
memoria” y generalmente está expresado en formato Hexadecimal. El primer registro de una memoria co-
rresponde a la dirección 00H.
Dado que identificar a cada registro mediante un número hexadecimal puede resultar muy complejo a la
hora de diseñar el programa, existe la posibilidad de asignar un “nombre” a una dirección de registro. En
general, este nombre está directamente relacionado con la función que cada registro cumple dentro del sis -
tema.
Los registros no solo son utilizados p or el programador (usuario) para almacenar los datos que la aplica-
ción debe procesar, sino que, además, sirven para controlar todo el funcionamiento del microcontrolador en
su conjunto. Esta función, la cumple un conjunto de registros que ya vienen “Predefinidos” desde la fábrica.
Es decir, que el fabricante asigna las funciones de configuración y control del microcontrolador en un grupo
de registros y el usuario no puede modificar la función que cumple cada uno de éstos.
Cada Registro está dividido en 8 “partes” a los cuales se los denomina “Bits”. Entonces podemos decir
que un Registro esta formado por un conjunto de 8 bits.
El Bit es la menor unidad de información que un sistema digital puede procesar y solo puede contener
los valores lógicos 0 y 1.
Los sistemas digitales representan la información en forma de bits porque sus circuitos sólo pueden te-
ner 2 estados: encendido o apagado.
En general podemos decir que:
1 = Encendido = Verdadero = “SI” = +5V
0 = Apagado = Falso = “NO” = 0V
Cada Bit se identifica por la posición que ocupa dentro del registro, siendo el primer Bit el número 0, que
es el que se encuentra en el extremo derecho del registro.
Al igual que los registros, se puede asignar un nombre a cada Bit para facilitar su identificación.
En un registro se puede almacenar una combinación 8 ceros y unos. Esto nos da una cantidad de 2^8
combinaciones, es decir, 256 posibles combinaciones de ceros y unos.
Esto significa que un registro puede procesar valores entre 0 y 255.
Página 13 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Podemos decir que el conjunto de ceros y unos almacenados en un registro se trata de un número entre
0 y 255, expresado en sistema Binario, esto es, en base 2. Para interpretar dicho número debemos realizar
el cálculo de conversión de base para poder expresarlo en sistema decimal.
El siguiente ejemplo muestra el desarrollo de un cálculo de conversión de base de sistema binario (base
2) a sistema decimal (base 10):
Se llama “Peso Binario” al valor que representa un Bit según la posición que ocupa dentro del registro. El
Bit que está ubicado más hacia la derecha del registro, es el Bit menos significativo (LSB, Least Significant
Bit) y tiene un peso de 2^0=1. El Bit del extremo izquierdo del registro es el Bit más significativo (MSB, Most
Significant Bit) y tiene un peso de 2^7=128. Los pesos binarios crecen de derecha a izquierda en potencias
de 2.
Una manera de simplificar el cálculo de conversión de binario a decimal, es, directamente sumar los va-
lores de los pesos binarios de los bits cuyo valor sea 1.
Página 14 de 242
Niple v4.0 - Programación Visual de Microcontroladores
El sistema hexadecimal es un sistema en base 16 y consta de 16 dígitos diferentes que son: del 0 al 9 y
luego de la letra “A” a la “F”, es decir, 10 dígitos numéricos y seis caracteres alfabéticos.
El sistema hexadecimal se usa como forma simplificada de representación de números binarios y debido
a que 16 es una potencia de 2 (2^4 =16), resulta muy sencilla la conversión de los números del sistema bina-
rio al hexadecimal y viceversa.
Mediante el sistema hexadecimal podemos representar un valor numérico de 8 bits utilizando sólo 2 dígi-
tos. De ésta manera estamos dividiendo el registro de 8 bits en 2 partes de 4 bits cada una llamada Nibble.
Al nibble correspondiente a los 4 bits menos significativos, se lo denomina “Nibble Bajo” y al nibble corres-
pondiente a los 4 bits más significativos se lo denomina “Nibble Alto”.
El sistema hexadecimal es utilizado para identificar las direcciones de registros de las memorias en sis-
temas digitales porque permite representar el valor de un Nibble con sólo 1 digito, ya que:
Página 15 de 242
Niple v4.0 - Programación Visual de Microcontroladores
El módulo TMR siempre incrementa el valor del registro asociado, nunca decrementa dicho valor.
Algunos microcontroladores pueden incluir más de un módulo TMR y la señal de reloj de cada uno de és-
tos puede ser de origen interno o externo.
Si el origen de la señal de reloj está configurado como externo, el módulo temporizador puede ser utili-
zado como un contador de eventos externos, incrementando el TMR con cada pulso recibido mediante el
pin correspondiente.
Si el origen de la señal de reloj es interno, el TMR incrementa con cada ciclo del oscilador. Esto permite
utilizar el temporizador como “contador de ciclos de programa”, donde, un ciclo corresponde al tiempo de
ejecución de una instrucción, lo cual se puede calcular con la siguiente fórmula :
( 1 / ( Frec. Osc. / 4) )
Donde “Frec. Osc.” es la frecuencia del oscilador utilizado.
Dado que la velocidad de ejecución del microcontrolador corresponde a ¼ de la velocidad del cristal utili-
zado, cada ciclo de programa se ejecuta en un tiempo determinado según el cristal que estemos utilizando.
Por ejemplo; con un cristal de 4Mhz la velocidad real de procesamiento del microcontrolador es de 1
Mhz. Aplicando la siguiente fórmula =
1 / (4.000.000 / 4)
1 / 1.000.000
0.000001 = 1 uS (microsegundo)
Esto significa que cada ciclo de programa se ejecuta a 1/1.000.000 (1 uS) y dado que cada incremento
del TMR corresponde a un ciclo de programa, si contamos los incrementos de un TMR, indirectamente po-
dremos calcular el tiempo transcurrido.
Página 16 de 242
Niple v4.0 - Programación Visual de Microcontroladores
El incremento del TMR se realiza de manera automática y de forma paralela a la ejecución del resto del
programa. Esto significa que el programa no debe “controlar” el incremento del TMR, lo cual sí debe reali-
zarse en las temporizaciones por bucles, en las cuales el microcontrolador se queda “esperando” a que
transcurra un tiempo, y no pueden ejecutarse otras tareas mientras no finalice la temporización.
Entonces el TMR puede ser utilizado como temporizador mientras el microcontrolador ejecuta otros pr o-
cesos.
Por ejemplo: si diseñamos un programa que encienda y apague un led cada 1 segundo, el microcontro-
lador enciende el led y luego puede ocuparse de esperar a que transcurran los ciclos correspondientes a 1
segundo, luego apaga el led y continua esperando.
Pero si el microcontrolador debe realizar alguna otra tarea además de temporizar, por ejemplo, mostrar
valores en dígitos de 7 segmentos, el micro no puede quedarse temporizando por bucles ya que mientras se
encuentre temporizando no podrá realizar el proceso de muestreo de los datos en los displays, y como re -
sultado tendremos que los displays se apagan mientras el microcontrolador se encuentra temporizando.
En este caso, se utiliza un TMR para realizar la temporización mientras el microcontrolador se ocupa de
mostrar los datos en los displays.
En general los microcontroladores cuentan con una interrupción por desbordamiento del TRM, es decir
que, el microcontrolador se interrumpe cuando el TMR0 pasa de 255 (B’11111111’) a 0 (B’00000000’) en los
temporizadores de 8 bits y cuando pasa de 65535 (B’11111111_111111’) a 0 (B’00000000_00000000’) en
los temporizadores de 16 bits.
Dado que 256 uS es un tiempo relativamente corto (para un TMR de 8 bits a 4 Mhz.), existe la posibilidad
de preescalar el TMR0 para que el registro asociado al TMR se incremente cada 2, 4, 8,o más ciclos. De es-
ta manera, estamos multiplicando la cantidad de ciclos que deben ejecutarse para realizar un incremento
del TMR. Al prescalador también se lo denomina predivisor.
Por ejemplo, con un predivisor de 8, cada incremento del TMR se realiza cada 8 ciclos de programa y el
desbordamiento del TMR se realizara cada 2048 ciclos (255 incrementos * 8 ciclos).
Así podemos realizar interrupciones con periodos de tiempo mayores.
Página 17 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Utilizando un microcontrolador
Como mencionamos anteriormente, el microcontrolador tiene una memoria de programa, donde graba-
mos las instrucciones necesarias para que el micro realice el trabajo que necesitamos. Cuando compramos
un microcontrolador, la memoria de programa viene vacía. Para que un microcontrolador funcione es nece-
sario “programarlo”.
Los microcontroladores se programan en un lenguaje de programación llamado Ensamblador (en inglés
Assembler) cuya principal característica es su altísima complejidad.
Los lenguajes de programación se clasifican según el “Nivel” de programación en:
• Lenguaje de “Alto Nivel”: permite que los algoritmos se expresen en un nivel y estilo de es -
critura fácilmente legible y comprensible por el hombre. En la actualidad se trata de lengua-
jes de tipo visual.
• Lenguaje de “Bajo Nivel”: el usuario se acerca un poco más al lenguaje de maquina. Permi-
ten un acceso más am plio al control físico de la maquina (hardware).
• Lenguaje Ensamblador: Podríamos considerarlo el lenguaje de más bajo nivel. El usuario
escribe código en el mismo “idioma” del procesador. Se tiene control total del sistema. Es
necesario un conocimiento de la arquitectura mecánica del procesador para realizar una
programación efectiva. El lenguaje de programación es muy especifico para cada modelo de
procesador, incluso puede variar de un modelo a otro de procesador dentro de un mismo
fabricante.
Podemos decir que los lenguajes de alto Nivel se asemejan más al lenguaje humano y que los len-
guajes de bajo Nivel se asemejan más al lenguaje de máquina y en el lenguaje ensamblador el usuario de-
be programar en el propio “idioma del procesador”.
El microcontrolador sólo entiende de números, es decir que, el código Assembler (texto) no puede ser
procesado directamente por el microcontrolador. Para poder grabar el programa en el micro, primero debe-
mos convertir el texto del código Assembler a números, en general, en formato hexadecimal. A este proceso
se le llama “Compilación”.
Página 18 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Una vez desarrollado el código Assembler , el mismo debe ser “compilado”. Esto se realiza con un “soft-
ware compilador” el cual se puede obtener de manera gratuita desde la página Web del fabricante del mi-
crocontrolador.
Por último, después de compilado, el programa está listo para ser grabado al microcontrolador. Esto rea-
liza mediante una “placa programadora”. A ésta placa programadora, comúnmente se la llama “programa-
dor”. Existen distintos tipos de programadores los cuales pueden ser para conectar a la PC mediante el
puerto Serie (COM) o Paralelo (LPT).
Cada programador trabaja en conjunto con un software, mediante el cual se realiza el proceso de lectura
y escritura de los microcontroladores.
A continuación se presenta un resumen del proceso de desarrollo del código y grabación de un micro-
controlador:
1) Escribir el código Assembler . Se genera un archivo con extensión ASM.
2) Compilar el código Assembl er. Se genera un archivo con extensión HEX.
3) Grabar (transferir) el programa desde la PC al microcontrolador mediante un program a-
dor.
De estos 3 pasos, el primero insume el 98 % de tiempo y esfuerzo y es aquí donde Niple le ofrece sus
ventajas.
Página 19 de 242
Niple v4.0 - Programación Visual de Microcontroladores
De ésta manera Niple ofrece la posibilidad de realizar desarrollos con microcontroladores con un mínimo
de esfuerzo.
El principal objetivo de Niple es facilitar al máximo la programación de los microcontroladores. Para esto ,
el software ofrece un entorno totalmente visual, donde todo el sistema se adapta a las características del
modelo de microcontrolador seleccionado; es decir que; carga el mapa de memoria con sus respectivos
nombres de registros y bits, asigna las funciones correspondientes a cada Registro y Bit dentro del sistema,
ajusta el tamaño de la memoria EEPROM, activa los módulos correspondientes, etc. Es decir que, Ud. ten-
drá disponible sólo las características que corresponden al modelo de micro en uso.
El concepto de la programación es que el usuario se concentre en “qué es lo que quiere hacer”, y Niple
“sabe cómo hacerlo”. Es decir que el usuario sólo se dedica a diseñar la estructura lógica del proceso que
desea realizar y el software se encarga de resolver todo el desarrollo del código Assembler , controlando
hasta el más mínimo detalle.
Introducción a Niple
Niple es un “Entorno Visual de Desarrollo para programación de Microcontroladores PIC”.
Con Niple podrá programar los PIC a través del diseño de un diagrama de flujo de manera gráfica y de
alto nivel de programación, sin necesidad de escribir código Assembler, o escribiendo la menor cantidad de
código, convirtiéndose en la forma más rápida, sencilla y productiva de desarrollar proyectos con microcon-
troladores PIC.
Diseñe un diagrama de flujo de manera gráfica y en “lenguaje humano” mientras Niple realiza el trabajo
pesado por Ud., controlando errores lógicos o de configuración, realizando cálculos, coordinando la interac-
ción entre las distintas partes del proyecto y generando de manera automática el código Assembler .
Estas características, hacen de Niple la herramienta ideal tanto para quienes se inician en el mundo de
los microcontroladores como para aquellos usuarios m ás experimentados que quieran aumentar su produc-
tividad.
Entre las principales prestaciones que Niple ofrece podemos destacar:
Página 20 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Funciones disponibles
Las funciones disponibles dependen del modelo de microcontrolador utilizado pero en general podemos
mencionar:
ü Selección del cristal utilizado (4, 10 o 20 Mhz)
ü Asignación de valores a registros y bits
ü Configuración y manejo de interrupciones
ü Manejo de rutinas de usuario
ü Confi guración, Lectura y Escritura de puertos
ü Lectura / Escritura de EEPROM interna del PIC
ü Funciones de comparación de registros y bits (condiciones =, >, <, >=, <=, <>)
ü Manejo automático de tablas
ü Temporizadores por bucle (de tiempo fijo o variable)
Página 21 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Herramientas adicionales
ü Interfase de comunicación RS232. Comunicaciones a 8 o 16 bits con visualización en distin-
tos formatos (decimal, hexadecimal, binario, texto, o modo gráfico).
Página 22 de 242
Niple v4.0 - Programación Visual de Microcontroladores
El objetivo de Niple es utilizar lo menos posible los bloques de instrucciones ya que éstos blo-
ques equivalen a programar en código Assembler .
Rutinas Básicas: Las rutinas básicas son módulos prediseñados y se encargan de resolver un
proceso en particular (una configuración, una comparación, un cálculo, etc.). Ud. puede formar es -
tructuras lógicas muy complejas de manera rápida y sencilla a partir de la combinación de rutinas
básicas.
Utilice las rutinas básicas para programar dentro de cualquier “Entorno”.
Las rutinas básicas están organizadas por tipo de rutina:
• Asignación de valores
Página 23 de 242
Niple v4.0 - Programación Visual de Microcontroladores
• Manejo de puertos
• Manejo de EEPORM
• Funciones Lógicas
• Funciones matemáticas
• Comunicaciones
• Etc.
Interrupciones: En ésta categoría se encuentran todas las funciones de configuración y manejo
de las interrupciones. Niple presenta las interrupciones disponibles de acuerdo al modelo de PIC
que se está utilizando.
Rutinas de usuario: Ud. puede diseñar sus propias funciones o procedimientos para solucionar
un problema en particular (siempre combinando distintas rutinas básicas) y luego llamarlos desde
distintas partes del programa (subrrutinas). Esto le permite por un lado, la creación de funciones o
procedimientos personalizados y por otro lado, la optimización del código Assembler generado, ya
que las rutinas de usuario sólo se escriben una vez y luego se insertan “llamadas” a las mismas. Es -
ta categoría incluye las funciones de declaración e inserción de llamadas a rutinas de usuario.
Conceptos básicos
La interfaz de Niple
Elementos de la pantalla.
Página 24 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Entornos
En general, un programa para PIC es organizado en distintas “secciones” con el fin de facilitar la com-
presión y al mismo tiempo optimizar el código por medio de la reutilización de código.
El objetivo de cada una de éstas “secci ones” es resolver un problema en particular y reciben distintos
nombres según la función que cumplen, o el contexto en el cual se ejecutan (Programa Principal, Subruti nas
o Interrupciones).
En Niple, se llama “Entorno” a cada una de estas “secciones” que conforman un programa.
Cada entorno debe estar perfectamente delimitado por un bloque de “Inicio” y otro de “Fin”, con la ex-
cepción del entorno del “Programa Principal”. Este contiene un bloque de inicio pero no tiene un bloque de
final, sino que, se realiza un bucle para ejecutar otro “ciclo” del programa.
Cada proyecto de Niple puede contener varios entornos;
- Entorno del “Programa Principal”: éste entorno se crea de manera automática y es el encar-
gado de “coordinar” la ejecución de todo el programa (incluyendo el resto de los entornos). En
un proyecto sólo puede haber sólo un entorno llamado “Programa Principal” y no puede ser bo-
rrado.
Página 25 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Borrar un Entorno
Para borrar un entorno, seleccione el nombre del entorno a borrar y presione la tecla “Suprimir”.
Bloques
Un bloque es un símbolo que representa una parte del proceso.
Cada bloque presenta información según su forma, su color y el texto que contiene, e identifican una
función en particular.
Configuración de un Puerto.
Página 26 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Cálculo matemático.
Página 27 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Mover un Bloque
Seleccione el bloque que desea desplazar y sin soltar el botón izquierdo del mouse y arrastre hasta ubi-
car el bloque en la nueva posición. Puede mover varios bloques simultáneamente.
Note que todos los bloques que dependen del bloque seleccionado se mueven en conjunto de manera
rígida. Esto se debe a que el modo “Arrastrar bloques” se encuentra activado. Si conmuta a modo “Arrastrar
bloques” desactivado sólo se desplaza el bloque seleccionado.
Para conmutar entre el modo “Arrastrar bloques” Activado y Desactivado ingrese al menú “Opcio-
nes/Diagramas de Flujo/Activar Arrastre”.
a) Posición original.
b) Modo “Arrastrar bloques” Activado.
c) Modo “Arrastrar bloques” Desactivado
Utilice el comando “Edición/Deshacer” para restablecer la posición anterior del bloque.
Página 28 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Estirar un Bloque
Al seleccionar un bloque se muestran 9 nodos (8 alrededor y 1 en el centro del símbolo seleccionado).
Para modificar el tamaño del bloque, haga un clic en uno de los 8 nodos periféricos y, sin soltar el botón iz-
quierdo del mouse, arrastre hasta alcanzar el tamaño deseado.
Borrar Bloques
Tiene 2 formas de eliminar un o varios bloques:
Editar Bloques
Muchas veces es necesario cambiar el valor de algún parámetro u opción a un bloque ya insertado de-
ntro del diagrama de flujo. Para esto tiene 2 opciones:
Para editar un bloque, selecciónelo y luego haga un clic con el botón derecho del mouse para que se
presente el menú contextual, y elija la opción “Editar”.
Página 29 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Para que el men ú contextual presente la opción “Editar”, sólo debe estar seleccionado el bloque a ser
editado. Si selecciona más de 1 elemento, ya sean bloques o vínculos, el menú no presentará la opción
“Editar” ya que el sistema no puede determinar cual es el bloque que desea editar.
Se presentará la pantalla correspondiente al el bloque seleccionado. La pantalla será cargada con todos
los parámetros seleccionados.
Proceda a cambiar los valores o las opciones y presione el botón “Ingresar”.
Con respecto al chequeo de errores, es importante tener en cuenta que rige el mismo criterio que para la
inserción de bloques. O sea que, si el bloque a editar está vinculado a otro bloque, se realizará el chequeo
de errores “en línea”. Mientras que si el bloque no se encuentra vinc ulado, el cheque no se realizará.
Duplicar Bloques
Al duplicar un bloque se realiza una copia exacta del bloque seleccionado.
Muchas veces, la opción “Duplicar” un Bloque en combinación con la “Edición” de bloques puede ayu-
darle a ahorrar tiempo de diseño, ya que es común realizar operaciones similares en distintas partes de pro-
yecto, donde sólo cambian algunos parámetros.
Ud. puede realizar una copia de la “estructura lógica” del programa y luego editar los bloques necesarios.
Esto le resultara más cómodo que insertar todos los bloques nuevamente.
Página 30 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Un bloque deshabilitado no es considerado en el momento del chequeo de errores “en línea” y tampoco
genera el código Assembler .
No puede inhabilitar bloque correspondiente a una “Decisión” (símbolo “Rombo”) dado que estos bloques
tienen 2 salidas.
Para Habilitar un bloque, selecciónelo y luego haga un clic con el botón derecho del mouse para que se
presente el menú contextual, y elija la opción “Habilitar”.
Página 31 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Vínculos (Flechas)
Un vínculo está representado por una Flecha que une a 2 o más bloques y determina el flujo del proceso.
Los vínculos determinan la secuencia y el orden de ejecución del programa.
Esto significa en que es muy importante tener en cuenta el sentido en que se genera el vínculo (bloques
de origen y de destino).
El bloque desde donde parte el vínculo de denomina “Bloque de Origen” y el bloque al cual llega “Bloque
de Destino” y puede identificarlos visualmente porque el vínculo presenta una “Punta de Flecha” en extremo
correspondiente al bloque de destino.
Le secuencia de ejecución del programa es; primero se ejecuta el “Bloque de Origen” y a continuación el
“Bloque de Destino”.
Existe un criterio a tener en cuenta a la hora de realizar vínculos entre bloques y Niple lo supervisa de
manera automática:
• Cada Bloque debe tener solo un Vínculo de salida. A excepción de los bloques de Decisión
(Rombo) que necesariamente deben tener 2 salida (Si la condición se cumple y si la condición
No se cumple).
• Los bloques “Inicio de Entorno” (elipses amarillas) no pueden utili zarse como “Bloques de Des -
tino”. O sea que, no pueden tener flechas que “ingresen” a éstos bloques.
• Los bloques “Fin de Entorno” (elipses amarillas) no pueden utilizarse como “Bloques de Origen”.
O sea que, no pueden tener flechas que “salgan” desde éstos bloques.
Antes de codificar un programa a código Assembler, Niple supervisa que todos los bloques se encuen-
tren correctamente vinculados. En el caso de existir un error de vínculos, Niple lo informa y suspende la co-
dificación del Assembler.
Página 32 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Crear un Vínculo
Para crea un vínculo entre 2 bloques siga los siguientes pasos:
1) Seleccione el “Bloque de Origen”.
2) Haga un clic en el Nodo (punto negro) que se encuentra en el centro del bloque.
3) Sin soltar el botón mouse, arrastre hasta el “Bloque de Destino ” y suelte el botón del mouse.
Un vínculo puede adoptar distintas formas de acuerdo a la disposición de los Bloques de Origen y Desti-
no. A éstas formas se les llama “Estilo” del vínculo.
Página 33 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Borrar Vínculos
Para eliminar un vínculo;
1) Seleccione el vínculo y presione el botón derecho del mouse.
2) Se mostrará un menú contextual.
3) Seleccione la opción “Borrar Flecha”.
Ingreso de Datos
Niple controla de manera automática cada dato ingresado al sistema, ya sean nombres de registro, valo-
res literales u opciones (generalmente numéricas). De esta manera se controlan los errores de ”tipeo”.
Esto garantiza que el registro a utilizar ha sido previamente declarado y demás previ ene los posibles
errores de “tipeo” por parte del usuario al ingresar el nombre del registro.
En general, junto a la “lista de registros”, Niple presenta el Botón “Nuevo”. Este botón le carga la pantalla
de declaración de registros.
De ésta manera, si necesita ingresar como parámetro el nombre de un registro que aún no ha sido decla-
rado, tiene la posibilidad de declararlo y seleccionarlo sin necesidad de cancelar la pantalla actual.
Al cargar la pantalla “declaración de Registros” puede declarar más de un registro nuevo antes de volver
a la función actual.
Pero al retornar, Niple seleccionará de manera automática en la lista, el nombre del registro seleccionado
al momento de cerrar la pantalla.
Página 34 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si ingresa un valor no permitido, Niple lo muestra de color rojo y no permite continuar con el proceso ac-
tual hasta no corregir el valor ingresado.
Cuando ingresa un número en formato Binario, Niple lo acepta como válido sólo cuando se han ingres a-
do los 8 dígitos que conforman el número. Esto garantiza la correcta interpretación del valor ingresado.
• Modo de Usuario Inicial: Sólo se permite el acceso y visualización de los registros y bits declarados
por el usuario, y no se tiene acceso a los registros predefinidos. Los únicos bits predefinidos a los que
se tiene acceso son los correspondientes a los puertos (RA0 -5; RB0-7; RC0-7), y los bits C y Z, dado
que estos bits son de uso frecuente. De esta manera, Niple pretende evitar errores al modificar registros
de configuración y control del sistema (ya sea por desconocimiento o de manera accidental).
• Modo de Usuario Experto: Se permite el acceso a todos los registros y bits del sistema sin ninguna
restricción. Niple supone que el usuario tiene pleno conocimiento de las acciones que se está realizan-
do, y no advierte sobre de los riesgos de modificar el valor de los registros de configuración o control.
Para conmutar entre Modo de Usuario Inicial y Experto ingrese al menú “Opciones/Nivel de Usuario”.
Página 35 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Rutinas de Usuario
Ud. puede diseñar sus propias funciones o procedimientos para solucionar un problema en particular
(siempre combinando distintas rutinas básicas) y luego llamarlos desde distintas partes del programa (sub-
rrutinas). Esto le permite por un lado, la creación de funciones o procedimientos personalizados y por otro
lado, la optimización del código Assembler generado, ya que las rutinas de usuario sólo se escriben una vez
y luego se insertan “llamadas” a las mismas. Esta categoría incluye las funciones de declaración e inserción
de llamadas a rutinas de usuario.
Página 36 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 37 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Para importar una Rutina de Usuario que se encuentra guardada en un archivo, ingrese al menú “Archi-
vo/Rutina de Usuario” y seleccione el archivo de rutina (*.RUT). Niple ingresará la rutina al proyecto actual.
Si el modelo de PIC con el cual fue creada la rutina no es el mismo que el modelo actualmente utilizado,
Niple muestra un mensaje de advertenci a, ya que, al generar el código Assembler, pueden ocurrir errores si
la rutina utiliza algún módulo que no existe en el modelo de PIC actualmente utilizado.
Por ejemplo, si la rutina fue generada con una versión de Niple para 16F87x y realiza una lectura de un
canal A/D y luego la importa a un proyecto de Niple apara 16F6xx, Niple advierte del posible error.
Página 38 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Exportar Imagen
Puede generar un archivo de imagen del diagrama de flujo para realizar la documentación del proyecto.
La imagen es generada en formato .wmf y corresponde un archivo de tipo vectorial. Este formato es están-
dar de Windows, o sea que, no requiere de programas especiales para poder visualizarlos o editarlos.
Página 39 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Declaración de Registros
Para consultar sobre la declaración de registros remítase la sección correspondiente a las rutinas especí-
ficas de cada versión de Niple.
Borrar un Registro
Seleccione el registro a borrar y presione la tecla “Suprimir”.
Sólo puede borrar los registros de usuario.
Dado que puede declarar bits dentro de un registro de usuario, Niple chequea si el registro de usuario
que se intenta borrar contiene bits declarados.
Si detecta que el registro a borrar contiene bits declarados, Niple le advierte que junto con el registro se-
rán borrados todos los bits éste contenga y le pregunta si desea continuar con la operación de borrado del
registro.
Tiene la posibilidad de cancelar la operación de borrado respondiendo NO a la pregunta.
Y si responde afirmativamente se borrará el registro junto con la totalidad de los bits asociados.
Declaración de Bits
Para consultar sobre la declaración de Bits remítase a la sección correspondiente a los módulos especí-
ficos de cada versión de Niple.
A continuación Niple pregunta si desea cambiar el n ombre del BIT actualmente seleccionado.
Si responde afirmativamente se muestra la pantalla “Renombrar un Bit” donde se presentan el nombre y
la descripción del BIT actualmente seleccionado.
Ingrese el nuevo nombre del registro y la nueva descripción y a continuación presione el botón “Renom-
brar”.
Página 40 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Al cambiar el nombre de un Bit, todos los bloques de los diagramas de flujo que hacen referencia a al Bit
anteriormente renombrado quedan desactualizados, o sea, hacen referencia a un BIT que ya no existe. Pa-
ra solucionar esto, Niple le brinda la posibilidad de actualizar de manera automática todos los bloques que
hacen referencia al BIT renombrado.
Niple le pregunta si desea que actualice de manera automática los diagramas de flujo con el nuevo nom-
bre de Bit.
Si responde afirmativamente Niple actualiza todos los bloques de todo el proyecto de manera automáti-
ca.
Además de renombrar los bits de usuario, Niple le ofrece la posibilidad de cambiar el nombre de los bits
correspondientes a los puertos. De ésta manera puede identificar más fácilmente los Pines del microcontro-
lador indicando directamente el nuevo nombre asignado.
Por ejemplo: puede renombrar el Bit RA0 por Rele1 y a partir de entonces sólo se refiere al mismo como
Rele1.
Insertar Bloques
Tenga en cuenta que cada bloque debe estar unido a otro bloque por medio de un vínculo (flecha).
Esta flecha indica el sentido de ejecución del programa.
De ésta manera se establece la secuencia y el orden en que va a ser ejecutado el programa.
El vínculo lo puede realizar de forma manual o de forma automática.
Para que el vínculo se realice de forma automática debe seleccionar el bloque previo antes de insertar el
nuevo bloque.
Niple supervisa de manera automática los errores lógicos solo cuando los vínculos se realizan de mane-
ra automática, o sea, cuando se inserta un nuevo bloque habiendo seleccionado previamente el bloque pre-
cedente.
Cuando el vínculo se realiza de manera manual, no se realiza el chequeo automático de errores. En es-
te caso, Niple lo advierte a través del siguiente mensaje.
Página 41 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 42 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Los módulos que se describen a continuación son válidos para todas las versiones de Niple.
Instrucciones
Esta categoría incluye todas instrucciones en Assembler . A su vez se organizan por tipo de instrucción:
El objetivo de Niple es utilizar lo menos posible los bloques de instrucciones ya que éstos bloques equi-
valen a programar en código Assembler.
ADDWF
Suma el valor de W y un registro.
Parámetros:
Registro F: Nombre registro que se
quiere sumar a W.
Página 43 de 242
Niple v4.0 - Programación Visual de Microcontroladores
ANDWF
Realiza una operación lógica AND entre W y un registro.
Parámetros:
CLRF
Borra el contenido de un registro.
Parámetros:
CLRW
Borra el contenido del registro W.
Página 44 de 242
Niple v4.0 - Programación Visual de Microcontroladores
COMF
Devuelve el complemento de un registro.
Parámetros:
DECF
Decrementa el valor de un registro en 1.
Parámetros:
DECFSZ
Decrementa un registro y evalúa si el resultado es igual a 0. Si el valor del registro decrementado es 0, el
diagrama de flujo sigue por el camino del “SI”, de lo contrario toma el camino del “NO”.
Parámetros:
Página 45 de 242
Niple v4.0 - Programación Visual de Microcontroladores
INCF
Incrementa el valor de un registro en 1.
Parámetros:
INFCSZ
Incremente un registro. Si el valor de un registro y evalúa si el resultado de igual a 0.
Parámetros:
IORWF
Realiza una operación lógica OR Inclusive entre W y un registro.
Parámetros:
Página 46 de 242
Niple v4.0 - Programación Visual de Microcontroladores
MOVF
Mueve el contenido del registro.
Parámetros:
MOVWF
Mueve el contenido del registro W a otro registro.
Parámetros:
RLF
Rota un BIT el contenido del registro hacía la izquierda, incorporando el Carry al registro.
Parámetros:
Página 47 de 242
Niple v4.0 - Programación Visual de Microcontroladores
RRF
Rota un BIT el contenido del registro hacía la derecha, incorporando el Carry al registro.
Parámetros:
SUBWF
Resta el valor de un registro (F) al valor de W.
Parámetros:
SWAPF
Intercambia los nibbles bajo y alto de registro.
Parámetros:
Página 48 de 242
Niple v4.0 - Programación Visual de Microcontroladores
XORWF
Realiza una operación lógica OR exclusiva entre el registro y W.
Parámetros:
Parámetros:
BSF
Setea un BIT, o sea que, lo pone a 1.
Parámetros:
Página 49 de 242
Niple v4.0 - Programación Visual de Microcontroladores
BTFSC
Consulta el valor del BIT, si es 0, se descarta una instrucción y ejecuta la siguiente.
Parámetros:
BTFSS
Consulta el valor del BIT, si es 1, se descarta una instrucción y ejecuta la siguiente.
Parámetros:
Parámetros:
Página 50 de 242
Niple v4.0 - Programación Visual de Microcontroladores
ANDLW
Realiza una operación lógica entre el literal (K) y W.
Parámetros:
IORLW
Realiza una operación lógica OR inclusiva entre el literal (K) y W.
Parámetros:
MOVLW
Asigna el valor del literal (K) a W.
Parámetros:
Página 51 de 242
Niple v4.0 - Programación Visual de Microcontroladores
SUBLW
Resta a W el valor del literal (K).
Parámetros:
XORLW
Realiza una operación lógica OR exclusiva entre W y el valor del literal (K).
Parámetros:
Instrucciones de Control
CLRWDT
Borra el contenido del registro Watchdog y su prescalador .
Página 52 de 242
Niple v4.0 - Programación Visual de Microcontroladores
NOP
Instrucción que se utiliza para consumir un ciclo de reloj.
Parámetros:
SLEEP
El procesador es puesto en modo Standby con el oscilador detenido.
Rutinas Básicas
Las rutinas básicas son módulos prediseñados y se encargan de resolver un proceso en particular (una
configuración, una comparación, un cálculo, etc.).
Puede formar estructuras lógicas muy complejas de manera rápida y sencilla a partir de la combinación
de rutinas básicas.
Utilice las rutinas básicas para programar dentro de cualquier “Entorno”.
Las rutinas básicas están organizadas por tipo de rutina:
Iniciar Programa
Este bloque corresponde al inicio del programa en Assembler , debe estar presente en el entorno del
“Programa Principal” y debe ser ingresado obligatoriamente. Por esto Niple lo
inserta de manera automática.
Al bloque de “Iniciar” no puede ingresar ningún vínculo. Solo acepta un
vínculo de salida.
Página 53 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Asignar Valor
Asignar valor a un Bit
Esta función permite asignarle un valor a un BIT.
Una vez seleccionado el BIT, se muestra una lista de valores de asignación (0 y 1). Seleccione el valor
deseado.
Por ultimo, puede ingresar un comentario adiciona a la función.
Si desea filtrar la lista de bits, active la casilla de verificación “Por registro” y seleccione el nombre del re-
gistro. De manera automática se mostrarán todos los bits declarados en el registro seleccionado.
Representación gráfica
Página 54 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Sintaxis
Destino = Origen
Esto se interpreta como: “al Bit ‘Destino’ se le asigna valor de ‘Origen’”.
Ejemplos
Sintaxis:
Destino = Origen
Esto se interpreta como: “al registro ‘Destino’ se le asigna el valor de ‘Origen’”.
Página 55 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Ejemplos:
Puertos
Configurar Puerto
Para consultar sobre la configuración de los puertos, remítase a la sección correspondiente a las rutinas
específicas de cada versión de Niple.
Leer Puerto
Permite obtener el valor actual de un puerto y
guardar el resultado en un registro. Es significa
que, se obtiene el estado de cada pin
correspondiente al puerto seleccionado.
En el campo “Puerto” seleccione el puerto que
desea Leer.
Niple supervisa la configuración del puerto
seleccionado de manera automática y advierte si el
puerto no está completamente como Entrada.
Si bien el hecho de leer el estado de un pin configurado como salida no es considerado un error, igual-
mente Niple le advierte para asegurarse que Ud. tiene pleno conocimiento de la actual configuración.
Escribir Puerto
Permite escribir un valor en un puerto. Este valor puede ser un valor literal (constante) o el valor de un
registro (variable).
Lo primero que debe seleccionar es el tipo de
dato desea escribir en el puerto. Seleccione el tipo
de dato y el valor a escribir en el puerto.
Niple supervisa la configuración del puerto
seleccionado de manera automática y advierte si el
puerto no está completamente como Salida.
Si bien el hecho de escribir un pin configurado
como entrada no es considerado un error,
igualmente Niple le advierte para asegurarse que Ud. tiene pleno conocimiento de la actual configuración.
Página 56 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Sintaxis
Puerto = Valor
Esto se interpreta como: “en ‘Puerto’ escribir ‘Valor’”.
Donde:
El parámetro ‘Puerto’ m uestra el nombre del puerto:
A = Puerto A
B = Puerto B
C = Puerto C
D = Puerto D
Activar/Desact. A/D
Este módulo es válido para los modelos de PIC de la línea 16F87x y para el modelo de PIC 12F675.
Para utilizar los módulos de conversión Analógica/Digital (A/D) primero debe configurar los canales de
conversión A/D, y luego debe “Activar” el módulo de conversión A/D.
Para obtener ayuda acerca de la configuración de los canales A/D,
consulte el tema “Rutinas_básicas/Puertos/Configurar Puerto”.
Para activar el módulo de conversión A/D, ingrese al árbol de
herramientas y seleccione la función “Rutinas Básicas / AD / Activar-Desact.
A/D” como se muestra en la imagen de la derecha :
Página 57 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Recuerde que está actuando sobre todo el módulo de conversión A/D independientemente de la cantidad
de canales configurados. O sea que, si habilita el módulo, está habilitando todos los canales disponibles y
cada canal no puede ser habilitado o inhabilitado de manera independiente.
Representación Gráfica:
Sintaxis:
A/D = Estado
Donde:
El parámetro “Estado” puede adoptar algunos de los siguientes valores:
Activado
Desactivado
Ejemplos:
Conversión A/D
Este módulo es válido para los modelos de PIC de la línea 16F87x y para el modelo de PIC 12F675.
Para poder realizar una conversión Analógica/Digital (A/D) primero debe realizar los siguientes pasos:
• Configurar los canales de lectura A/D. Para esto, consulte configuración del puerto A.
• Activar el módulo de conversión A/D. Para esto consulte Activar/Desct. A/D.
Una vez configurado y activado el módulo A/D, está en condiciones de realizar una conversión A/D.
Página 58 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Ingrese al árbol de herramientas y seleccione la opción “Insertar / Rutinas Básicas / A/D / Conversión
A/D” como se muestra en la imagen de la derecha.
Se presenta la pantalla “Conversión Analógica / Digital”.
En esta pantalla se muestra toda la información relacionada con el estado
actual del módulo de conversión A/D. Esto es:
Una vez seleccionado el canal por el cual realizar la conversión A/D, Niple le solicita que seleccione una
de las 2 maneras que tiene de realizar la conversión. Las explicaremos brevemente.
Página 59 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Elija la manera de realizar la conversión que Ud. des ea, seleccionando la opción correspondiente.
Sea cual fuere la opción que Ud. elija, a
continuación Niple le solicita que seleccione los
registros donde guardar el resultado de la conversión
A/D.
Si bien el conversor A/D del 12F675, realiza la
conversión AD con una resolución a 10 bits, Ud. pue-
de seleccionar la resolución de con la cual realizar la
conversión A/D, que puede ser a 8 o a 10 Bits.
Página 60 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si selecciona la resolución a 10 bits, el sistema configura automáticamente la alineación del resul tado de
la medición hacia la derecha y toma como resultado los 2 registros de la conversión A/D.
Niple le permite realizar varias lecturas y promediarlas con lo cual se obtienen mediciones más esta bles.
Página 61 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si decide no activar estos habilitadores, la interrupción no se producirá y por ende, el fin de la conversión
A/D no será “detectado”.
Al presionar el botón “Ingresar”, Niple realiza distintas acciones según del tipo de conversión A/D selec-
cionado (por Bucles o por Interrupción).
Página 62 de 242
Niple v4.0 - Programación Visual de Microcontroladores
En la siguiente imagen se muestran los bloques insertados de manera automática dentro del entorno “In-
terrupción por A/D”.
Página 63 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Representación gráfica:
Sintaxis:
Registro1, Registro2 = A/D(Nro_Canal)
Donde:
Registro1 = Nombre de un Registro
Registro2 = Nombre de un Registro
Nro_Canal = Número de canal en el cual se realiza la conversión A/D.
Ejemplos:
EEPROM
Leer EEPROM
Lee u n dato de la memoria EEPROM del microcontrolador y lo guarda en un registro.
Si el registro en el que desea guardar los datos no existe, haga clic en Nuevo.
Página 64 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Grabar EEPROM
Graba un literal o un registro en la memoria EEPROM del microcontrolador.
En posición de memoria a
escribir, seleccione entre las
opciones de dirección Fija o
Variable.
Si elige la opción variable,
seleccione de la lista el registro en
donde está contenida la dirección.
En Valor a grabar , seleccione
entre las opciones un literal o un
registro.
Si selecciona la opción un
registro, seleccione de la lista el
registro que desea guardar en la EE-
PROM
Presione le botón Ingresar .
Si el registro en el que desea guardar los datos no existe, haga clic en Nuevo.
Funciones Lógicas
Las funciones lógicas permiten realizar evaluaciones (comparaciones) de registros y bits con valores lite-
rales (constantes) o con los valores contenidos en otros registros y bits (variables).
Comparar Bit
Este bloque evalúa si el valor del BIT seleccionado es 0 o 1 y deriva el flujo del proceso en función del
resul tado de la evaluación.
En el campo “BIT a eva-
luar”, seleccione el nombre
BIT del que desea comparar
el valor y a continuación se-
leccione el valor con el cual
comparar el BIT. Un BIT solo
puede contener los valores 0
y 1.
Puede filtrar todos los bits
correspondientes a un regis-
tro determinado.
Página 65 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Para esto seleccione la casilla de verificación “Por Registro” y a continuación seleccione de la lista el
nombre del registro del cual se quieren filtrar todos los bits declarados en él.
Para verificar que realmente se ha seleccionado el BIT deseado, Niple le ofrece información acerca del
mismo. La información presentada es: número de BIT, nombre del registro al cual pertenece y comentario
asociado al BIT.
Por último, puede ingresar un comentario al bloque.
Una vez seleccionados todos los d atos, presione el botón Ingresar.
El primer bloque de salida insertado corresponde a la salida “SI”, es decir que, en tiempo de ejecución el
proceso “tomará” este camino si el resultado de la evaluación es verdadero.
El segundo bloque de salida insertado corresponde a la salida “NO”, es decir que, en tiempo de ejecu-
ción, el proceso “tomara” este camino si el resultado de la evaluación es falso.
Página 66 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si selecciona la opción “un Registro”, seleccione de la lista el registro que contiene el valor de compara-
ción, de lo contrario, ingrese el valor literal de comparación.
Por último puede ingresar un comentario al bloque.
Un a vez ingresados todos los datos solicitados, presiones el botón “Ingresar”.
Los operadores de comparación posibles pueden ser =, <, >, <=, >= o <> (distinto de).
Cada vez que debe seleccionar el nombre de un registro y ha olvidado declararlo previamente, Niple le
ofrece la posibilidad de declararlo sin necesidad de cancelar la pantalla actual. Para esto presione el botón
“Nuevo” que se encuentra a la derecha de la lista de registros correspondiente.
Este bloque debe ser vinculado a 2 bloques de salida:
El primer bloque de salida insertado corresponde a la salida “SI”, es decir que, en tiempo de ejecución el
proceso “tomará” este camino si el resultado de la evaluación es verdadero.
El segundo bloque de salida insertado corresponde a la salida “NO”, es decir que, en tiempo de ejecu-
ción, el proceso “tomara” este camino si el resultado de la evaluación es falso.
Página 67 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si selecciona la opción “Registros”, seleccione de la lista los registros que contienes el valor de compa-
ración, de lo contrario, ingrese el valor literal de comparación.
Por último puede ingresar un comentario al bloque.
Un a vez ingresados todos los datos solicitados, presiones el botón “Ingresar”.
Cada vez que debe seleccionar el nombre de un registro y ha olvidado declararlo previamente, Niple le
ofrece la posibilidad de declararlo sin necesidad de cancelar la pantalla actual. Para esto presione el botón
“Nuevo” que se encuentra a la derecha de la lista de registros correspondiente.
Este bloque debe ser vinculado a 2 bloques de salida:
El primer bloque de salida insertado corresponde a la salida “SI”, es decir que, en tiempo de ejecución el
proceso “tomará” este camino si
el resultado de la evaluación es
verdadero.
El segundo bloque de salida
insertado corresponde a la salida
“NO”, es decir que, en tiempo de
ejecu ción, el proceso “tomará”
este camino si el resultado de la
evaluación es falso.
Matemáticas
8 Bits
Adición (8)
Realiza una operación matemática de Adición,
utilizando como sumandos un valor literal o un
registro. El resultado puede ser guardado en W o
en otro registro.
En Sumando1 seleccione entre las opciones un
literal o el valor de un Registro.
Si seleccionó la opción el valor de un Registro,
seleccione de la lista el registro a utilizar como Su-
mando1.
Repita la operación an terior en Sumando2.
En Resultado, seleccione entre las opciones en
el registro W o en otro registro.
Si seleccion a la opción en otro registro, seleccione de la lista el registro en donde quiere guardar el resul-
tado de la operación.
Página 68 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Sustracción (8)
Realiza una operación matemática de sustracción, utilizando como minuendo y sustraendo un valor lite -
ral o un registro. El resultado puede ser
guardado en W o en otro registro.
División (8)
Realiza una operación matemática de
división, utilizando como divisor valores de un
literal o un registro. El resultado puede ser
guardado en W o en otro registro.
Página 69 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Multiplicación (8)
Realiza una operación matemática de Multiplicación con registros o valores a 8 bits, utilizando como mul-
tiplicador valores de un literal o un registro. El resultado puede ser guardado en W o en otro registro.
En Multiplicando seleccione entre las
opciones un literal o el valor de un Registro.
Reg(8) a BCD
Realiza el cálculo de conversión de un número a BCD, es decir, descomponer el valor contenido en un
registro a unidad, decena y centena.
Página 70 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Cálculos a 16 Bits
Adición (16)
Realiza una operación matemática de Adición de valores a 16 bits, utilizando como sumandos un valor li-
teral o el valor formado por 2 registros.
El resultado puede es guardado en 2
registros.
En Sumando1 seleccione entre las opciones
un literal o del valor de 2 Registros.
Si seleccionó la opción “Registros”,
seleccione de la lista el registro a utilizar como
Sumando1.
Repita la operación anterior en Sumando2.
Sustracción (16)
Realiza una operación matemática de
sustracción con valores a 16 bits, utilizando
como numerador o denominador un valor literal
o el valor de 2 registros. El resultado es
guardado en otros 2 registros.
En Denominador seleccione entre las
opciones un literal o el valor de 2 Registros.
Si seleccionó la opción “Registros”,
seleccione de la lista los registros a utilizar
como Denominador.
Repita la operación anterior en Sustraendo.
Seleccione los registros donde guardar el
resultado de la operación.
Página 71 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Multiplicación (16)
Realiza una operación matemática de
Multiplicación con valores a 16 bits,
utilizando como multiplicador valores de un
literal o el valor contenido en 2 registros.
El resultado puede es guardado en 4
registros.
En Multiplicando seleccione entre las op-
ciones un literal o el valor de 2 Registros.
Página 72 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Escalar
La función “Escalar” permite, a partir de un valor dentro de un rango “origen”, calcular el valor proporcio-
nal correspondiente a un rango “destino”.
Por ejemplo: Los registros “Dato1” y “Dato2” contienen el resultado de una conversión A/D, es decir, un
valor a 10 bits entre 0 y 1023.
Ahora suponga que desea controlar el ancho de pulso del PWM a 5000 Hz. El ancho de pulso es contro-
lado por medio de un valor a 10 bits
contenido en los registros
“AnchoPulso1” y “AnchoPulso2”. A
5000 Hz el rango váli do para el
control del ancho de pulso esta
comprendido entre 0 y 200.
Partiendo de esto, Ud. ne cesita
escalar el valor contenido en los
registros “Dato1” y “Dato2” de un
rango 0..1023, a un rango 0..200 y
asignarlo a los registros
“AnchoPulso1” y “AnchoPulso2”.
De esta manera se obti ene un
valor proporcional, es decir, el mismo
porcentaje o relación entre el rango
de destino con respecto al rango de
origen.
Página 73 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Comunicaciones
RS232
Para consultar sobre los módulos de comunicación RS232, rem ítase a la sección correspondiente a las
rutinas específicas de cada versión de Niple.
RS485
Si bien el módulo RS485 está disponible en todas las versiones de Niple, en los modelos 16F84 y los
modelos de la línea 12F6xx no se encuentra la opción de comunicación por USART dado que estos mode-
los de PIC no disponen en un módulo USART.
Dado que, salvando la diferencia antes mencionada, el módulo de comunicación RS485 se utiliza de la
misma manera y cuenta con las mismas opciones, hemos decidido poner este bloque en la sección de ruti-
nas comunes.
La comunicación RS2485 le permite conectar varios microcontroladores “en red”. Generalmente una red
de microcontroladores está formada por un micro llamado “Maestro”, el cual se encarga de organizar el fun-
cionamiento de la red, enviando comandos y solicitando informació n al resto de los de micros denomina dos
“esclavos ”. En general , los dispositivos esclavos responden enviando los datos solicitados por el maestro o
ejecutan comandos enviados por el maestro.
Una red 485 puede estar formada por hasta 256 dispositivos escla vos a una distancia má xima aprox. de
1200 metros y cada dispositivo esclavo debe estar identificado por un “número de dispositivo”.
En general, el micro maestro es un modelo de micro “grande” y se encarga de realizar los procesos prin-
cipales (Ingreso de datos al sistema, interfaz con el usuario, LCD, display de 7 segmentos, conexión a PC,
etc.) mientras que los dispositivos esclavos, generalmente son micros más pequeños que realizan los pro-
cesos “distribuidos”, es decir, los procesos locales propios de cada punto de control y pueden contar con un
alto grado de au tonomía.
Cuando un microcontrolador en modo “Maestro” solicita datos a otro microcontrolador en modo “Esclavo”
las interfaces (DS75176) de ambos micros deben conmutar a modo “Transmisión“ y “Recepción” respecti-
vamente y si el esclavo debe responder con algún dato al maestro, ambos micros deben cambiar el estado
de sus interfaces (“Maestro” en modo recepción y “Esclavo” en modo Transmisión) mediante el pin de con-
trol del la interfaz (DS75176). Y cuando termine el envío de datos al maestro, deben volver a conmutar el
modo de sus interfaces al estado inicial. Niple coordina de manera automática el cambio de modo de trabajo
(TX/RX) de las interfaces.
Página 74 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Modo Maestro
Para ingresar a los módulos de RS485 ingrese al árbol de herramientas
como lo muestra la imagen de la derecha.
Se presenta la pantalla “Comunicación RS485 – Dispositivo Maestro”.
Niple le permite utilizar el módulo USART para realizar las comunicaciones
RS485.
Seleccione el modo de comunicación , por módulo USART o por código.
Página 75 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Niple le recomienda NO utilizar el módulo USART para realizar comunicaciones RS485 en modo “Maes-
tro” dado que la mayor parte del control (envío y recepción de datos) se realiza por código y no por interrup-
ciones de USART.
Por ejemplo, cuando un PIC en modo “maestro” solicita datos a otro micro en modo “Esclavo”, el maes-
tro, “sabe” que “debe esperar” la respuesta del esclavo y también cuantos datos debe recibir como respues-
ta. Es decir, que en este caso, la recepción de los datos es totalmente “previsible”.
Por esto no es necesario utilizar la interrupción por USART para la recepción de los datos del esclavo.
Es recomendable utilizar el módulo USART para el tipo de comunicación RS232, por ejemplo para recibir
datos desde una PC, lo cual sí puede resultar totalmente imprevisible y la interrupción por USART resulta de
vital importancia.
En el modo de comunicación “por código” Niple le permite seleccionar los pines de TX y RX. Dado que
no se utiliza el módulo USART del PIC
En ambos modos de comunicación, debe seleccionar el pin de selección de TX/RX.
Niple soli cita este el tipo de conexión ya que en una comunicación “Punto a Punto” el maestro se cone cta
con un “esclavo” de manera directa, es decir que no se configura una red con varios esclavos, sino que se
conecta un solo esclavo, y eso implica que no es necesario asignarle un “nro. de esclavo” y por ende, Niple
no requiere este dato.
Página 76 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si por el contrario selecciona la opción “Red”, esto significa que el dispositivo maestro va estar conecta-
do a una red de varios micros esclavos y por esto solicita que se indique el nro de esclavo al cual se va a di-
rigir el comando.
En este caso vamos a utilizar la opción “Red” para mostrar como Niple solicita el nro de esclavo. Obser-
ve que en la línea de texto debajo de la velocidad de comunicación Niple incluye una breve descripción so-
bre el tipo de comunicación seleccionado.
Al seleccionar la opción de conexión, Niple ya le puede mostrar la configuración del hardware correspon-
diente.
Para interpretar mejor cada una de las funciones disponibles, aclaramos los significamos que damos a
las siguientes palabras:
• Comando: Enviar una orden a un esclavo a partir de la cual el esclavo realiza una determi-
nada acción pero esta acción no incluye el envío de una “respuesta” desde el esclavo hacia el
maestro.
• Interrogar: Solicitar un dato a un esclavo, en general el esclavo responde inmediatamente sin
realizar ningún procesos antes de enviar los datos solicitados.
A partir de este punto, las opciones de la pantalla dependen de la función seleccionada
Página 77 de 242
Niple v4.0 - Programación Visual de Microcontroladores
• Recibir datos: Recibe datos desde un esclavo. Muestra la solapa “Recibir datos”.
Página 78 de 242
Niple v4.0 - Programación Visual de Microcontroladores
A continuación vamos a describir las secciones de “Enviar datos” y “Recibir datos” las cuales son comu-
nes a todas las funciones.
Enviar Comandos
En esta sección se indican cuales son los comandos o datos a enviar.
Como mencionamos anteriormente, si selecciona el modo de conexión “Punto a punto” no necesita es-
pecificar el nro. de esclavo.
Pero si ha seleccionado el modo de conexión en “Red” deberá indicar el nro de esclavo al cual va a en-
viar el dato o comando.
Página 79 de 242
Niple v4.0 - Programación Visual de Microcontroladores
En este caso vamos a diseña r un protocolo de comunicación formado por 3 niveles de comandos.
§ Nivel 1 = “Comando”. Indica el comando que debe ejecutar el esclavo cuyos valores
posibles pueden ser:
• 01 – Habilitar sensor
• 02 – Inhabilitar sensor
• 03 – Leer sensor
El primer nivel de comandos es el “Comando propiamente dicho” y los 2 niveles restantes podemos in-
terpretarlos como “Pa rámetros” los cuales indican sobre qué sensor se desea ejecutar el comando.
Página 80 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Recibir Respuesta
En esta sección se indica como reci bir los
datos que envían los esclavos.
Recuerde que es ta sección solo esta
disponible para las funcione “Interrogar
Esclavo” y “Recibir Datos”.
Página 81 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Checksum
Niple le permite calcular el checksum de
manera automática.
Para esto active la opción “Calcular e incluir el
checksum al enviar y recibir los datos” que se
encuentra en la sección “Configuración” .
Al seleccionar la opción de checksum, se
agregar automáticamente 2 registros, que son en
los cuales se va a realizar el cálculo.
En el caso del envío de datos se calcula de
manera automática el checksum y se realiza el
envío de los bytes de CRC (checksum).
En el caso de la recepción de datos, se
reciben los bytes de CRC y se calcula y verifica el checksum poniendo a 0 el bit “rx_ok” (bit 0 del registro
_np_banderas).
Página 82 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Modo Esclavo
Para ingresar al módulo de “RS485 – Dispositivo Esclavo“ ingrese al árbol
de herramientas como lo muestra la imagen de la derecha.
Se presenta la pantalla “Comunicación RS485 – Dispositivo Maestro”.
Niple le permite utilizar el módulo USART para realizar las comunicaciones
RS485.
Seleccione el modo de comunicación, por módulo USART o por código.
Si selecciona el modo de comunicación por USART, Niple selecciona de
manera automática los pines correspondientes a TX y RX e inhabilita los
mismos, dado que los mismos ya vienen preestablecidos para ser utilizados por el módulo USART.
Niple le recomienda NO utilizar el módulo USART para realizar comunicaciones RS485 en modo “Maes-
tro” dado que la mayor parte del control (envío y recepción de datos) se realiza por código y no por interrup-
ciones de USART.
Por ejemplo, cuando un PIC en modo “maestro” solicita datos a otro micro en modo “Esclavo”, el esclavo
“sabe” cuando comandos debe esperar. Es decir, que en este caso, la recepción de los datos es totalmente
“pr evisible”.
Por esto no es necesario utilizar la interrupción por USART para la recepción de los datos del esclavo.
Es recomendable utilizar el módulo USART para el tipo de comunicación RS232, por ejemplo para recibir
datos desde una PC, lo cual sí puede resultar totalmente imprevisible y la interrupción por USART resulta de
vital i mportancia.
Página 83 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Niple solicita este el tipo de conexión ya que en una comunicación “Punto a Punto” el maestro se conecta
con un “esclavo” de manera directa, es decir que no se configura una red con varios esclavos, sino que se
conecta un solo esclavo, y eso implica que no es necesario asignarle un “nro. de esclavo” y por ende, Niple
no requiere este dato.
Si por el contrario selecciona la opción “Red”, esto significa que el dispositivo maestro va estar conecta-
do a una red de varios micros esclavos y por esto es necesario indicar que nro. de esclavo es el que corres-
ponde al dispositivo actual .
Al seleccionar la opción de conexión, Niple ya le puede mostrar la configuración del hardware correspon-
diente.
Página 84 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Y para que un micro pueda ser utilizado en el lugar de cualquiera de los otros micros esclavos es indis-
pensable que el nro. de esclavo pueda ser modific ado sin necesidad de reprogramar el PIC.
Esto se logra utilizando un nro. de esclavo “variable”. Y haciendo que el micro obtenga el nro. de escla-
vo al iniciar el programa.
Para interpretar mejor cada una de las funciones disponibles, aclaramos los significamos que damos a
las siguientes palabras:
• Consulta : Recibir una orden desde el maestro y responder enviando uno o varios datos .
• Comando: Recibir una orden desde el maestro y realizar una determinada acción pero esta
acción no incluye el envío de una “respuesta” hacia el maestro.
• Respuesta : Enviar datos al maestro.
Página 85 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Recibir Comandos
En esta sección se indica como recibir los comandos que envía el maestro .
Recuerde que esta sección solo esta disponible para las funcione “Responder Consulta” y “Recibir Co-
mandos”.
Como mencionamos anteriormente, en una red 485, cada dispositivo esclavo se identifica mediante un
“número de esclavo”. En la sección “Configuración” se definió el valor que identifica al dispositivo actual.
Ahora debe seleccionar el registro en el cual guardar el nro. de dispositivo enviado por el mae stro.
Al recibir los datos, Niple compara automáticamente el valor del dispositivo actual con el “nro. de escla-
vo” recibido desde el maestro y determina si el esclavo esta enviando comandos al dispositivo actual.
Si el nro. de esclavo actual no coincide con el enviado por el maestro, Niple ignora el resto de los co-
mando de manera automática.
Página 86 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si el nro. de esclavo enviado por el maestro coincide con el nro. de dispositivo actual, Niple recibe y eje-
cuta el resto de los comandos de manera automática.
Seleccione el registro en el cual recibir el nro de dispositivo.
El registro del “nro. de esclavo recibido” NO ES EL MISMO que el registro de nro de esclavo selecciona-
do en la sección “Con figuración” .
Debe seleccionar un registro diferente al utilizado para guardar el nro de esclavo actual.
Seleccione cada uno de los registros en los cual es desea guardar los comandos recibido.
Página 87 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Enviar Respuesta
Para enviar la respuesta al a maestro,
primero debe seleccionar la cantidad de
registros que desea e nviar.
Mientras que si selecciona el tipo de datos variable, Niple envía el dato guardado en el registro seleccio-
nado.
Página 88 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Tablas
Una tabla consiste en una metodología de programación a través de la cual se pueden realizar consultas
obteniendo un valor de resultado en fun ción de un valor de entrada (índice).
Por ejemplo: la siguiente tabla devuelve el código ASCII correspondiente al valor ingresado como índice.
Página 89 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Si detecta de ha cometido un error al ingresar alguno de los valores de la tabla, puede editarlo haciendo
doble clic sobre el elemento a corregir.
Una vez ingresados todos lo valores que conforman la t abla presione el botón “Ingresar”.
Al presionar el botón “Ingresar” Niple guarda la tabla
actual en un archivo con extensión .TBL
A continuación le solicita que ingrese el nombre del
archivo de tabla.
Página 90 de 242
Niple v4.0 - Programación Visual de Microcontroladores
ConsultarTabla
Carga una tabla, la cual debe haber sido previamente
definida.
Temporizadores
Tiempos por Bucles
Niple le permite realizar temporizaciones tanto “Fijas” o “Variables”.
Con la temporización Fija puede genera temporizaciones entre 10 Microsegundos y 255 Segundos con
una precisión de 1 uS.
Página 91 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Visual ización
Display de 7 segmentos
Multiplexado
Este módulo permite visualizar valores en displays de 7 segmentos mediante conexión a 7 bits, es decir,
sin la utilización de un codificador para generar la combi nación binaria correspondiente a cada valor.
Niple le permite utilizar hasta 8 displays conectados en paralelo.
Primero seleccione el tipo de display a utilizar, esto es: Ánodo Común o Cátodo Común.
Una vez seleccionado el tipo de display a utilizar, Niple le presenta información acerca del estado de los
puertos. Esta información es importante a la hora de seleccionar los pines de conexión de los displays.
Si algún puerto aún no ha sido configurado, Niple le ofrece la oportunidad de configurarlo. Pero lo reco-
mendable es cancelar el cuadro de visualización en displays, configurar el puerto en el inicio del programa y
volver cargar el módulo de visualización por displays.
Luego le solicita que seleccione la cantidad de displays a utilizar esto es, entre 2 y 8.
Página 92 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Al hacer doble clic en la imagen de un display se presenta la pantalla de “Mostrar un valor en un display”.
En un display puede visualizar 2 tipos de valores:
1) Puede visualizar el valor que contiene un
registro: se trata de un valor que puede ser
variable. Al seleccionar este tipo de dato a
visualizar, Niple le ofrece la posibilidad de codificar
el valor mediante una tabla. Si el dato a visualizar
requiere codificación mediante tabla, seleccione la
tabla.
Página 93 de 242
Niple v4.0 - Programación Visual de Microcontroladores
El criterio de selección de los pines del bus de datos es el mismo que para los pines de habilitación de
los displays.
Página 94 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Una vez seleccionados los pines correspondientes al bus de datos. Niple solicita que ingrese el tiempo
de muestreo, es decir, el tiempo que permanece encendido cada display en el proceso de multiplexado.
Por defecto se asigna el valor de 200 uS. En general, no es necesario cambiar este valor.
Cuando seleccione los pines tanto de habilitación de los displays como los pines del bus de datos, Niple
controla que no se repitan los pines seleccionados, dado que esto produciría un error en el proceso de mul-
tiplexado.
Al repetir alguno de los pines solicitados, Niple los presenta en color rojo y deshabilita el botón “Ingresar”.
Una vez ingresados todos los parámetros necesarios. Puede consultar el esquema de conexi ón que se
muestra en la solapa “esquema”.
Puede realizar una impresión del esquema de conexión haciendo un clic en el boto “Imprimir”.
Página 95 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Multiplexado (4511)
Este módulo permite visualizar valores en displays de 7 segmentos mediante u codificador CD4511 para
generar la combinación binaria correspondiente a cada valor.
Una de las
ventajas de este tipo
de visualización es
que solo se requieren
4 bits para el bus da
datos a diferencia de
los 7 bits requeridos
para la visualización
sin codificador.
Niple le permite
utilizar hasta 8
displays conectados
en paralelo.
Primero
seleccione el tipo de
display a utilizar.
Una vez seleccionado el tipo de display a utilizar, Niple le presenta información acerca del estado de los
puertos. Esta información es importante a la hora de seleccionar los pines de conexión de los displays.
Si algún puerto aún no ha sido configurado, Niple le ofrece la oportunidad de configurarlo. Pero lo reco-
mendable es
cancelar el cuadro
de visualización en
displays, configurar
el puerto en el inicio
del programa y
volver cargar el
módulo de
visualización por
displays.
Luego le solicita
que seleccione la
cantidad de displays
a utilizar esto es,
entre 2 y 8.
A continuación
debe seleccionar los
Página 96 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Página 97 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Una vez seleccionados los pines de habilitación de cada display, Niple le solicita que seleccione los pi-
nes correspondientes al bus de datos. En este caso se trata de 4 pines los cuales son conectados al
CD4511.
El criterio de selección de los pines del bus de datos es el mismo que para los pines de habilitación de
los displays.
Una vez seleccionados los pines correspondientes al bus de datos. Niple solicita que ingrese el tiempo
de muestreo, es decir, el tiempo que permanece encendido cada display en el proceso de multiplexado.
Por defecto se asigna el valor de 200 uS. En general, no es necesario cambiar este valor.
Cuando seleccione los pines tanto de habilitación de los displays como los pines del bus de datos, Niple
controla que no se repitan los pines seleccionados, dado que esto produciría un error en el proceso de mul-
tiplexado.
Al repetir alguno de los pines solicitados, Niple los presenta en color rojo y deshabilita el botón “Ingresar”.
Página 98 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Una vez ingresados todos los parámetros necesarios. Puede consultar el esquema de conexión que se
muestra en la solapa “esquema” .
Puede realizar una impresión del esquema de conexión haciendo un clic en el boto “Imprimir”.
Página 99 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Pantalla LCD
Niple le permite controlar más de 1 pantalla LCD de manera simultánea en el mismo proyecto. Esto es se
logra conectando las pantallas LCD en paralelo y los pines de control de cada pantalla se asignas a distin-
tos pines del microcontrolador. Niple administra las rutinas de control de manera au tomática. Ud., solo de
indica que mensaje desea visualizar en cada una de las pantallas LCD.
Principales características:
Configurar LCD
Una vez configurado el puerto donde conectar el LCD debe proceder a configurar el LCD de la siguiente
manera:
Seleccione el bloque al cual vincular el nuevo bloque de configuración de LCD.
Ingrese al árbol de herramientas en:
En Niple, la configuración de un LCD consiste en seleccionar de qué manera será conectado el LCD al
microcontrolador.
La configuración de un LCD se realiza sólo 1 vez.
Dado que Niple puede controlar más de 1 LCD de manera simultanea, en esta pantalla se presenta el
número de LCD que está siendo configurado.
Primero debe seleccionar el tamaño del bus de datos, el cual puede ser de 4 u 8 bits.
Se recomienda utilizar el bus de datos a 4 bits dado que la diferencia con el bus a 8 bits es insignificante
tanto en el código generado como en le tiempo de ejecución del programa y, por el contrario, los 4 pines
que se ahorra pueden ser de gran importancia.
Una vez seleccionado el tamaño del bus de datos, debe seleccionar los pines a los cuales conectar el
LCD.
Si selecciona el bus de datos a 4 bits, Niple le ofrece la posibilidad de utilizar los 4 pines de mayor o me-
nor peso de un mismo puerto. Esto simplifica el código Assembler generado.
Además, indica en la imagen del LCD los pines que deben ser conectados.
A continuación seleccione los pines correspondientes al bus de datos. Para esto debe seleccionar el
puerto correspondiente en la lista “Puerto”.
Si ha seleccionado el bus de datos a 4 bits, Niple le solicitará que seleccione los pines correspondientes.
Si ha seleccionado el bus de datos a 8 bits, Niple asignará al bus de datos, todos los pines del puerto se-
leccionado.
Una vez seleccionados los pines correspondientes al bus de datos, presione el botón “Asignar”
Por último debe seleccionar los pines del control del LCD. Para esto haga un clic en la casilla de verifica-
ción correspondiente a cada pin de control (RS, RW, E).
Cuando activa la casilla de verificación de un pin de control, Niple le muestra información acerca del pin
seleccionado y los valores de control correspondientes (0 y 1).
Al igual que en el caso de los pines del bus de datos, una vez que haya seleccionado el puerto y el pin
correspondiente, presione el botón “Asignar”.
Como lo describe el mensaje, Niple utilizara los pines del bus de datos y los pines de control del LCD RS
y RW para el nuevo LCD y estas opciones permanecerán inhabilitadas al cargarse la pantalla “Configurar
LCD”. Sólo deberá seleccionar el pin correspondiente al control “E” para el nuevo LCD.
La metodología de visualización de
mensajes en Niple consiste en generar un
mensaje. Esto implica configurar la pantalla,
el cursor y diseñar el mensaje propiamente
dicho.
Una vez “diseñado” el mensaje, puede ser
aplicado a cualquier LCD mediante el módulo
de visualización de mensajes.
Para generar un nuevo mensaje ingrese al
árbol de herramientas a la sección:
Insertar/Rutinas Bási cas/Visualiza-
ción/Pantalla LCD/Nuevo Mensaje
Dado que el objetivo de Niple es minimizar al máximo la posibilidad de error, ofrece esta opción como
habilitada para que realice la limpieza de la pantalla antes de visualizar el mensaje actual.
La limpieza de la pantalla incluye la ubica ción del cursor al inicio del LCD, esto es, en la línea 1, carácter
1. Por esto, si la opción “Limpiar Pantalla” se encuentra activada, entonces, la opción “Ubicar el cursor en el
Inicio” se encuentra inhabilitada dado que la limpieza de pantalla incluye esta función.
Por esto, si la opción “Limpiar Pantalla” se desmarca, se activa la opción “Ubicar el cursor”.
Como lo indi can las referencias, el texto del mensaje se muestra en color rojo.
A la izquierda y a la derecha de la grilla del mensaje se encuentran botones para desplazamiento del tex-
to ingresado. De esta manera puede ajustar la visualización del texto.
En la siguiente imagen, el texto ha sido desplazado hacia la derecha para ajustarlo al centro de la panta-
lla.
El botón “Limpiar Todo” le permite limpiar la grilla del texto cuando Ud. desea corregir el mensaje.
Para ingresar un valor variable en un mensaje haga doble clic en la celda donde desea visualizar la va-
riable. Se presentará la pantalla de selección de variables:
Esta pantalla le solicita que seleccione el registro donde tiene almacenado el valor variable a visualizar.
Si el valor variable corresponde a un número, antes de ser enviado al LCD debemos convertirlo a su corres-
pondiente código ASCII ya que el LCD solo puede mostrar caracteres ASCII. Además si el número es mayor
a 9 debemos enviar realizar la conversión a BCD y enviar los valores correspondientes a las unidades, las
decenas, las centenas, etc., por separado.
Niple le ofrece la posibilidad de convertir en número
a código ASCII de manera automática. Para esto debe
seleccionar la opción “Convertir valor numérico a código
ASCII”. La cual se encuentra seleccionada de manera
predeterminada.
Si lo que desea enviar no corresponde a un valor
numérico sino a un código ASCII que Ud. ya tiene defi-
nido en el programa, debe marcar la opción “No
convertir valor numéri co a código ASCII”.
Si desea consultar a qué valor corresponde a una variable. Haga un clic sobre la celda donde se encuen-
tra la variable y Niple le mostrará a que valor corresponde la misma como lo muestra la imagen anterior.
El formato del texto pu ede ser uno de los 2 siguientes:
1) ? = ASCII(Nombre_Registro):
Esto significa que la variable
corresponde al carácter ASCII del
valor que contiene el registro
“Nombre_Registro”.
2) ? = Nombre_Registro: Esto
significa que la variable
corresponde al valor que contiene
un registro sin convertirlo a código
ASCII.
Por último si ha configurado el cursor como “Visible”, Niple le solicita que ingrese la ubicación donde
quiere visualizar el cursor.
Mostrar Mensaje
Una vez definido el mensaje, puede visualizarlo en cualquier parte del programa ingresando al árbol de
herramientas a:
Insertar/Rutinas Básicas/Visualización/Pantalla LCD /Mostrar Mensaje
Se presentará la pantalla “Mostrar un mensaje en LCD”.
Primero debe seleccionar el LCD en el cual debe desea visualizar el mensaje y a continuación indica el
nombre del mensaje a visualizar. De esta manera un mismo mensaje puede ser visualizado en cualquier
LCD.
Al presionar el botón “Ingresar”, Niple ingresa 2 bloques. En el primer bloque se declara el LCD seleccio-
nado como “LCD Actual”. El segundo bloque corresponde a la visualización del mensaje (llamada a rutina
de usuario). El mensaje será visualizado en el LCD que esté definido como actual.
Comandos
Enviar comandos
Niple le permite enviar una serie de comandos al LCD solo indicando el nombre del comando deseado.
Para facilitarle aún más el manejo de las pantallas LCD, algunos comandos le permite realizar reconfigura-
ciones de pantalla o cursor.
• Configurar el cursor: Permite reconfigurar el cursor. Este comando requiere que nec e-
sariamente configure la visualización de los caracteres.
Enviar caracteres
Además de configurar la visualización de mensajes, Niple le permite enviar caracteres independiente-
mente de un mensaje.
Esto es muy común cuando se realizan proyectos con ingreso de datos, los cuales son mostrados en la
pantalla LCD. Por ejemplo; Ud. diseña el mensaje de solicitud de ingreso de datos. En general, en estos ca-
sos, configura el cursor como visible e intermitente y lo ubica en la posición donde el usuario debe “ingresar
el mensaje” y luego espera el ingreso de los datos. Cada vez que el usuario ingresa un dato, el microcontro-
lador lo captura, por interrupción por ejemplo, y lo envía a la pantalla LCD donde el usuario puede visualizar
los datos que esta ingresando.
Este “envío” de datos al LCD, corresponde a la
función de Niple de envío de carácter .
Teclado
Teclado Matricial
El módulo de teclado matricial permite capturar el valor de la tecla presionada en un teclado matricial de
3x4 o de 4x4 y lo guarda en un registro.
Para ello utiliza interrupciones por cambio de estado en RB4 a RB7.
Niple verifica que la interrupción por RB4 -7 se encuentre activada. Si la interrupción no se encuentra ac-
tivada no permite en ingreso del módulo.
Dado que se utiliza la interrupción por RB4-7, Niple requiere que los pines correspondientes a las co-
lumnas del teclado matricial sean conectados a los pones RB4-7, mientras que le permite seleccionar libre-
mente los la conexión de los pines correspondientes a las filas.
Al ingresar a la pantalla de teclado matricial, Niple le solicita que seleccione el registro donde guardar el
valor de la tecla presionada.
Luego le solicita que seleccione el tipo de teclado matricial que desea conectar.
Y por ultimo que seleccione los pines correspondientes a las filas del teclado matricial.
Luego debe seleccionar la dirección de memoria que desea leer desde la memoria EEPROM.
Primero debe selecciona el tipo de dirección, la cual puede ser “Fija” o “Variable”.
Si selecciona el tipo de dirección “Fija” debe ingresar la posición de memoria a leer en formato decimal.
Niple controla que la dirección ingresada no supere el límite máximo de cantidad de regist ros que contiene
le modelo seleccionado. Mediante este tipo de acceso (por dirección fija) el microcontrolador accederá a la
dirección ingresada cada vez que se ejecute el bloque actual.
Una seleccionada la dirección a leer, debe seleccionar el registro donde guardar el dato obtenido desde
la memoria.
Por último, puede ingresar un comentario.
Recuerde que puede conectar varios dispositivos en paralelo formando una red, en la cual, a cada dis-
positivo se le asigna un numero. Este número de dispositivo se configura conectado los pines correspon-
dientes de cada dispositivo. La
cantidad de dispositivos que puede
incluir en una red depende del modelo
de memoria que esta utilizando. Niple
controla de manera automática la
cantidad de dispositivos que puede
conectar en función del modelo
seleccio nado.
Luego debe seleccionar la
dirección de memoria que desea leer
desde la memoria EEPROM.
Primero debe selecciona el tipo de
dirección, la cual puede ser “Fija” o
“Variable”.
Si selecciona el tipo de dirección
“Fija” debe ingresar la posición de
memoria a leer en formato decimal.
Niple controla que la dirección ingresada no supere el límite máximo de cantidad de registros que contiene
le modelo seleccionado. Mediante este tipo de acceso (por dirección fija) el microcontrolador accederá a la
dirección ingresada cada vez que se ejecute el bloque actual.
Si selecciona el tipo de dirección “Variable” debe seleccionar el registro que contiene el valor correspon-
diente a la posición de memoria que desea leer.
En este caso, Niple no controla que la dirección ingresada no supere el límite máximo de cantidad de re-
gistros que contiene el modelo seleccionado dado que no se puede predeterminar que valor tendrá el regis-
tro seleccionado al ejecutarse el programa.
Mediante este tipo de
acceso (por dirección variable)
el microcontrolador accederá a
la dirección correspondiente al
valor que contiene el registro
cada vez que se ejecute el
bloque actual.
Una vez seleccionada la
dirección a escribir, debe
indicar el dato que desea
grabar en la memoria.
Una vez ingresados los parámetros requeridos, puede visualizar el esquema de conexión.
Memorias RAM
Leer Memoria RAM I2C
Niple le permite utilizar memorias RAM. Actualmente soporta la memoria
PCF8570 la cual tiene una capacidad de 256 registros. Esto le permite
aumentar considerablemente la capacidad de procesamiento de los PIC, sobre
todo, los que tienen menos capacidad de memoria.
Puede conectar hasta 8 memorias en un bus I2C.
Para leer datos de la memoria RAM ingrese al árbol de herramientas como
se muestra en la imagen de la derecha:
Se presenta la pantalla “Leer memoria RAM por I2C”.
Seleccione el modelo de memoria
que desea utilizar. Al seleccionar el
modelo, Niple le muestra la cantidad
de registros de 8 bits que contiene el
modelo seleccionado.
Actualmente, Niple soporta la
memoria RAM PCF8570 pero en
futuras versiones se irán agregando
más modelos.
Luego debe seleccionar los pines
de señal de reloj y de datos
correspondientes al bus I2C. Primero
seleccione el puerto y luego el pin
correspondiente.
Una vez seleccionados los pines
del bus I2C, debe seleccionar el
número de dispositivo al cual desea
acceder.
Recuerde que puede conectar
varios dispositivos en paralelo fo r-
mando una red, en la cual, a cada dis-
positivo se le asigna un número. Este
número de dispositivo se configura
conectado los pines corresp on dientes
de cada dispositivo. La cantidad de
dispositivos que puede incluir en una
red depende del modelo de memoria
que esta utilizando. Niple controla de
manera automática la cantidad de
dispositivos que puede conectar en función del modelo seleccionado.
Luego debe seleccionar la dirección de memoria que desea leer desde la memoria RAM.
Primero debe selecciona el tipo de dirección, la cual puede ser “Fija” o “Va riable”.
Si selecciona el tipo de dirección “Fija” debe ingresar la posición de mem oria a leer en formato decimal.
Niple controla que la dirección ingresada no supere el límite máximo de cantidad de registros que contiene
le modelo seleccionado. Mediante este tipo de acceso (por dirección fija) el microcontrolador accederá a la
dirección ingresada cada vez que se ejecute el bloque actual.
Una seleccionada la dirección a leer, debe seleccionar el registro donde guardar el dato obtenido desde
la memoria.
Por último, puede ingresar un c omentario.
Si selecciona el tipo de dirección “Variable” debe seleccionar el registro que contiene el valor correspon-
diente a la posición de memoria que
desea leer. En este caso, Niple no
controla que la dirección ingresada no
supere el límite máximo de cantidad
de registros que contiene el modelo
seleccionado dado que no se puede
predeterminar que valor tendrá el re-
gistro seleccionado al ejecutarse el
progr ama.
Mediante este tipo de acceso (por dirección variable) el microcontrolador accederá a la dirección corres-
pondiente al valor que contiene el registro cada vez que se ejecute el bloque actual.
Puede configurar cualquiera de estos parámetros de manera independiente, es decir, que no debe confi-
gurar todos los parámetros, sino, sólo los que necesite .
Configuración de Fecha
Para configurar la Fecha actual, ingrese a la “Ficha” con el nombre “Fecha”.
Seleccione los parámetros que desea configurar (Día, Mes, Año, Día de la Semana) marcado las opcio-
nes correspondientes. Cada uno de estos datos puede ser de tipo “Fijo” o “Variable”.
Los valores a ingresar pueden ser los siguientes según el tipo de dato solicitado:
• Día:
- Fijo: entre 01 y 31 inclusive.
- Variable: un registro que contiene el valor del día.
• Mes
- Fijo: entre 01 y 12 inclusive.
- Variable: un registro que contiene el valor del mes.
• Año
- Fijo: entre 00 y 03 inclusive.
- Variable: un registro que contiene el valor del año.
• Día Semana
- Fijo: entre Domingo y Sábado.
- Variable: un registro que contiene el valor del día de la semana.
La siguiente imagen muestra una configuración de fecha “Fija”:
Configuración de Hora
Para configurar la Hora actual, ingrese a la “Ficha” con el nombre “Hora”.
Seleccione los parámetros que desea configurar (Formato de Horas, Hora, Minutos, Segundos) marcado
las opciones correspondientes. Cada uno de estos datos puede ser de tipo “Fijo” o “Variable”.
Los valores a ingresar pueden ser los siguientes según el tipo de dato solicitado:
• Formato de Hora:
- Fijo: puede seleccionar el formato de 12 o 24 horas.
• Horas
- Fijo: depende del formato de hora seleccionado. Para el formato de 12 horas, pue-
de seleccionar entre las 00 AM..11 AM y 00 PM..11PM, Y para el formato de 24 horas
puede seleccionar entre 0 y 23 inclusive.
- Variable: un registro que contiene el valor de las horas.
• Minutos
- Fijo: entre 00 y 59 inclusive.
- Variable: un registro que contiene el valor de los minutos.
• Segundos
- Fijo: entre 00 y 59 inclusive.
- Variable: un registro que contiene el valor de los segundos.
Configuración de Alarmas
El PCF8583 incluye un “Pin de Alarma” que el cual se pone en estado “Bajo” (0V) cada vez que se pr o-
duce una alarma. Mientras una alarma no se produce el pin queda en estado alto (5 V).
Al producirse una alarma en el PCF8583, internamente se activa una bandera (Bit) de alarma y el pin de
alarma se pone en estado bajo y se mantiene así mientras la bandera de alarma permanece activada.
La bandera de alarma debe ser limpiada por software.
El PCF8583 incluye alarmas por Fecha/Hora o por Temporización.
La configuración de alarma por Fecha/Hora le permite generar distintos tipos de alarmas:
• Alarma Diaria: esta alarma se activa cada vez que coinciden la hora (horas, minutos y segundos)
configurada como alarma con la hora actual del reloj (horas, minutos y segundos actuales).
• Alarma semanal: la alarma semanal se activa cuando coincide el día de la semana con el alguno
de los 2 días de semana que puede configurar como alarmas.
• Alarma Fechada: se activa cada vez que coinciden los datos de Fecha/Hora configurados como
alarma con los valores de Fecha/Hora actuales.
Cada una de estas alarmas puede ser configurada con valores Fijos o Variables.
Los valores a ingresar pueden ser los siguientes según el tipo de dato solicitado :
Alarma Diaria :
• Horas
- Fijo: depende del formato de hora seleccionado. Para el formato de 12 horas, puede seleccio-
nar entre las 00 AM..11 AM y 00 PM..11PM, Y para el formato de 24 horas puede seleccionar entre
0 y 23 inclusive.
- Variable : un registro que contiene el valor de las horas.
• Minutos
- Fijo: entre 00 y 59 inclusive.
- Variable : un registro que contiene el valor de los minutos.
Alarma Semanal:
• Dia1 y Dia2
- Fijo: entre Domingo a Sábado.
- Variable: un registro que contiene el valor del día seleccionado. Debe generar el código co-
rrespondiente al día. Los códigos correspondientes a los días son los siguientes:
Domingo b’00000001’
Lunes b’00000010’
Martes b’00000100’
Miércoles b’00001000’
Jueves b’00010000’
Viernes b’00100000’
Sábado b’01000000’
• Mes
- Fijo: entre 01 y 12 inclusive.
- Variable : un registro que contiene el valor del mes seleccionado.
• Horas
- Fijo: depende del formato de hora seleccionado. Para el formato de 12 horas, puede selecci o-
nar entre las 00 AM..11 AM y 00 PM..11PM, Y para el formato de 24 horas puede seleccionar entre
0 y 23 inclusive.
- Variable : un registro que contiene el valor de las horas.
• Minutos
- Fijo: entre 00 y 59 inclusive.
- Variable: un registro que contiene el valor del día seleccionado. Debe generar el código co-
rrespondiente al día. Los códigos correspondientes a los días son los siguientes:
Comandos
Puede enviar comandos al reloj PCF8583. Para esto, ingrese a la solapa “Comandos” y seleccione la
opción “Comandos”.
Luego marque las opciones correspondientes a los comandos que desea enviar al r eloj.
Una vez ingresados los parámetros requeridos, puede visualizar el esquema de conexi ó n.
Leer PCF8583
Para leer la información del reloj PCF8583, ingrese al árbol de herramientas como lo muestra la imagen
de la derecha :
Se presenta la pantalla “Leer el Reloj / Calendario PCF8583 (I2C)”.
Primero debe seleccionar los pines de señal de reloj y de datos
correspondientes al bus I2C. Primero seleccione el puerto y luego el pin
correspondiente.
Una vez seleccionados los pines del bus I2C, debe seleccio nar el
número de dispositivo al cual desea acceder.
Recuerde que puede conectar varios
dispositivos en paralelo formando una red, en la
cual, a cada dispositivo se le asigna un numero.
Este número de dispositivo se configura
conectado los pines correspondientes de cada
dispositivo. Puede conectar un máximo de 2
dispositivos en un a red.
Tenga en cuenta que código de dispositivo
del PCF8583 es el mismo que el código de las
memorias EEPROM. Por esto, cuando diseña
una red I2C compuesta por memorias
EEPROMs y reloj PCF8583, debe asignar los
números de dispositivos como si se tratase del
mismo tipo de dispositi vos.
Seleccione los datos que desea consultar (Día, Mes, Año, Día de la Semana) y luego seleccione el regis-
tro donde desea almacenar cada uno de los datos obtenidos.
No es necesario que obtenga todos los datos correspondientes a la hora, sino que, puede obtener sólo
los datos que necesita.
Proceda del mismo modo si desea leer la “Hora Actual”.
Como lo muestra la siguiente imagen, no es necesario que obtenga todos los datos correspondientes a
la hora, sino que, puede obtener sólo los datos que necesita.
Registro Desplazamiento
Ingresar valor y rotar
Esta función rota el valor de un BIT en un registro que puede contener hasta 64 bits de tamaño, el cual
es tratado como si fuese un registro común. Cada vez que se produce la condición de reloj, desplaza un
1(uno) o un 0 (cero), dependiendo d e la condición de entrada se cumple o no, en el registro.
El usuario deberá declarar BIT en las posiciones que desee, y luego debe programar que sucederá
cuando estos tengan valor 0(cero) o 1(uno). En el ejemplo de la figura, se utiliza el registro de desplaza-
miento para el control de una máquina envasadora de estuches, que contiene 64 estuches en todo su largo,
y la posición 61 corresponde al pateador de estuches fuera de peso. Se podría decir que cada vez que esté
activada la expulsión de un producto fu era de peso y este BIT sea uno, el sistema de expulsión funcionará.
1) En Tamaño del registro, escriba el número de bits a utilizar, con un máximo de 64.
2) En Ingrese los datos de la posición escriba el nombre al BIT que desee y complete el cuadro co-
rrespondiente a Función.
6) Seleccione que condición se tiene que cumplir para que sea introducido un 1(uno) al registro.
Las casillas de verificación “Y” o “O” corresponden a las operaciones lógicas AND y OR inclusiva corres-
pondientemente.
Interrupcione s
En ésta categoría se encuentran todas las funciones de configuración y manejo de las interrupciones.
Niple presenta las interrupciones disponibles de acuerdo al modelo de PIC que se está utilizando.
Configurar Interrup.
Para consultar la configuración d e las interrupciones consulte la sección correspondiente a las rutinas
específicas de cada versión de Niple.
Fin de la Interrupción
Inserta en el diagrama el símbolo correspondiente a fin de interrupción. Este solo se podrá insertar en el
entorno de interrupción, si intenta insertarlo en otro entorno, Niple m u estra un mensaje de error y no llevará
a cabo la inserción del símbolo.
Para cargar el símbolo, haga doble clic sobre el menú Fin de interrupción .
Rutinas de Usuario
Ud. puede diseñar sus propias funciones o procedimientos para solucionar un problema en particular
(siempre combinando distintas rutinas básicas) y luego llamarlos desde distintas partes del programa (sub-
ru tinas). Esto le permite por un lado, la creación de funciones o procedimientos personalizados y por otro
lado, la optimización del código Assembler generado, ya que las rutinas de usuario sólo se escriben una vez
y luego se insertan “llamadas” a las mismas. Esta ca tegoría incluye las funciones de declaración e inserción
de llamadas a rutinas de usuario.
Inicialmente todos los microcontroladores incorporaron la arquitectura de Von Neumann, la cual se ca-
racteriza por disponer de una sola memoria principal donde se almacenan los datos y las instrucciones. A
esta memoria se accede a través de un sistema de buses único (direcciones, datos y control).
Los microcontroladores de la familia 12F6xx, al igual que el resto de los microcontroladores de la actuali-
dad, están diseñados con la arquitectura Harvard. La arquitectura Harvard dispone de dos memorias inde-
pendientes; una que contiene sólo instrucciones, y otra donde se almacenan los datos. Ambas memorias
cuentan con sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lec-
tura o escritura) simultáneamente en ambas memorias.
todo el sistema. Los micro co ntroladores de La línea 12F6xx incluyen un oscilador interno lo cual permite uti-
lizar el PIC sin necesidad de un oscilador externo.
En general se utiliza un cristal como origen de la señal de reloj externa. El microcontrolador ejecuta cada
instrucción (1 ciclo de programa) a ¼ de la velocidad del cristal utilizado. En general, un ciclo de programa
corresponde a una línea de código Assembler .
Por ejemplo, si utilizamos un cristal de 4 Mhz, el microcontrolador estará ejecutando el código a una ve-
locidad de 1 Mhz. Es decir que, ejecutará 1.000.000 de líneas de código del programa por segundo. Por lo
tanto, cada línea de código se ejecutará en 1 microsegundo (1/1.000.000 Seg.).
Este procedimiento es necesario realizarlo para todos los tipos de programadores de PIC.
Por esto:
Es necesario recuperar este valor antes de utilizar por utiliza r por primera el micro .
El valor de calibración puede variar de un chip a otro. Por esto, debe comenzar realizando una lectura de
la memoria flash del micro. Para ello, presione el botón para realizar el proceso de lectura .
Al finalizar la lectura del micro, se obtiene el contenido de la memoria flash (memoria de programa). Da-
do que aún el micro no ha sido utilizado, todas las posiciones de memoria deben contener el valor 3FFF a
excepción de la última dirección (0x03FF).
Esta última dirección de memoria flash contiene el valor de calibración del microcontrolador (en formato
hexadecimal).
Es aconsejable tomar nota del valor de calibración. Y mejor aún, puede grabar el este valor pegando un
papel en la parte inferior del PIC. Este procedimiento es recomendable cuando trabaja con varios PIC. Re-
cuerde que el código de calibración puede variar de un PIC a otro.
Al realizar esto, el valor de calibración del PIC16F675 fue sustituido por el valor hexadecimal por defecto
$3FFF.
Haga “doble clic” sobre esta última posición de memoria con el fin de asignar el valor de calibración corres-
pondiente.
En la fase de programación, ICPROG comienza leyendo la memoria del PIC con el fin de comparar el
contenido de la última dirección con el valor de calibración ingresado manualmente.
Si el código de calibración que contiene el PIC es el mismo que el que se encuentra en la última posición
de memoria del archivo a grabar, continúa la grabación y por último muestra el mensaje que el PIC ha sido
grabado correctamente y con esto queda finalizada la grabación del PIC.
Si el código de calibración que contiene el PIC no es el mismo que se encuentra la última posición de
memoria del programa a grabar, se muestra un mensaje indicado este problema y pregunta si desea so-
brescribir el valor que actualmente se encuentra en el PIC con el valor contenido en la ultima posición del
archivo a grabar.
Si responde “SI”, se graba el valor de calibraci ón contenido en la ultima posición del archivo.
Si responde “NO”, se graba el programa pero no se cambia el valor de configuración del PIC.
Si Ud. no está completamente seguro que el valor contenido en la última posición del archivo correspon-
de al valor de calibración del PIC, seleccione la opción “Cancelar” vuelva a realizar la lectura de la memoria
del micro para obtener el valor de calibración.
Para grabar el mismo programa en distintos microcontroladores, debe actualizar el valor de calibración
de cada PIC en la última posición de memoria del archivo a grabar.
Si bien los datos del proyecto son opcionales se recomienda ingresar estos datos para la correcta identi-
ficación del proyecto en el futuro.
Una vez ingresados todos los datos necesarios, presione el botón “Crear”.
Al crear un nuevo proyecto se cargan todas las características del modelo de PIC seleccionado.
Además se genera de manera automática el entorno del Programa Principal y se inserta el bloque de
“Inicio” del programa.
Todos los proyectos deben tener un entorno de “Programa Principal”. Este entorno no puede ser borra-
do. Y cada entorno de Programa Principal debe tener un bloque de “Inicio” de Programa.
Declaración de Registros
En Niple la declaración de registros se realiza de manera visual trabajando directamente sobre el mapa
de memoria.
Para ingresar a la pantalla de declaración de
registros, seleccione el menú
“Declaración\Registros” o por medio de la
combinación de teclas CTRL+R.
En esta pantalla se presenta el mapa de
memoria.
Declaración de Bits
En Niple la declaración de Bits se realiza de manera totalmente visual trabajando directamente sobre el
mapa de memoria.
Puede ingresar a la pantalla de declaración de bits a través del menú “Declaración\Bits” o a través de la
combinación de teclas CTRL+B.
La memoria de datos se encuentra organizada en 2 bancos, las cuales son presentadas en una ”solapa”.
El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores. A la vez
se muestra un detalle de los bits que conforman cada registro.
Registros Predefinidos por el PIC (Color Naranja): Corresponde a registros de configuración y control
del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no
pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada.
Registros de Usuario (Color Verde): Corresponde a la memoria disponible para que el usuario declare
sus propios registros.
Haciendo un clic sobre el nombre de un BIT se muestra en la parte inferior de la pantalla toda informa-
ción correspondiente al BIT seleccionado.
Niple controla la validez del nombre del BIT que se está declarando, esto es:
• Que no esté siendo ya utilizado por un registro o BIT.
• No se permiten nombres de bits como “A”, “B”, “C”, “D” y ”E” que pueden llegar a confundir-
se con un nombre de puerto.
• Que no contenga caracteres no válidos.
• Que el nombre no contenga más de 20 caracteres de largo.
• Que el nombre no corresponda a una instrucción o comando.
Puerto
Configurar Puerto A
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
Los microcontroladores de la línea 12F6xx pueden configurar 3 o 6 pines como puertos de E/S. Si confi-
gura el PIC para que funcione con “oscilador interno”, los pines correspondientes al oscilador externo pue-
den ser utilizados como puerto E/S.
Lo mismo ocurre con el pin de “RESET”.
En la pantalla de configuración del Puerto A, se presenta una imagen del PIC con las descripciones de
todos los pines.
En cada pin del puerto se muestra una casilla de verificación, a través de la cual el pin es configurado
como entrada o salida.
Las siguiente imagen muestra las configuraciones del pin de reset y del oscilador externo y como afectan
la disponibilidad de los pines del puerto.
Se presenta la pantalla de selección y configuración del m odo de trabajo de los módulos comparadores.
Seleccione la configuración de comparadores que desea util i zar.
Una vez seleccionado el modo de operación del comparador, presione el botón “Ingresar”.
De manera automática Niple asigna l as configuraciones a los pines correspondientes.
Haciendo un clic en la casilla de verificación se conmuta a “Conversión A/D”, representada por una ‘A’.
Si configurar al menos una entrada como Conversión A/D, en la parte inferior-izquierda de la pantalla se
visualiza un cuadro de configuración del voltaje de referencia para el módulo de conversión A/D.
El voltaje de referencia (+) puede ser configurado como referencia Interna (V+= Vdd) o como referencia
externa (V+ = RA1).
Si elige algún voltaje de referencia como “externo”, el pin correspondiente (RA1) queda inhabilitado en la
pantalla para que no pueda ser utilizado como entrada o como salida.
Representación gráfica
Sintaxis
Puerto = Valo r_Configuración
Esto se interpreta como: “el puerto ‘A’ es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
A = Canal de Conversión A/D
+ = Voltaje de referencia externa positiva (para conversión A/D o Comparador analógico)
- = Voltaje de referencia negativa (para conversión A/D o Comparador analógico)
X = Bit no disponible.
C = Salida de comparador analógico
Ejemplos
Comunicaciones
RS232
RS232 – Enviar
El protocolo RS232 es utilizado para comunicación con el puerto serial de las computadoras (puertos
COM).
Para seleccionar el dato a enviar haga un clic en la grilla. Ingrese el tipo de dato y el valor a enviar.
Luego presione el botón OK.
Cuando se envían más de un dato, Niple le permite esperar un tiempo entre un dato y otro.
Seleccione la opción “Esperar entre datos” e ingrese el tiempo en mS que desea esperar.
Por último, Niple le ofrece la opción de calcular y enviar el “checksum” de manera automática.
Al seleccionar la opción de calcular y enviar el checksum Niple agrega de manera automática los regis-
tros necesarios para calcular el checksum.
RS232 – Recibir
El protocolo RS232 es utilizado generalmente para comunicación con el puerto serial de las computad o-
ras (puertos COM).
Este módulo le permite recibir datos mediante el
protocolo de comunicación RS232 ya sea desde otros
microcontroladores o desde una PC.
Primero seleccione el pin por el cual transmitir los
datos y la velocidad de comunicación.
Luego ingrese los registros donde desea guardar cada uno de los datos recibidos.
Configurar Interrupciones
Permite configurar todas las opciones posibles para las interrupciones RB0, TMR0 y Watchdog.
En el primer caso, el usuario podrá seleccionar si la interrupción se activa mientras transcurre el flanco des-
cendente o el ascendente, mientras que para las restantes, podrá seleccionar la tasa de división para el es-
calado de los tiempos.
1) Seleccione la interrupción a
configurar, para esto haga clic sobre las
casillas de verificación disponibles para
cada caso.
Si bien los datos del proyecto son opcionales se recomienda ingresar estos datos para la correcta identi-
ficación del proyecto en el futuro.
Al crear un nuevo proyecto se cargan todas las características del modelo de PIC seleccionado.
Además se genera de manera automática el entorno del Programa Principal y se inserta el bloque de
“Inicio” del programa.
Todos los proyectos deben tener un entorno de “Programa Principal”. Este entorno no puede ser borra-
do. Y cada entorno de Programa Principal debe tener un bloque de “Inicio” de Programa.
Declaración de Registros
En Niple la declaración de registros se realiza de manera visual trabajando directamente sobre el mapa
de memoria.
Para declarar un registro de usuario debe hacer un clic en una posición de memoria libre correspondien-
te a los registros de tipos “Usuario” (color verde). Al hacer clic, se le solicita que ingrese el nombre del regis-
tro a declarar.
Niple controla la validez del nombre del registro que se está declarando, esto es:
- Que no esté siendo ya utilizado por otro registro o BIT.
- No se permiten nombres de registros como “A”, ó “B” que pueden llegar a confundirse con un
nombre de puerto.
- Que no conteng a caracteres no válidos.
- Que el nombre no contenga más de 20 caracteres de largo.
- Que el nombre no corresponda a una instrucción o comando.
Puertos
Configurar Puerto A
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
El puerto A está conformado sólo por 5 bits (RA0 – RA4).
En la pantalla de
configuración del
Puerto A, se presenta
una imagen del PIC
con las descripciones
de todos los pines.
En cada pin
correspondiente al
puerto A se muestra
una casilla de
verificación, a través
de la cual el pin es
configurado como
entrada o salida.
Una vez
seleccionada la
configuración correcta, presione el botón “Ingresar”.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto ‘A’ es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplos
Configurar Puerto B
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
En la pantalla de
configuración del
Puerto B, se presenta
una imagen del PIC
con las descripciones
de todos los pines.
En cada pin
correspondiente al
puerto B se muestra
una casilla de
verificación, a través
de la cual el pin es
configurado como
entrada o salida. Una
vez seleccionada la
configuración
deseada, presione el botón “Ingresar”.
Representación gráfica
Sin taxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto B es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplos
Comunicaciones
RS232
RS232 – Enviar datos
El protocolo RS232 es utilizado para comunicación con el puerto serial de las computadoras (puertos
COM).
Para seleccionar el dato a enviar haga un clic en la grilla. Ingrese el tipo de dato y el valor a enviar.
Luego presione el botón OK.
Cuando se envían más de un dato, Niple le permite esperar un tiempo entre un dato y otro.
Seleccione la opción “Esperar entre datos” e ingrese el tiempo en MS que desea esperar.
Por último, Niple le ofrece la opción de calcular y enviar el “checksum” de manera automática.
Al seleccionar la opción de calcular y enviar el checksum Niple agrega de manera automática los regis-
tros necesarios para calcular el checksum.
Luego ingrese los registros donde desea guardar cada uno de los datos recibidos.
Configurar Interrup.
Permite configurar todas las opciones posibles para las interrupciones RB0, TMR0 y Watchdog.
En el primer caso, el usuario podrá seleccionar si la interrupción se activa mientras transcurre el flanco des-
cendente o el ascendente, mientras que para las restantes, podrá seleccionar la tasa de división para el es-
calado de los tiempos.
1) Seleccione la interrupción a
configurar, para esto haga clic sobre las
casillas de verificación disponibles para
cada caso.
Generalmente, para origen de la señal de reloj externa utilizamos un cristal. El microcontrolador ejecuta
cada instrucción (1 ciclo de programa) a ¼ de la velocidad del cristal utilizado. En general, un ciclo de pro-
grama corresponde a una línea de código Assembler.
Por ejemplo, si utilizam os un cristal de 4 Mhz, el microcontrolador estará ejecutando el código a una ve-
locidad de 1 Mhz. Es decir que, ejecutará 1.000.000 de líneas de código del programa por segundo. Por lo
tanto, cada línea de código se ejecutará en 1 microsegundo (1/1.000.000 Seg.).
Lo microcontroladores de la línea 16F6xx pueden ser configurados para que el origen de la señal de reloj
sea a través de un oscilador interno. Con esto, puede prescindir del oscilador externo y utilizar los pines co-
rrespondientes a la entrada del o scilador como pines E/S.
Dado que el oscilador interno no es tan preciso como un cristal, un microcontrolador configurado con pa-
ra ejecutar con oscilador interno puede tener un error importante en las temporizaciones.
Si bien los datos del proyecto son opcionales se recomienda ingresar estos datos para la correcta identi-
ficación del proyecto en el futuro.
Una vez ingresados todos los datos necesarios, presione el botón “Crear”.
Al crear un nuevo proyecto se cargan todas las características del modelo de PIC seleccionado.
Además se genera de manera automática el entorno del Programa Principal y se inserta el bloque de
“Inicio” del programa.
Todos los proyectos deben tener un entorno de “Programa Principal”. Este entorno no puede ser borra-
do. Y cada entorno de Programa Principal debe tener un bloque de “Inicio” de Programa.
Declaración de Registros
En Niple la declaración de registros se realiza de manera visual trabajando directamente sobre el mapa
de memoria.
Para ingresar a la pantalla de declaración de
registros, seleccione el menú “Declaración\Registros”
o por medio de la combinación de teclas CTRL+R.
En esta pantalla se presenta el mapa de memoria.
La línea 16F6xx cuenta con 4 páginas de
memoria, las cuales son presentadas en 2 “solapas”.
Cada registro está identificado con una “dirección
de registro” la cual está expresada en formato
hexadecimal.
Niple controla la validez del nombre del registro que se está declarando, esto es:
• Que no esté siendo ya utilizado por otro registro o BIT.
• No se permiten nombres de registros como “A”, “B”, “C”, “D”, ”E” que pueden llegar a confundir-
se con un nombre de puerto.
• Que no contenga caracteres no válidos.
• Que el nombre no contenga más de 20 caracteres de largo.
• Que el nombre no corresponda a una instrucción o comando.
Declaración de Bits
En Niple la declaración de Bits se realiza de manera totalmente visual trabajando directamente sobre el
mapa de memoria.
Puede ingresar a la pantalla de declaración de bits a través del menú “Declaración\Bits” o a través de la
combinación de teclas CTRL+B.
La memoria de datos se encuentra organizada en 4 bancos o páginas, las cuales son presentadas una
en cada ”solapa” de la pantalla de declaración de Bits
El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores. A la vez
se muestra un “detalle” de los bits que conforman cada registro.
Registros Predefinidos por el PIC (Color Naranja): Corresponde a registros de configuración y control
del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no
pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada .
Registros de Usuario (Color Verde): Corresponde a la memoria disponible para que el usuario declare
sus propios registros.
Registros deshabilitados (Color Gris): Corresponde a la memoria no disponible. Estas direcciones de
memoria no pueden ser utilizadas.
Haciendo un clic sobre el nombre de un BIT se muestra en la parte inferior de la pantalla toda informa-
ción correspondiente al BIT seleccionado.
Niple controla la validez del nombre del Bit que se está decla rando, esto es:
• Que no esté siendo ya utilizado por un registro o Bit.
• No se permiten nombres de bits como “A”, “B”, “C”, “D”, ”E” que pueden llegar a confundirse con un
nombre de puerto.
• Que no contenga caracteres no válidos.
• Que el nombre no contenga más de 20 caracteres de largo.
• Que el nombre no corresponda a una instrucción o comando.
Configurar el Puerto A
En Niple, la configuración de los puertos se realiza de manera totalmente visual.
En la pantalla de
configuración del
Puerto A, se presenta
una imagen del PIC
con las descripciones
de todos los pines.
En cada pin
correspondiente al
puerto A se muestra
una casilla de
verificación, a través
de la cual el pin es
configurado como
entrada o salida.
El puerto A está
conformado por 8
pines. De los cuales, a los pines 5 a 7 se les pueden asignar las siguientes funciones:
Al seleccionar la configuración de Pin 4 como “Pin de RESET”, Niple bloquea de manera automática la
configuración de este pin del puerto A en la pantalla de configuración de puerto.
Por el contrario, si utiliza un oscilador externo, Niple inhabilita los pines 6 y 7 del puerto A dado que es
allí donde debe conectar el cristal.
Se presenta la pantalla de selección y configuración del modo de trabajo de los módulos comparadores.
Seleccione la configuración de comparadores que desea utilizar.
Una vez seleccionado el modo de operación de los comparadores, presione el botón “Ingresar”.
De manera automática Niple asigna las configuraciones a los pines correspondientes a los comparado-
res.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto ‘A’ es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
+ = Pin positivo de un módulo comparador
- = Pin positivo de un módulo comparador
X = Bit no disponible.
Ejemplos
Configurar el Puerto B
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
En la pantalla de configuración del Puerto B, se presenta una imagen del PIC con las descripciones de
todos los pines.
En cada pin correspondiente al puerto B se muestra una casilla de verificación, a través de la cual el pin
es configurado como entrada o salida.
Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto B es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplos
Comparadores Analógicos
Los microcontroladores de la línea 16F6xx incluyen 2 módulos comparadores analógicos.
Un módulo comparador analógico está compuesto por 2 entradas (Vin+ y Vin-) y una salida (Vout), la
cual se activa en función del estado de las entadas.
El módulo comparador activa (o desactiva) la salida Vout cuando el voltaje en la entrada Vin+ sea mayor
al voltaje de la entrada Vin -.
Para implementar un comparador, primero debe configurar los pines correspondientes. Esto se realiza
junto con la configuración del puerto A. Consulte el tema “Configuración del puerto A”.
Luego de haber configurado el puerto A debe configurar el modo de funcionamiento del módulo compa-
rador. Una vez que el módulo comparador ha sido configurado, el mismo funciona de manera independiente
de la ejecución del resto del programa, es decir que el programa no debe atender el funcionamiento del
comparador.
Cada vez que la condición de comparación se cumple según lo configurado, se activa un BIT por cada
módulo comparador (Bits C1VOUT y C2VOUT, bits 6 y 7 del registro CMCON respectivamente).
Puede configurar una interrupción por comparadores. Esta se ejecuta cada vez que cambia el estado de
alguno de las 2 banderas de los módulos compradores. Debe determinar por software cual es el comprador
que genera la interrupción. Niple controla esto de manera automática.
Una vez seleccionada la configuración de los comparadores, debe configurar el módulo de funcionamien-
to de cada uno de los mismos. Para esto ingrese al árbol de herramientas como se muestra en la siguiente
imagen:
0.21 V, 0.42 V, 0.63 V, 0.84 V, 1.04 V, 1.25 V, 1.46 V, 1.67 V, 1.88 V, 2.08 V, 2.29 V,
2.50V, 2.71 V, 2.92 V, 3.13 V, 3.28 V, 3.44 V, 3.59 V.
Además los micros de la familia 16F6xx cuentan con una interrupción por Comparadores Analógicos. La
interrupción se produce cada vez que cambia el estado del BIT de salida de un módulo comparador (bits
C1Vout y C2Vout).
El software debe mantener la información del estado actual de cada BIT de salida de los módulos com-
paradores para poder determinar cual fue el comparador que generó la interrupción. Niple administra esta
información y determina de manera automática cual es el comparador que produjo la interrupción.
Para activar las interrupciones por comparadores analógicos debe activar la opción “Generar Interru p-
ción”.
Al activar la opción “Generar Interrupción”, Niple revisa el estado de las interrupciones y detecta si las in-
terrupciones necesarias se encuentran activadas.
Si alguna de las interrupciones no se encuentra activada, Niple le presenta la posibilidad de activarlas
activando los cuadros de verificación correspondientes.
Cuando se ingresa una interrupción por comparadores analógicos, Niple genera de manera automática
el registro de banderas y declara los bits de banderas de estado actual de cada uno de los módulos compa-
radores.
Los bits de banderas del estado de los comparadores se denominan “C1_INTE” y “C2_INTE”.
Además, Niple inserta de manera automática los bloques de evaluación de las banderas de salida de ca-
da módulo para determinar cual es el módulo que produjo la interrupción.
Se inserta un bloque de evaluación para cada módulo comparador. El diagrama de flujo de la interrup-
ción queda preparado para que Ud. programe lo que desea realizar al producirse la interrupción por cada
uno de los módulos comparadores.
El Módulo CCP
Los microcontroladores de la líne a 16F6xx incluyen 1 módulo de Captura, Comparación y Modulación
por ancho de pulso, llamado CCP1.
Los registros de control y trabajo del módulo CCP1 son: CCP1CON dirección 17h y CCP1RH-CCP1RL
direcciones 16h y 15h.
- Modo Captura
- Modo Comparación
- Modo Modulación por Ancho de Pulso, PWM
Modo Captura
Antes de pasar a desarrollar la metodología de programación con Niple, realizaremos una breve descrip-
ción del modo Captura a modo d e repaso general.
El modo “Captura” recupera el estado de cuenta del TMR1 y lo guarda en los registros CCPR1H y
CCPR1L.
El TMR1 debe estar configurado con la opción “Origen de señal de reloj” = Reloj Inter no. (Recuerde que
también el TMR1 puede ser configurado para que incremente mediante una señal externa).
La captura se realiza cada vez que ocurre alguno de los siguientes eventos en el Pin RB3, esto se confi-
gura mediante los 4 primeros bits de los registros CCP1CON:
1) Un flanco ascendente.
2) Un flanco descendente.
3) Cada 4 flancos ascendentes.
4) Cada 16 flancos ascendentes.
Cada vez que se realiza una captura, se activa el Bit 2 del registro PIR1 (Bit CCP1IF).
Además puede generarse una interrupción, si previamente fue configurado el Bit 2 del registro PIE1
(CCP1IE).
Para poder utilizar el Modo Captura primero debe realizar los siguientes pasos:
§ Configur e y active el temporizador interno TMR1.
§ Configur e el Pin correspondiente al módulo CCP como Entrada.
Una vez realizados los pasos previos necesarios ya esta en condiciones de realizar una Captura.
Ingrese al árbol de herramientas y seleccione la opción “Insertar / Rutinas
Básicas / Módulo CCP / Config. y Activar CCP1” como se muestra en la
siguiente figura.
Se presenta la pantalla “Módulo CCP1”. Es importante aclarar que los 3
modos (Captura, Comparación y PWM) se programan en la misma pantalla ya
que pertenecen al mismo módulo.
Seleccione el modo Comparación en la lista desplegable denominada
“Modo a utilizar”.
Para garantizar el correcto funcionamiento, Niple chequea de manera
automática si previamente han sido configurados el temporizador TMR1 y el Pin RB3 como entrada.
Si todo está correctamente configurado, Niple
permite comenzar a seleccionar las opciones
correspon dientes, de lo contrario, no permite
continuar hasta no contar con los requisitos
anteriormente mencionados.
En primer lugar debe seleccionar la configuración
del evento que provoca la captura.
Para este caso, seleccione la opción “1 Flanco
Ascendente”.
En la siguiente imagen se muestran el bloque y el entorno de “Interrupción por CCP1” que son insertados
en el tipo de captura “por interrupción”.
La siguiente imagen muestra los bloques insertados en el entorno del “Programa Principal”
La siguiente imagen muestra el entorno de “Interrupción por CCP1” y los bloques que se insertan de ma-
nera automática.
Modo Comparación
En este modo, el microcontrolador compara de manera constante los registros CCPR1H y CCPR1L con
el valor actual de TMR1. Cuando los valores son iguales, puede llegar a producirse alguno de los 3 eventos
según la configuración seleccionada.
Estos eventos son:
- Poner a 1 el Pin RB3.
- Poner a 0 el Pin RB3.
- Generar una interrupción. Esta opción no afecta al Pin RB3.
Si el TMR1 es configurado con la opción “Origen de señal de reloj” = Reloj Externo, entonces este módu-
lo puede ser utilizado como contador de eventos que al llegar al valor deseado se produzca una acción de-
terminada sin necesidad de estar monitoreando el estado de cuenta.
Si el TMR1 es configurado con la opción “Origen de señal de reloj” = Reloj Interno, entonces este módulo
puede ser utilizado para generar eventos en un determinado periodo.
Cada vez que se realiza una comparación, se activa el Bit 2 del registro PIR1 (CCP1IF).
Además puede generarse una interrupción, si previamente fue configurado el Bit 2 del registro PIE1
(CCP1IE).
Para poder utilizar el Modo Comparación primero debe realizar los siguientes pasos:
- Configurar y activar el temporizador interno TMR1.
- Configurar el Pin RB3 como Salida.
Niple le ofrece la posibilidad de asignar el valor de comparación mediante un valor Literal (valor constan-
te) o mediante el valor contenido en 2 registros (valor Va riable) ofreciendo una mayor versatilidad.
De ésta manera Ud. puede ajustar el valor de comparación a sus necesidades.
Por ejemplo: Si desea desarrollar un sistema “contador” que realice una determinada acción al llegar a la
cuenta de 1000. Entonces debe seleccionar las opciones “Valor Literal”, Tipo “Decimal” y “1000” como “valor
de comparación”. Tenga en cuenta que no
podrá cambiar el valor de comparación dado
que se trata de un valor constante. Si en el
futuro desea cambiar el “valor de comparación”,
deberá generar nuevamente el código
Assembler , compilar el archivo .hex y grabar
nuevamente el PIC.
A continuación seleccione el evento a realizar cuando el TMR1 llegue al estado de cuenta del “valor de
comparación”. Aquí tiene 3 opciones:
- Poner a 1 el Pin RB3.
- Poner a 0 el Pin RB3.
- Generar una interrupción. Esta opción no afecta al Pin RB3.
Si elige alguna de las 2 primeras opciones. Niple se solicita que seleccione una de las 2 maneras que
tiene de realizar la comparación.
1) Esperar en un bucle hasta que termine la Comparación: El PIC no realiza ninguna otra tarea que no
sea “esperar” a que el Bit 2 del registro PIE1 (CCP1IE) se ponga en 1.
2) No esperar y generar una interrupción por Fin de Comparación: Se configura el modo Compara-
ción y continúa ejecutando el resto del código. Cuando el valor del TMR1 es igual a valor de com-
par ación, se produce una interrupción por “Fin de Comparación”.
Si ha seleccionado la opción “No esperar y generar una interrupción...”, Niple chequea el estado de las
interrupciones y ofrece la posibilidad de habilitar las interrupciones que se encuentran deshabilitadas.
La siguiente ilustración muestra este caso.
En la siguiente imagen se muestran el bloque y el entorno de interrupción por “Interrupción por CCP1”
que son insertados en el tipo de comparación “por interrupción”.
La primera imagen muestra los bloques insertados en el entorno del “Programa Principal” y la segunda
imagen muestra el entorno de “Interrupción por CCP1” y los bloques que se insertan de manera automática.
Modo PWM
En este modo, el microcontrolador genera un pulso a una determinada frecuencia en el Pin RB3 y cuyo
ancho de pulso (tiempo de duración del nivel alto dentro del ciclo) puede ser variable.
La frecuencia generada (o periodo del ciclo) se controla por medio del registro PR2 y su valor se calcula
mediante la siguiente fórmula:
Periodo = 1 / Frecuencia_a_generar
PR2 = (Periodo / (4 * Tosc * Predivisor_de_TRM2)) – 1
Donde:
Tosc (Tiempo de oscilación) = 1 / Frecuencia_Cristal
El ancho de pulso es controlado mediante un valor de 10 bits el cual se calcula con la siguiente fórmula:
Ancho_Pulso = Periodo * (Porcentaje_Ancho_Pulso / 100)
Valor_Ancho_Pulso = Ancho_Pulso / (Tosc * Predivisor_de_TRM2)
Donde:
Porcentaje_Ancho_Pulso = Porcentaje de ancho de pulso deseado.
Ej: Porcentaje_Ancho_Pulso = 50 (Control por ancho de pulso del 50%).
Es importante tener en cuenta que el rango de valores para el control del ancho de pulso es variable y
depende de la frecuencia generada. O sea que, si bien el control del ancho de pulso se realiza mediante un
valor de 10 bits, el rango 0 – 1023 no corresponde al 0% y 100% respectivamente.
Por ejemplo:
- Para una frecuencia de 1000 Hz., el control del ancho de pulso debe estar entre los valores 0 y 1000.
- Para una frecuencia de 2500 Hz., el control del ancho de pulso debe estar entre los valores 0 y 400.
- Para una frecuencia de 5000 Hz., el control del anc ho de pulso debe estar entre los valores 0 y 500.
Una vez realizados los pasos previos necesarios ya esta en condiciones de configurar el PWM.
Ingrese al árbol de herramientas y seleccione la opción “Insertar / Rutinas Básicas / Módulo CCP / Con-
fig. y Activar CCP1” como se muestra en la siguiente figura.
Se presenta la pantalla “ Módulo CCP1”. Es importante aclarar que los 3 modos (Captura, Comparación y
PWM) se programan en la misma pantalla ya que
pertenecen al mismo módulo.
Seleccione el modo PWM en la lista desplegable
denominada “Modo a utilizar”.
Para garantizar el correcto funcionamiento, Niple
chequea de manera automática si previamente han
sido configurados el temporizador TMR2 y el Pin
RB3 como Salida.
Si todo está correctamente configurado, Niple
permite comenzar a seleccionar las opciones
correspon dientes, de lo contrario, no permite
continuar hasta no contar con los requisitos
anteriormente mencionados.
En primer lugar Niple le presenta información
acerca de la configuración del temporizador TMR2.
En este caso se muestra el valor de configuración
del Prescalado, dado que este valor se utiliza para
realizar los cálculos necesarios para generar tanto
la frecuencia de salida como el control del ancho de pulso.
Para esto seleccione el tipo de control a realizar que puede realizarse de 2 maneras según sus necesi-
dades:
1) Control por ancho de pulso Fijo: se genera un control por ancho de pulso constante a un determi-
nado porcentaje del período y este porcentaje no podrá ser modificado. (Es decir, para modificar
este porcentaje de control de ancho de pulso deberá volver a generar el código ASM, compilar el
archivo .hex y volver a grabar el PIC).
2) Control por ancho de pulso Variable: el valor de configuración del ancho de pulso se realiza por
medio de 2 registros (recuerde que se trata de un valor a 10 bits). Seleccione los registros que
contienen el valor. Niple calcula y muestra de manera automática el rango de valores permitidos
para el control del ancho de pulso. Debe prestar especial atención de asignar a los registros selec-
cionados, un valor que se encuen tre dentro de este rango.
Para facilitar esto, Niple cuenta con el módulo de “escalar un valor”. Consulte el módulo de función ma-
temática “Escalar un valor”.
La siguiente ilustración muestra el bloque insertado con los pasos anteriormente realizado s .
Comunicaciones
RS232
RS232 – Enviar
El protocolo RS232 es utilizado para
comunicación con el puerto serial de las
computadoras (puertos COM). Este módulo le
permite enviar datos mediante el protocolo de
comunicación RS232 ya sea a otros micro-
controladores o a una PC.
Primero debe selecciona el tipo de
comunicación a realizar la cual puede ser
mediante módulo USART.
La USART es un módulo de comunica-
ciones que los modelos de la línea 16F6xx in-
cluyen. Es decir que todo el procedimiento de
envío de los datos se realiza de manera
automática mientras que si se realiza “por
código”, se generará el código Assembler necesario para realizar el envío de los datos.
La diferencia radica en que el módulo USART prepara el dato e inicia el envío y luego vuelve a segui r
ejecutando el resto del código del programa sin necesidad de realizar todo el proceso de envío del dato ya
que este se realiza de manera automática y en forma paralela a la ejecución del resto del programa. Mien-
tras que si se realiza “por código”, la ejecución del programa realiza todo el proceso de envío del dato.
Si selecciona el modo de envío “por USART”, el sistema selecciona de manera automática el pin de
transmisión correspondiente. Este pin no puede ser modificado dado que el módulo USART utiliza un de-
terminado pin para el envío de datos.
Si selecciona el modo de envío “por Código”, el sistema le solicita que seleccione el pin de transmisión
por el cual quiere realizar la comunicación.
A continuación debe seleccionar la velocidad de comunicación .
Por último seleccione el dato a enviar.
RS232 – Recibir
El protocolo RS232 es utilizado generalmente para comunicación con el puerto serial de las computad o-
ras (puerto COM).
Este módulo le permite recibir datos mediante el protocolo de comunicación RS232 ya sea desde otros
microcontroladores o desde una PC.
Primero debe selecciona el tipo de
comunicación a realizar la cual puede ser
mediante módulo USART.
La USART es un módulo de
comunicaciones que los modelos de la línea
16F6xx incluyen. Es decir que todo el
procedimiento de envío de los datos se realiza
de manera automática mientras a diferencia
del tipo de comunicación “por código” que se
generará el código Assembler necesario para
realizar el envío de los datos.
En primer lugar debe seleccionar el tipo de
comunicación: “por USART” o “por Código”.
Si selecciona el modo de comunicación por
USART, el sistema seleccionará de manera
automática el pin de recepción. Este pin no puede ser modificado dado que el módulo USART determina el
pin (por hardware) para la recepción de datos.
A continuación debe seleccionar el registro donde guardar el dato recibido.
Si selecciona el modo de comunicación “por USART”, se debe activar la interrupción por recepción por
USART. Si esto no se realiza, el sistema no “detectará” cuando un dato sea recibido. Por esto, Niple che-
quea si las interrupciones correspondientes han sido activadas:
Por esto, Niple supervisa si estas interrupciones están correctamente activadas. Si Niple detecta que las
interrupciones no han sido activadas, por defecto, ofrece la posibilidad de activarlas.
Configurar Interrup.
Permite configurar todas las opciones posibles para las interrupciones.
Como mencionamos anterio rmente, para que un microcontrolador funcione es necesario grabarle un
programa en su interior. Este programa será leído y ejecutado línea a línea por la CPU. Para que la CPU
funcione, debe contar con un generador de impulsos de reloj externo que sincroniza el funcionamiento de
todo el sistema.
Como origen de la señal de reloj externa utilizamos un cristal. El microcontrolador ejecuta cada instruc-
ción (1 ciclo de programa) a ¼ de la velocidad del cristal utilizado. En general, un ciclo de programa corres-
ponde a una línea de código Assembler .
Por ejemplo, si utilizamos un cristal de 4 Mhz, el microcontrolador estará ejecutando el código a una ve-
locidad de 1 Mhz. Es decir que, ejecutará 1.000.000 de líneas de código del programa por segundo. Por lo
tanto, cada línea de código se ejecutará en 1 microsegundo (1/1.000.000 Seg.).
Si bien los datos del proyecto son opcionales se recomienda ingresar estos datos para la correcta identi-
ficación del proyecto en el futuro.
Datos del archivo
Nombre del archivo: Niple utiliza la extensión .NPL para los archivos de proyecto.
Seleccione la unidad y la carpeta donde guardar el nuevo proyecto.
Al selecciona la carpeta, Niple muestra todos los proyecto existentes en la misma. No puede re-
petir el nombre de un archivo de proyecto.
Una vez ingresados todos los datos necesarios, presione el botón “Crear”.
Al crear un nuevo proyecto se cargan todas las características del modelo de PIC seleccionado.
Además se genera de manera automática el entorno del Programa Principal y se inserta el bloque de
“Inicio” del programa.
Todos los proyectos deben tener un entorno de “Programa Principal”. Este entorno no puede ser borra-
do. Y cada entorno de Programa Principal debe tener un bloque de “Inicio” de Programa.
Declaración de Registros
En Niple la declaración de registros se realiza
de manera visual trabajando directamente sobre el
mapa de memoria.
Para ingresar a la pantalla de declaración de
registros, seleccione el menú
“Declaración\Registros” o por medio de la
combinación de teclas CTRL+R.
En esta pantalla se presenta el mapa de
memoria.
El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores.
Registros Predefinidos por el PIC (Color Naranja): Corresponde a registros de configuración y control
del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no
pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada.
Registros de Usuario (Color Verde): Corresponde a la memoria disponible para que el usuario declare
sus propios registros.
Registros deshabilitados (Color Gris): Corresponde a la memoria no disponible. Estas direcciones de
memoria no pueden ser utilizadas.
Declaración de Bits
En Niple la declaración de Bits se realiza de manera totalmente visual trabajando directamente sobre el
mapa de memoria. Puede ingresar a la p antalla de declaración de bits a través del menú “Declaración\Bits”
o a través de la combinación de teclas CTRL+B.
La memoria de datos se encuentra organizada en 4 bancos o páginas, las cuales son presentadas una
en cada ”solapa” de la pantalla de declar ación de Bits
El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores. A la vez
se muestra un “detalle” de los bits que conforman cada registro.
Registros Predefinidos por el PIC (Color Naranja): Corresponde a registros de configuración y control
del sistema. Estos registros se declaran de manera automática en el momento de crear el proyecto y no
pueden ser borrados. Cada uno de estos registros cumple con una función predeterminada.
Registros de Usuario (Color Verde): Corresponde a la memoria disponible para que el usuario declare
sus propios registros.
Haciendo un clic sobre el nom bre de un BIT se muestra en la parte inferior de la pantalla toda informa-
ción correspondiente al BIT seleccionado.
Una vez declarado el registro de usuario, ingrese a la pantalla de Declaración de Bits y seleccione el
número de BIT que desea declarar. Esto se hace haciendo un clic sobre la posición de BIT correspondiente
dentro registro de usuario y respondiendo afirmativamente cuando le pregunta si desea declara un nuevo
BIT.
Luego le solicita que ingrese el nombre y la descripción del nuevo BIT.
Puertos
Configurar Puerto A
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del
PIC.
El puerto A está
conformado sólo por 5
bits (RA0 – RA4).
En la pantalla de
configuración del
Puerto A, se presenta
una imagen del PIC
con las descripciones
de todos los pines.
En cada pin
correspondiente al
puerto A se muestra
una casilla de
verificación, a través
de la cual el pin es configurado como entrada o salida.
Cuando utiliza los modelos de micros 16F874 y 16F877, los puertos A y E se configuran juntos ya que
los mismos incluyen los pines de los canales A/D y éstos deben ser configurados en conjunto.
Además, debido al tamaño de estos modelos (de 40 pines) la imagen del micro es demasiado grande
para caber en la
pantalla de
configuración. Por
esto, Niple le
presenta una barra de
desplazamiento en la
parte derecha de la
pantalla de
configuración. De
esta manera, puede
“reco rrer” la imagen
del micro, como lo
muestra la siguiente
ilustración.
Haciendo un clic en la casilla de verificación se conmuta a “Conversión A/D”, representada por una ‘A’.
Si selecciona configurar una entrada como Conversión A/D, en la parte inferior-izquierda de la pan talla
se visualiza un cuadro de configuración del voltaje de referencia para la conversión A/D.
El voltaje de referencia puede ser configurado como Referencia Interna (V+= Vdd; V- = Vss); como Refe -
rencia Externa (V+ =
RA3; V- = RA2) o
como una
combinación de
ambas.
Si elige algún
voltaje de referencia
como “externo”, el pin
correspondiente (RA2
o RA3) es
deshabilitado en la
pantalla para que no
pueda ser utilizado
como entrada o como
salida.
Antes de insertar el bloque, Niple chequea que la co nfiguración seleccionada corresponda a una de las
combinaciones válidas, ya que no puede seleccionar cualquier combinación de Entradas/Salidas Digitales y
Entradas A/D.
Por ejemplo: si desea utilizar solo 1 conversor A/D, éste debe ser el BIT RA0, es decir que no tiene ma-
nera de configurar el BIT RA1 como única entrada A/D.
Si el resultado de la
verificación de la
configuración
seleccionada resulta
Incorrecta, Niple lo
advierte y le da la
posibilidad de
seleccionar una
combinación válida.
Observe en la
siguiente imagen donde
se ha seleccionado el
BIT RA1 como única
entrada A/D. Niple
advierte del error y
ofrece asistencia.
Si responde afirmativamente, se presenta un cuadro con todas las combinaciones posibles.
Si el chequeo de la configuración seleccionada resulta ser correcta, Niple inserta el bloque en el diagra-
ma.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto ‘A’ es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Con figuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
A = Canal de Conversión A/D
+ = Voltaje de referencia externa positiva (para conversión A/D)
- = Voltaje de referencia negativa (para conversión A/D)
X = Bit no disponible.
Ejemplos
Configurar Puerto B
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
En la pantalla de configuración del Puerto B, se presenta una imagen del PIC con las descripciones de
todos los pines.
En cada pin correspondiente al puerto B se muestra una casilla de verificación, a través de la cual el pin
es configurado como entrada o salida.
Cuando utiliza los modelos de micros 16F874 y 16F877, los puertos A y E se configuran juntos ya que
los mismos incluyen los pines de los canales A/D y éstos deben ser configurados en conjunto.
Cuando utiliza los modelos 16F874 ó 16F877 (de 40 pines), la imagen del micro es demasiado grande
para caber en la pantalla de configuración. Por esto, Niple le presenta una barra de desplazamiento en la
parte derecha de la pantalla de configuración. De esta manera puede “recorrer” la imagen del micro, como
lo muestra la siguiente ilustración.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto B es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplos
Configurar Puerto C
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
En la pantalla de configuración del Puerto C, se presenta una imagen del PIC con las descripciones de
todos los pines.
En cada pin correspondiente al puerto C se muestra una casilla de verificación, a través de la cual el pin
es configurado como entrada o salida.
Cuando utiliza los modelos 16F874 ó 16F877 (de 40 pines), la imagen del micro es demasiado grande
para caber en la pantalla de configuración. Por esto, Niple le presenta una barra de desplazamiento en la
parte derecha de la pantalla de configuración. De esta manera puede “recorrer” la imagen del micro, como
lo muestra la siguiente ilustración.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto C es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplos
Página 22 4 de 242
Niple v4.0 - Programación Visual de Microcontroladores
Configurar Puerto D
En Niple, la configuración de los puertos se realiza de manera totalmente visual, trabajando directamente
sobre una imagen del PIC.
En la pantalla de configuración del Puerto D se presenta una imagen del PIC con las descripciones de
todos los pines .
En cada pin
correspondiente al
puerto D se muestra
una casilla de
verificación, a través
de la cual el pin es
configurado como
entrada o salida.
Niple le presenta
una barra de
desplazamiento en la
parte derecha de la
pantalla de
configuración. De esta
manera puede
“recorrer” la imagen del micro, como lo muestra la siguiente ilustración.
Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.
Representación gráfica
Sintaxis
Puerto = Valor_Configuración
Esto se interpreta como: “el puerto C es configurado como ‘Valor_Configuración’”.
Donde:
El parámetro ‘Valor_Configuración’ puede contener alguno de los siguientes códigos:
S = Salida Digital
E = Entrada Digital
Ejemplo
Configurar Puerto E
En Niple, el puerto E se configura junto con el puerto A.
Consulte la configuración del puerto A.
Módulos CCP
Los microcontroladores de la línea 16F87x pueden contener 1 ó 2 módulos de Captura, Comparación y
Modulación por ancho de pulso (CCP), llamados CCP1 y CCP2. La cantidad de módulos CCP disponibles
depende del modelo de PIC.
Para ambos casos tienen registros de control o configuración y registros de trabajo. Los registros de con-
trol y trabajo para el módulo CCP1 son: CCP1CON dirección 17h y CCP1RH-CCP1RL direcciones 16h y
15h, mientras que para el módulo CCP2 son: CCP2CON dirección 1Dh y CCP2RH-CCP2RL direcciones
16h y 15h.
Modo Captura
Antes de pasar a desarrollar la metodología de programación con Niple, realizaremos una breve descrip-
ción del modo Captura a modo de repaso general.
El modo “Captura” recupera el estado de cuenta del TMR1 y lo guarda en los registros CCPR1H y
CCPR1L para el módulo CCP1 o en los registros CCPR2H y CCPR2L para el módulo CCP2.
Para el módulo CCP1, el Pin RC2 debe estar configurado como Entrada y para el módulo CCP2, el Pin
RC1 debe estar configurado como Entrada.
El TMR1 debe estar configurado con la opción “Origen de señal de reloj” = Reloj Interno. (Recuerde que
también el TMR1 puede ser configurado para que incremente mediante una señal externa).
La captura se realiza cada vez que ocurre alguno de los siguientes eventos en el Pin correspondiente a
cada módulo, esto se configura mediante los 4 primeros bits de los registros CCP1CON y CCP2CON:
1) Un flanco ascendente.
2) Un flanco descendente.
3) Cada 4 flancos ascendentes.
4) Cada 16 flancos ascendentes.
Cada vez que se realiza una captura, se activa el BIT 2 (CCP1IF) del registro PIR1, o el BIT 0 (CCP2IF)
del registro PIR2.
Además puede generarse una interrupción, si previamente fue configurado el BIT 2 (CCP1IE) del registro
PIE1 o el BIT 0 (CCP2IE) del registro PIE2.
En este caso trabajamos sobre el modo Captura del módulo CCP1, pero lo desarrollado a continuación
es valido también para el modo Captura del módulo CCP2.
Una vez realizados los pasos previos necesarios ya esta en condiciones de
realizar una Captura.
Para garantizar el correcto funcionamiento, Niple chequea de manera automática si pr eviamente han s i-
do configurados el temporizador TMR1 y el Pin correspondiente al módulo, en este caso el Pin RC2 como
entrada.
Si todo esta correctamente configurado, Niple permite comenzar a seleccionar las opciones correspon-
dientes, de lo contrario, no permite continuar hasta no contar con los requisitos anteriormente mencionados.
En primer lugar debe seleccionar la configuración del evento que provoca la captura.
Para este caso, seleccione de la lista desplegable la opción “1 Flanco Ascendente”.
Si ha seleccionado la opción “No esperar y generar una interrupción”, Niple chequea el estado de las in-
terrupciones y ofrece la posibilidad de habilitar las
interrupciones que se encuentran deshabilitadas.
La siguiente ilustración muestra el bloque insertado con los pasos anteriormente realizados.
En la siguiente imagen se muestran el bloque y el entorno de “Interrupción por CCP1” que son insertados
en el tipo de captura “por interrupción”.
La siguiente imagen muestra los bloques insertados en el entorno del “Programa Principal” .
La siguiente imagen muestra el entorno de “Interrupción por CCP1” y los bloques que se insertan de ma-
nera automática.
Modo Comparación
En este modo, el microcontrolador compar a de manera constante los registros CCPR1H y CCPR1L con
el valor actual de TMR1. Cuando los valores son iguales, puede llegar a producirse alguno de los 3 eventos
según la configuración seleccionada.
Estos eventos son:
- Poner a 1 el Pin RC2 para CCP1 o e l Pin RC1 para CCP2.
- Poner a 0 el Pin RC2 para CCP1 o el Pin RC1 para CCP2.
- Generar una interrupción. Esta opción no afecta al Pin RC2 para CCP1 o el Pin RC1 para CCP2.
Para el módulo CCP1, el Pin RC2 debe estar configurado como Salida y para el CCP2 el Pin RC1 debe
estar configurado como Salida.
Si el TMR1 es configurado con la opción “Origen de señal de reloj” = Reloj Externo, entonces este módu-
lo puede ser utilizado como contador de eventos que al llegar al valor deseado se produzca una acción de-
terminada sin necesidad de estar monitoreando el estado de cuenta.
Si el TMR1 es configurado con la opción “Origen de señal de reloj” = Reloj Interno, entonces este módulo
puede ser utilizado para generar eventos en un determinado periodo.
Cada vez que se realiza una comparación, se activa el BIT 2 (CCP1IF) del registro PIR1, o el BIT 0
(CCP2IF) del registro PIR2.
Además puede generarse una interrupción, si previamente fue configurado el BIT 2 (CCP1IE) del registro
PIE1 o el BIT 0 (CCP2IE) del registro PIE2.
Niple le ofrece la posibilidad de asignar el valor de comparación mediante un valor Literal (valor constan-
te) o mediante el valor contenido en 2 registros (valor Variable) ofreciendo una mayor versatilidad.
De esta manera Ud. puede ajustar el valor de comparación a sus necesidades.
Si Ud. desea desarrollar un sistema “contador” que realice una determinada acción al llegar a la cuenta
de 1000. Entonces debe seleccionar las opciones “Valor Literal”, Tipo “Decimal” y “1000” como “valor de
comparación”. Tenga en cuenta que no podrá cambiar el valor de comparación dado que se trata de un va-
lor constante. Si en el futuro desea cambiar el “valor de comparación”, deberá generar nuevamente el códi-
go Assembler, compilar el archivo .hex y grabar nuevamente el PIC.
Una forma más versátil de realizar esto es: asignar el valor de comparación como variable, por ejemplo,
mediante 2 registros llamados “cant_max_1” y “cant_max_2”. Esto le permite diseñar el programa para po-
der actualizar el “valor de comparación” mediante algún sistema de “Set Point” (por RS232, Teclado, o pul-
sadores que incrementen y decrementen estos valores) y se guarde (por ejemplo) los valores de estos 2
registros en la memoria EEPROM.
2) No esperar y generar una interrupción por Fin de Co mparación: Se configura el modo Comparación y
continúa ejecutando el resto del código. Cuando el valor del TMR1 es igual a valor de comparación,
se produce una interrupción por “Fin de Compara ción”.
Si ha seleccionado la opción “No esperar y generar una interrupción...”, Niple chequea el estado de las
interrupciones y ofrece la posibilidad de habilitar las interrupciones que se encuentran deshabilitadas.
La siguiente ilustración muestra este caso.
La siguiente ilustración muestra el bloque insertado con los pasos anteriormente realizados.
En la siguiente imagen se muestran el bloque y el entorno de interrupción por “Interrupción por CCP1”
que son insertados en el tipo de comparación “por interrupción”.
La siguiente imagen muestra los bloques insertados en el entorno del “Programa Principal”.
La siguiente imagen muestra el entorno de “Interrupción por CCP1” y los bloques que se insertan de ma-
nera automática.
Modo PWM
En este modo, el microcontrolador genera un pulso a una determinada frecuencia en el Pin correspon-
diente al módulo CCP y cuyo ancho de pulso (tiempo de duración del nivel alto dentro del ciclo) puede ser
variable.
La frecuencia generada (o periodo del ciclo) se controla por medio del registro PR2 y su valor se calcula
mediante la siguiente fórmula:
Periodo = 1 / Frecuencia_a_generar
PR2 = (Periodo / (4 * Tosc * Predivisor_de_TRM2)) – 1
Donde:
Tosc (Tiempo de oscilación) = 1 / Frecuencia_Cristal
El ancho de pulso es controlado mediante un valor de 10 bits el cual se calcula con la siguiente fórmula:
Ancho_Pulso = Periodo * (Porcentaje_Ancho_Pulso / 100)
Valor_Ancho_Pulso = Ancho_Pulso / (Tosc * Predivisor_de_TRM2)
Donde:
Porcentaje_Ancho_Pulso = Porcentaje de ancho de pulso deseado.
Ej: Porcentaje_Ancho_Pulso = 50 (Control por ancho de pulso del 5 0%).
Es importante tener en cuenta que el rango de valores para el control del ancho de pulso es variable y
depende de la frecuencia generada. O sea que, si bien el control del ancho de pulso se realiza mediante un
valor de 10 bits, el rango 0 – 1023 no corresponde al 0% y 100% respectivamente.
Por ejemplo:
- Para una frecuencia de 1000 Hz., el control del ancho de pulso debe estar entre los valores 0 y 1000.
- Para una frecuencia de 2500 Hz., el control del ancho de pulso debe estar entre los valores 0 y 400.
- Para una frecuencia de 5000 Hz., el control del ancho de pulso debe estar entre los valores 0 y 500.
En este caso trabajamos sobre el modo PWM del módulo CCP1, pero lo
desarrollado a continuación es valido también para el modo PWM del módulo
CCP2.
Una vez realizados los pasos previos necesarios ya esta en condiciones de
configurar el PWM.
Ingrese al árbol de herramientas y seleccione la opción “Insertar / Rutinas
Básicas / Módulos CCP / Módulo CCP1 / Config. y Activar CCP1” como se
muestra en la siguiente figura.
Se presenta la pantalla “Módulo CCP1”. Es importante aclarar que los 3
modos (Captura, Comparación y PWM) se programan en la misma pantalla ya
que pertenecen al mismo módulo.
Seleccione el modo PWM en la lista desplegable denominada “Modo a
utilizar”.
Para garantizar el correcto funcionamiento, Niple chequea de manera automática si previamente han si-
do configurados el temporizador TMR2 y el Pin correspondiente al módulo, en este caso el Pin RC2 como
Salida.
Si todo esta correctamente configurado, Niple
permite comenzar a seleccionar las opciones
correspon dientes, de lo contrario, no permite
continuar hasta no contar con los requisitos
anteriormente mencionados.
En primer lugar Niple le presenta información
acerca de la configuración del temporizador TMR2.
En este caso se muestra el valor de configuración
del Prescalado, dado que este valor se utiliza para
realizar los cálculos necesarios para generar tanto la
frecuencia de salida como el control del ancho de
pulso.
Lo primero que debe determinar es la frecuencia
que desea generar.
Seleccione la opción “Tipo de Frecuencia” = Fija.
A continuación ingrese la frecuencia que desea
generar.
Niple calcula y muestra automáticamente el rango válido de frecuencias que puede generar. Este rango
depende de Prescalado del temporizador TMR2 y de la velocidad del cristal utilizado.
A modo de ilustración vamos a generar una
frecuencia de 5000 Hz.
Observe que mientras Ud. ingresa el valor de la
frecuencia a generar, Niple calcula de manera
automáti ca el valor correspondiente el registro PR2.
Una vez ingresada la frecuencia, proceda a
configurar el control por ancho de pulso.
Para esto seleccione el tipo de control a realizar
que puede realizarse de 2 maneras según sus necesi-
dades:
1) Control por ancho de pulso Fijo: se genera un
control por ancho de pulso constante a un
determina do porcentaje del período y este
porcentaje no podrá ser modificado. (Es
decir, para modificar este porcentaje de
control de ancho de pulso deberá volver a
generar el código ASM, compilar el archivo
.hex y volver a grabar el PIC).
2) Control por ancho de pulso Variable: el valor de configuración del ancho de pulso se realiza por
medio de 2 registros (recuerde que se trata de un valor a 10 bits). Seleccione los registros que
contienen el valor.
Niple calcula y muestra de manera automática el rango de valores permitidos para el control del ancho
de pulso. Debe prestar especial atención de asignar a los registros seleccionados, un valor que se encuen-
tre dentro de este rango.
Para facilitar esto, Niple cuenta con el módulo de “escalar un valor”. Consulte el módulo de función ma-
temática “Escalar un valor”.
Comunicaciones
RS232
RS232 – Enviar
El protocolo RS232 es utilizado para comunicación con el puerto serial de las computadoras (puertos
COM).
Este módulo le permite enviar datos mediante el protocolo de comunicación RS232 ya sea a otros micro-
controladores o a una PC.
Primero debe selecciona el tipo de
comunicación a realizar la cual puede ser
mediante módulo USART.
La USART es un módulo de
comunicaciones que los modelos de la línea
16F87x incluyen. Es decir que todo el
procedimiento de envío de los datos se realiza
de manera automática mientras que si se
realiza “por código”, se generará el código
Assembler necesario para realizar el envío de
los datos.
La diferencia radica en que el módulo
USART prepara el dato e inicia el envío y
luego vuelve a segui r ejecutando el resto del
código del programa sin necesidad de realizar
todo el proceso de envío del dato ya que este se realiza de manera automática y en forma paralela a la eje-
cución del resto del programa. Mientras que si se realiza “por código”, la ejecución del programa realiza todo
el proceso de envío del dato.
Si selecciona el modo de envío “por USART”, el sistema selecciona de manera automática el pin de
transmisión correspondiente. Este pin no puede ser modificado dado que el módulo USART utiliza un de-
terminado pin para el envío de datos.
Si selecciona el modo de envío “por Código”, el sistema le solicita que seleccione el pin de transmisión
por el cual quiere realizar la comunicación.
A continuación debe seleccionar la velocidad de comunicación.
Por último seleccione el dato a enviar.
RS232 – Recibir
El protocolo RS232 es utilizado generalmente para comunicación con el puerto serial de las computad o-
ras (puertos COM).
Este módulo le permite recibir datos mediante el protocolo de comunicación RS232 ya sea desde otros
microcontroladores o desde una PC.
Primero debe selecciona el tipo de comunicación a realizar la cual puede ser mediante módulo USART.
La USART es un módulo de comunicaciones que los modelos de la línea 16F87x incluyen. Es decir que
todo el procedimiento de envío de los datos se realiza de manera automática mientras a diferencia del tipo
de comunicación “por código” que se generará el código Assembler necesario para realizar el envío de los
datos.
En primer lugar debe seleccionar el tipo de comunicación: “por USART” o “por Código”.
Si selecciona el modo de comunicación por USART, el sistema seleccionará de manera automática el pin
de recepción. Este pin no puede ser modificado dado que el módulo USART dete rmina el pin (por hardware)
para la recepción de datos.
A continuación debe seleccionar el registro donde guardar el dato recibido.
Por ultimo seleccione la velocidad de comunicación.
Si selecciona el modo de comunicación “por USART”, se deben activar las interrupción por recepción por
USART. Si esto no se realiza, el sistema no “detectará” cuando un dato sea recibido. Por esto, Niple che-
quea si las interrupciones correspondientes han sido activadas:
GIE = habilitador general de interrupciones
PEIE = Habilitador de interrupciones por periféricos
RCIE = Habilitador de interrupción por Recepción en USART.
Configurar Interrup.
Permite configurar todas las opciones posibles para las interrupciones RB0, TMR0 y Watchdog.
En el primer caso, el usuario podrá seleccionar si la interrupción se activa mientras transcurre el flanco des-
cendente o el ascendente, mientras que para las restantes, podrá seleccionar la tasa de división para el es-
calado de los tiempos.
1) Seleccione la interrupción a configurar, para esto haga clic sobre las casillas de verificación dispon i-
bles para cada caso.
2) Si selecciono Int errup. por RB0, haga clic en lo botones de opción correspondientes a Interrup. por
flanco Ascendente o Interrup. por flanco descendente.
3) Si selecciono Interrup. por TMR0 , seleccione de la lista la Tasa de división y el Origen de la señal
de reloj .