Está en la página 1de 242

Niple v4.

0 - Programación Visual de Microcontroladores

Programación Visual de Microcontroladores

Para PIC 12F6xx, 16F84, 16F6xx y 16F87x


Versión 4.0

Manual de Usuario

Página 1 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Importante

Como utilizar este manual

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

INTRODUCCIÓN A LOS M ICROCONTROLADORES _______________________________________________ 10

¿QUE ES UN MICROCONTROLADOR ? ___________________________________________________________________ 10


LOS MICROCONTROLADORES “PIC” ___________________________________________________________________ 10
Estructura de un microcontrolador _________________________________________________________________ 11
El procesador o CPU _____________________________________________________________________________ 11
Memoria ROM___________________________________________________________________________________ 11
Memoria RAM ___________________________________________________________________________________ 12
Registros y Bits __________________________________________________________________________________ 13
Líneas de Entrada/Salida (E/S), (Puertos) ___________________________________________________________ 16
Módulos Temporizadores Internos (TMRs) __________________________________________________________ 16
UTILIZANDO UN MICROCONTROLADOR _________________________________________________________________ 18
NIPLE : PROGRAMACIÓN VISUAL DE MICROCONTROLADORES PIC__________________________________________ 19

INTRODUCCIÓN A NIPLE _________________________________________________________________________ 20

FUNCIONES DISPONIBLES ____________________________________________________________________________ 21


HERRAMIENTAS ADICIONALES ________________________________________________________________________ 22

METODOLOGÍA DE PROGRAMACIÓN CON NIPLE _______________________________________________ 23

CONCEPTOS BÁSICOS ____________________________________________________________________________ 24

LA INTERFAZ DE NIPLE ______________________________________________________________________________ 24


ENTORNOS _________________________________________________________________________________________ 25
Crear un nuevo Entorno __________________________________________________________________________ 25
Seleccionar el Entorno actual de trabajo____________________________________________________________ 26
Borrar un Entorno _______________________________________________________________________________ 26
BLOQUES __________________________________________________________________________________________ 26
Interpretación de los Bloques ______________________________________________________________________ 26
Selección de Bloques o Vínculos ___________________________________________________________________ 28
Mover un Bloque_________________________________________________________________________________ 28
Estirar un Bloque ________________________________________________________________________________ 29
Borrar Bloques __________________________________________________________________________________ 29
Editar Bloques ___________________________________________________________________________________ 29
Duplicar Bloques ________________________________________________________________________________ 30
Habilitar e Inhabilitar Bloques ____________________________________________________________________ 31
VÍNCULOS (FLECHAS ) _______________________________________________________________________________ 32
Crear un Vínculo_________________________________________________________________________________ 33
Cambiar el estilo de un Vínculo____________________________________________________________________ 33
Borrar Vínculos __________________________________________________________________________________ 34

Página 3 de 242
Niple v4.0 - Programación Visual de Microcontroladores

INGRESO DE D ATOS _________________________________________________________________________________ 34


Control de ingreso de nombres de registros _________________________________________________________ 34
Control de ingreso de valores Literales _____________________________________________________________ 34
M ODOS DE TRABAJO “N IVEL DE USUARIO” ____________________________________________________________ 35

RUTINAS DE USUARIO ____________________________________________________________________________ 36

EXPORTAR RUTINA DE USUARIO ______________________________________________________________________ 36


IMPORTAR UNA R UTINA DE USUARIO__________________________________________________________________ 38
EXPORTAR I MAGEN _________________________________________________________________________________ 39

PROGRAMANDO CON NIPL E _____________________________________________________________________ 40

CREAR UN NUEVO PROYECTO. ________________________________________________________________________ 40


DECLARACIÓN DE REGISTROS ________________________________________________________________________ 40
BORRAR UN R EGISTRO ______________________________________________________________________________ 40
DECLARACIÓN DE BITS ______________________________________________________________________________ 40
BORRAR UN B IT DE USUARIO _________________________________________________________________________ 40
CAMBIAR EL NOMBRE A UN BIT DE USUARIO ___________________________________________________________ 40
INSERTAR BLOQUES _________________________________________________________________________________ 41
Descripción de las funciones ______________________________________________________________________ 43

MÓDULOS COMUNES A TODAS LAS VERSIONES DE NIPLE______________________________________ 43

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

BCD a Reg (16) _______________________________________________________________________________ 73


Escalar _________________________________________________________________________________________ 73
Comunicaciones _________________________________________________________________________________ 74
RS232 ________________________________________________________________________________________ 74
RS485 ________________________________________________________________________________________ 74
Modo Maestro ________________________________________________________________________________ 75
Modo Esclavo ________________________________________________________________________________ 83
Tablas __________________________________________________________________________________________ 89
Crear una nueva tabla ____________________________________________________________________________ 90
ConsultarTabla__________________________________________________________________________________ 91
Temporizadores__________________________________________________________________________________ 91
Tiempos por Bucles ______________________________________________________________________________ 91
Visualización ____________________________________________________________________________________ 92
Display de 7 segmentos ___________________________________________________________________________ 92
Multiplexado _________________________________________________________________________________ 92
Multiplexado (4511) ___________________________________________________________________________ 96
Pantalla LCD __________________________________________________________________________________ 100
Configurar LCD _____________________________________________________________________________ 101
Utilizando más de una pantalla LCD _____________________________________________________________ 105
Generar un nuevo mensaje _____________________________________________________________________ 106
Visualizando valores variables en un mensaje ______________________________________________________ 110
Mostrar Mensaje _____________________________________________________________________________ 112
Optimización del código Assembler ______________________________________________________________ 113
Comandos __________________________________________________________________________________ 113
Teclado ________________________________________________________________________________________ 116
Teclado Matricial_______________________________________________________________________________ 116
Memorias EEPROM I2C_________________________________________________________________________ 117
Leer Memoria EEPROM I2C _____________________________________________________________________ 117
Escribir Memoria EEPROM I2C___________________________________________________________________ 119
Memorias RAM _________________________________________________________________________________ 123
Leer Memoria RAM I2C_________________________________________________________________________ 123
Escribir Memoria RAM I2C ______________________________________________________________________ 125
Reloj de Tiempo Real ____________________________________________________________________________ 128
Configurar el PCF8583 __________________________________________________________________________ 128
Configuración de Fecha __________________________________________________________________________ 129
Configuración de Hora __________________________________________________________________________ 130
Configuración de Alarmas ________________________________________________________________________ 132
Comandos ____________________________________________________________________________________ 135
Leer PCF8583 _________________________________________________________________________________ 136
Registro Desplazamiento_________________________________________________________________________ 138
Ingresar valor y rotar ____________________________________________________________________________ 138
INTERRUPCIONES __________________________________________________________________________________ 140
Configurar Interrup. _____________________________________________________________________________ 140
Fin de la Interrupción ___________________________________________________________________________ 140

Página 6 de 242
Niple v4.0 - Programación Visual de Microcontroladores

RUTINAS DE USUARIO ______________________________________________________________________________ 140

NIPLE PARA PIC 12F6XX _________________________________________________________________________ 141

CARACTERÍSTICAS TÉCNICAS DE LOS PIC 12F6XX______________________________________________________ 141


Conexión de los PIC 12F6xx _____________________________________________________________________ 142
El puerto del PIC 12F6xx ________________________________________________________________________ 142
IMPORTANTE: PROCEDIMIENTO PARA PR OGRAMACIÓN DE LOS PIC 12F6XX._____________________________ 143
M ÓDULOS ESPECÍFICOS DE NIPLE PARA PIC 12F6XX____________________________________________________ 146
Crear un nuevo proyecto. ________________________________________________________________________ 146
Declaración de Registros ________________________________________________________________________ 148
Declaración de un Registro de Usuario ______________________________________________________________ 148
Declaración de Bits _____________________________________________________________________________ 149
Dec laración de un Bit de Usuario __________________________________________________________________ 150
Puerto _________________________________________________________________________________________ 150
Configurar Puerto A ____________________________________________________________________________ 150
El PIN A5 como Reset o Entrada Digital __________________________________________________________ 151
Los pines A6 y A7 como Oscilador externo o Entradas/Salidas Digitales _________________________________ 151
El módulo Comparador Analógico _______________________________________________________________ 152
Configuración de los canales A/D________________________________________________________________ 155
Comunicaciones ________________________________________________________________________________ 158
RS232 _______________________________________________________________________________________ 158
RS232 – Enviar ______________________________________________________________________________ 158
RS232 – Recibir _____________________________________________________________________________ 161
Configurar Interrupciones _______________________________________________________________________ 162

NIPLE PARA PIC 16F84 ___________________________________________________________________________ 163

CARACTERÍSTICAS TÉCNICAS DEL PIC 16F84 __________________________________________________________ 163


Conexión del PIC 16F84_________________________________________________________________________ 164
Los puertos del PIC 16F84 _______________________________________________________________________ 164
M ÓDULOS ESPECÍFICOS DE NIPLE PARA PIC 16F84 _____________________________________________________ 165
Crear un nuevo proyecto. ________________________________________________________________________ 165
Declaración de Registros ________________________________________________________________________ 166
Declaración de un registro de usuario_____________________________________________________________ 167
Puertos ________________________________________________________________________________________ 168
Configurar Puerto A ____________________________________________________________________________ 168
Configurar Puerto B_____________________________________________________________________________ 169
Comunicaciones ________________________________________________________________________________ 170
RS232 _______________________________________________________________________________________ 170
RS232 – Enviar datos _________________________________________________________________________ 170
RS232 – Recibir datos_________________________________________________________________________ 173
Configurar Interrup. _____________________________________________________________________________ 174

NIPLE PARA PIC 16F6XX _________________________________________________________________________ 175

Página 7 de 242
Niple v4.0 - Programación Visual de Microcontroladores

CARACTERÍSTICAS TÉCNICAS DE LOS PIC 16F6XX______________________________________________________ 175


Conexión de los PIC 16F6xx _____________________________________________________________________ 176
LOS PUERTOS DEL PIC 16F6XX ______________________________________________________________________ 176
M ÓDULOS ESPECÍFICOS DE NIPLE PARA PIC 16F6XX____________________________________________________ 177
Crear un nuevo proyecto. ________________________________________________________________________ 177
Declaración de Registros ________________________________________________________________________ 179
Declaración de un Registro de Usuario ______________________________________________________________ 180
Declaración de Bits _____________________________________________________________________________ 180
Declaración de un Bit de Usuario __________________________________________________________________ 181
Configurar el Puerto A __________________________________________________________________________ 182
El PIN A5 como Reset o Entrada Digital ____________________________________________________________ 182
Los pines A6 y A7 como Oscilador externo o Entradas/Salidas Digitales ___________________________________ 183
Los Comparadores analógicos _____________________________________________________________________ 184
Configurar el Puerto B __________________________________________________________________________ 189
Comparadores Analógicos _______________________________________________________________________ 190
El Módulo CCP_________________________________________________________________________________ 193
Modo Captura _________________________________________________________________________________ 194
Modo Comparación _____________________________________________________________________________ 198
Modo PWM ___________________________________________________________________________________ 203
Comunicaciones ________________________________________________________________________________ 207
RS232 _______________________________________________________________________________________ 207
RS232 – Enviar ______________________________________________________________________________ 207
RS232 – Recibir _____________________________________________________________________________ 208
Configurar Interrup. _____________________________________________________________________________ 209

NIPLE PARA PIC 16F87 X __________________________________________________________________________ 210

CARACTERÍSTICAS TÉCNICAS DE LOS PIC 16F87X ______________________________________________________ 210


Conexión de los PIC 16F87x _____________________________________________________________________ 211
Los puertos del PIC 16F87x ______________________________________________________________________ 212
M ÓDULOS ESPECÍFICOS DE NIPLE PARA PIC 16F87X ____________________________________________________ 213
Crear un nuevo proyecto. ________________________________________________________________________ 213
Declaración de Registros ________________________________________________________________________ 215
Declaración de un Registro de Usuario ______________________________________________________________ 216
Declaración de Bits _____________________________________________________________________________ 216
Declaración de un Bit de Usuario __________________________________________________________________ 217
Puertos ________________________________________________________________________________________ 218
Configurar Puerto A ____________________________________________________________________________ 218
Configuración de los canales A/D __________________________________________________________________ 219
Configurar Puerto B_____________________________________________________________________________ 221
Configurar Puerto C_____________________________________________________________________________ 223
Configurar Puerto D ____________________________________________________________________________ 225
Configurar Puerto E _____________________________________________________________________________ 226
Módulos CCP __________________________________________________________________________________ 226

Página 8 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Modo Captura _________________________________________________________________________________ 226


Modo Comparación _____________________________________________________________________________ 231
Modo PWM ___________________________________________________________________________________ 236
Comunicaciones ________________________________________________________________________________ 240
RS232 _______________________________________________________________________________________ 240
RS232 – Enviar ______________________________________________________________________________ 240
RS232 – Recibir _____________________________________________________________________________ 240
CONFIGURAR I NTERRUP .____________________________________________________________________________ 242

Página 9 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Introducción a los microcontroladores


¿Que es un microcontrolador?
Los microcontroladores hicieron su aparición a principio de los ’80 y se trata de un circuito integrado pro-
gramable que contiene toda la estructura (arquitectura) de una microcomputadora. Es decir que, dentro de
un microcontrolador podemos encontrar:
• una CPU (Unidad Central de Proceso)
• Memoria RAM
• Memoria ROM
• Memoria EEPROM (Memoria de lectura y escritura no volátil, es decir, que no se pierden los
datos cuando el circuito es desconectado)
• Puertos de Entrada/Salida (Pines de E/S)
• e incluso muchos modelos de
microcontroladores incorporan distintos
módulos “periféricos”, como pueden ser;
conversores analógico/digital (A/D), módulos
PWM (control por ancho de pulso), módulos de
comunicaciones seriales o en paralelo, y más.
Todo esto lo podemos encontrar dentro del mismo circuito integrado.
Cada vez existen más productos que incorporan microcontroladores con el fin de aumentar sustancial-
mente sus prestaciones, reducir su tamaño y costo, mejorar su confiabilidad y disminuir el consumo de
energía.

Los microcontroladores “PIC”


Los microcontrolado res denominados “PIC” corresponden exclusivamente a la marca “Microchip”. PIC
significa "Peripheral Interface Controller" y fue desarrollado por Microchip a principio de los 80.
Existe una gran cantidad de modelos de microcontroladores cuyas características y prestaciones varían
de un modelo a otro. De esta manera los desarrolladores pueden seleccionar el modelo que mejor se ajuste
a sus necesidades.
Los distintos modelos de microcontroladores se agrupan por “familia”. Una familia puede estar formada
por un conjunto de modelos cuyas características y prestaciones son bastante similares.
Cuando compramos un microcontrolador, la memoria del mismo se encuentra “vacía” y para que funcio-
ne es necesario que sea “programado”, es decir que, el desarrollador debe escribir un programa que con-
tenga todos los procesos que el microcontrolador debe ejecutar.
Este programa se escribe en un lenguaje llamado “Assembler” (ensamblador) cuya principal característi-
ca es su alta complejidad ya que se trata de un lenguaje “de bajo nivel”, es decir, que se encuentra “más
cercano” al lenguaje de la máquina que del lenguaje humano.
Por esto, sólo los técnicos altamente capacitados están en condiciones de realizar desarrollos electróni-
cos que incluyan microcontroladores. Incluso a estos especialistas les implica un gran esfuerzo intelectual y
mucho tiempo de desarrollo.

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.

Actualmente, existen 3 tipos de arquitectura de procesadores:


• CISC (Computadores de Juego de Instrucciones Complejo): Disponen de más de 80 ins -
trucciones en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requi-
riendo muchos ciclos para su ejecución. Una ventaja de los procesadores CISC es que
ofrecen instrucciones complejas que actúan como macros.
• RISC (Computadores de Juego de Instrucciones Reducido): En estos procesadores el re -
pertorio de instrucciones es muy reducido y las instrucciones son simples y generalmente se
ejecutan en un ciclo. La ventaja de éstos es que la sencillez y rapidez de las instrucciones
permiten optimizar el hardware y el software del procesador.
• SISC (Computadores de Juego de Instrucciones Específico): En los microcontroladores des -
tinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido,
es "específico", o sea, las instrucciones se adaptan a las necesidades de la aplicación pre-
vista.

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

el programa en el chip mediante un sencillo grabador controlado por un programa desde


una PC. La versión OTP es recomendable cuando es muy corto el ciclo de diseño del pro-
ducto, o bien, en la construcción de prototipos y series muy pequeñas. Tanto en este tipo de
memoria como en la EPROM, se suele usar la encriptación mediante fusibles para proteger
el código contenido.

• EPROM: Los microcontroladores que disponen de memoria EPROM (Erasable Program-


mable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabación se rea-
liza, como en el caso de los OTP, con un grabador gobernado desde un PC. Si, posterior-
mente, se desea borrar el contenido, disponen de una ventana de cristal en su superficie
por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cápsulas
son de material cerámico y son más caros que los microcontroladores con memoria OTP
que están hechos con material plástico.

• 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.

La palabra BIT proviene de la contracción de las palabras “Binary Digit”.

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

Esta característica de procesar números (“Dígitos”) es lo que da el nombre a la “Electrónica Digital”. La


electrónica digital procesa números formados por combinaciones de ceros y unos. Cualquier señal an alógi-
ca debe ser “digitalizada”, es decir, convertida a números, para poder ser procesada en un sistema digital.

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:

Esto permite representar números grandes utilizando unos pocos dígitos.


Por ejemplo:

En la programación de microcontroladores , es habitual utilizar los 3 sistemas de numeración (Binario,


Decimal y Hexadecimal) dependiendo del proceso que necesitemos realizar. Por eso es fundamental tener
claros estos conceptos.

Página 15 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Líneas de Entrada/Salida (E/S), (Puertos)


Los microcontroladores cue ntan con una serie de pines destinados a entrada y salida de datos o señales
digitales. A estos pines se les denomina “Puerto”.
Como mencionamos anteriormente, todo el funcionamiento del microcontrolador está controlado a través
de los registros. Los puertos no son la excepción, también están controlados por los registros. Por esto, un
puerto no puede estar formado por más de 8 pines; 1 Pin por cada Bit de un registro. Un puerto si puede es-
tar formado por menos de 8 pines.
Un microcontrolador puede contener varios puertos dependiendo del modelo.
A cada puerto se lo identifica con una letra. Por ejemplo; “Puerto A”, “Puerto B”, etc.
Para poder utilizar un puerto, primero el mismo debe ser configurado. Cada pin de un puerto puede ser
configurado como entrada o salida independientemente del resto de los pines del mismo puerto.

Módulos Temporizadores Internos (TMRs)


Un temporizador interno (TMR) es un módulo de hardware incluido en el mismo microcontrolador el cual
está especialmente diseñado para incrementar au tomáticamente el valor de un registro asociado al TMR
cada vez que el módulo TMR recibe un pulso. A este pulso se lo llama “señal de reloj”.

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.

El archivo compilado tiene una extensión .hex.

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.

Niple: Programación Visual de microcontroladores PIC


Como mencionamos en los párrafos anteriores, la programación de los microcontroladores resulta una
tarea muy compleja dado que el usuario debe conocer la arquitectura del procesador y además debe dom i-
nar el lenguaje de programación “Ensamblador”. Si bien existen distintas versiones del lenguaje C o Basic
adaptadas a la programación de
microcontroladores, todavía la programación
resulta muy compleja por el alto grado de
abstracción que implica.
Niple es un entorno de desarrollo visual
para programación de microcontroladores
PIC. Con Niple, el usuario sólo diseña un
diagrama de flujo de manera totalmente
visual y en alto nivel de programación, en
lenguaje humano, y el software genera el
código Assembler de manera auto mática.
Además, el software controla y supervisa
todo el proceso de diseño, advirtiendo al
usuario sobre posibles errores en la lógica del programa que se está diseñando. Esta ventaja no la tiene
ningún otro lenguaje de progr amación.

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:

ü Entono Visual de Alto Nivel de programación:


• Niple ofrece una metodología de programación totalmente visual y en lenguaje humano.
• Bloques estandarizados, lo cual facilita la interpretación del proyecto.
• Ud. se concentra en “Que Hacer“ y Niple se encarga de “Como Hacerlo”.
• Control automático de errores lógicos.
• Supervisa el ingreso de datos.

ü Control automático de registros y bits:


• Controla la existencia de todos los registros y bits necesarios para el correcto funcionamien-
to del proyecto en el momento de generar el código Assembler.
• Controla que no existan nombres de registros y bits duplicados.
• Valida los nombres de los registros y los bits en el momento de ser declarados.

Página 20 de 242
Niple v4.0 - Programación Visual de Microcontroladores

ü Corrección automática de errores lógicos


• Controla la correcta configuración de los puertos.
• Controla la configuración y activación de las interrupciones.
• Supervisa la creación de vínculos entre bloques.

ü Generación del Código Assembler:


• Control automático de la sintaxis del código generado.
• Control automático del cambio de página.
• Generación automática de etiquetas.

ü Modelos de PIC soportados por Niple:


• Niple para PIC 12F6xx
§ 12F629
§ 12F675
• Niple para PIC 16F84
§ 16F84
• Niple para PIC 16F6xx
§ 16F627
§ 16F628
§ 16F648
• Niple para PIC 16F87x
§ 16F870
§ 16F873
§ 16F874
§ 16F876
§ 16F877

• Velocidades de reloj soportadas: 4 Mhz, 10 Mhz, 20 Mhz.

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

ü Visualización de datos en dígitos 7 segmentos ( Ánodo común y Cátodo común)


ü Ingreso de datos por teclado matricial (3x3 y 3x4)
ü Visualización de datos en pantallas LCD (16x2, 20x2 y 20x4)
ü Manejo de memorias EEPROM 24Cxxx por comunicación I2C
ü Manejo de memorias RAM PCF8570 por comunicación I2C.
ü Manejo de reloj/calendario de tiempo real PCF8583, con control de alarmas por fecha.
ü Configuración y manejo de temporizadores internos (TMR0, TMR1 y TMR2)
ü Comunicaciones RS232 por código y por USART
ü Comunicaciones RS485
ü Comparadores analógicos
ü Conversión A/D. La cantidad de canales depende del modelo de micro
ü Módulos CCP (Compara, Captura y PWM)
ü Cálculos matemáticos: (+, - , / , *, en 8 o 16 bits), conversión a BCD
ü Escalado de valores de un rango a otro (a 8 y 16 bits)
ü Manejo de registros de desplazamiento

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

Metodología de programación con Niple


La metodología de programación en Niple consiste en el diseño de un diagrama de flujo de manera to-
talmente visual y de alto nivel de programación.
Esto significa que Ud. no escribe código en Assembler adaptándose al “lenguaje” del micro, sino que, por
el contrario, Ud. realiza el diseño del programa de manera gráfica, seleccionando opciones a través de pan-
tallas claras e intuitivas, y donde el sistema se adapta al “lenguaje humano” y luego “traduce” a código As -
sembler .
El diagrama de flujo está formado por un conjunto de bloques “estandarizados”. Tanto la forma, como el
color y el texto de cada bloque, le están presentando información y datos concretos acerca de cada parte
del proceso, lo cual facilita aún más la interpretación del programa.
Además, el diagrama de flujo le permite tener una “visión general” del proyecto.
El proceso de diseño del diagrama de flujo consiste en insertar bloques y vincularlos por medio de fl e-
chas.
Durante éste proceso, Niple controla y advierte de posibles errores, tanto de la lógica del programa como
en la configuración del sistema (configuración de puertos, interrupciones, etc.).
En el margen derecho de la pantalla se encuentra el “Árbol de Herramientas”. Este consiste en una es-
tructura de árbol donde se encuentran todas las funciones que pueden ser insertadas como bloques en el
diagrama de flujo y que generan un código Assembler.
Los bloques se encuentran agrupados en distintos niveles organizados por categoría para facilitar la
búsqueda de un bloque en particular.
En el primer nivel se organizan por tipo de función donde se encuentran los siguientes ítems:
Instrucciones: Esta categoría incluye todas instrucciones en Assembler . A su vez se organizan
por tipo de instrucción:
• Instrucciones orientadas a Registros
• Instrucciones orientadas a Bits
• Instrucciones orientadas a Literales
• Instrucciones orientadas a Control
• Todas las instrucciones ordenadas alfabéticamente

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.

- Entornos de Subrutinas (rutinas de usuario): Son funciones o procedimientos generados por


el usuario. Debe asignarles un nombre único dentro del proyecto. No tiene un límite máximo en
la cantidad de entornos de subrutina que puede incluir en un proyecto. Las subrutinas pue den
devolver o no un resultado (Funciones y Procedimientos respectivamente). Para ejecutar una
subrutina debe ser “llamada” o invocada.

- Entornos de Interrupciones: Son funciones o procedimientos que se ejecutan al producirse un


llamado a interrupción. Cada interrupción tiene un nombre predeterminado y el usuario no pue-
de cambiar éste nombre. La cantidad máxima de “Interrupción” corresponde al número de inte-
rrupciones de incluye cada modelo de microcontrolador. En tiempo de ejecución, se accede al
entorno de una interrupción de manera automática, al generarse un llamado a interrupción. O
sea que no se puede “predecir” el momento exacto en que se producirá una interrupción. Esto
afecta al sistema de chequeo de errores.

Crear un nuevo Entorno


Un entorno se genera de manera automática al insertar interrupciones o rutinas de usuario en el proyec-
to. Cuando inserta una interrupción en el proyecto, Niple coloca de manera automática el bloque inicio de
entorno con el texto correspondiente y un bloque de inhabilitación del GIE (Habilitador general de Interrup-
ciones) para que ninguna otra interrupción suspenda la ejecución de la actual interrupción.
Si usted está utilizando otra interrupción de mayor prioridad, simplemente borre o deshabilite éste blo-
que. Cuando declara una Rutina de Usuario, Niple genera un nuevo entorno con el nombre que usted asig -
nó a la rutina y le coloca el prefijo “usr_” (abreviación de la palabra usuario). Inserta de manera automática
el bloque de “Inicio de Entorno”.

Página 25 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Seleccionar el Entorno actual de trabajo


Para conmutar entre los distintos entornos, sólo seleccione el nombre del entorno en el “Explorador de
Proyecto”.
En la esquina superior izquierda del área de trabajo se muestra el nombre del entorno actual.

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.

Interpretación de los Bloques


Cada forma de bloque está directamente asociada a un tipo de función, esto le facilita la interpretación
del programa con sólo echarle un vistazo general:
Tipo de función según la forma del bloque:

Salida de datos. Escribir un valor en un puerto


Inicio – Fin. Se utiliza como inicio o fin de un
(en paralelo, no serial)
entorno.

Instrucción. Cualquiera de las 35 instrucciones Asignación. Este bloque representa la


en código assember. asignación de un valor a un registro o un bit.

Configuración de un Puerto.

Leer un dato de la memoria EEPROM.

Ingreso de datos. Leer el valor de un puerto


(en paralelo), modo Captura, modo Comparación.
Almacenar un dato en la memoria EEPROM.

Página 26 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Condición. Evalúa una condición y deriva la


ejecucion del programa en función del resultado
de la evaluación.

Comunicaciones Seriales RS232. Envío y


recepción de un conjunto de datos por RS232
mediante protocolo de usuario diseñado en Niple.

Configuración. Este bloque corresponde a


configuración de Interrupción y módulos
periféricos.

Temporización por bucle. Calcula y genera los


bucles necesarios para esperar un tiempo
Activar – Desactivar Interrupciones. determinado.

Cálculo matemático.

Visualizar valores en display de 7 segmentos


por el método del multiplexado.

Conversión Decimal a BCD ó BCD a


Decimal.

Registro de desplazamiento. Ingresar un valor


Consultar Tabla.
y rotar.

Comunicaciones Seriales RS232. En vío y Llamada a subrutina (call).


recepción de un dato por RS232.

Página 27 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Selección de Bloques o Vínculos


Al seleccionar un bloque se presentan una serie de 9 nodos (8 alrededor y 1 en el centro del bloque). En
el caso de los vínculos se presenta 1 nodo en la mitad de la flecha.
Puede seleccionar uno o más bloques o vínculos de varias maneras.
• Haciendo un clic sobre el bloque o sobre el vínculo.
• Manteniendo presionada la tecla “ALT” o la tecla “CRTL” puede ir incorporando más bloques o
vínculos a la selección actual.
• Puede seleccionar varios bloques y vínculos de la siguiente manera:
- Marque un punto en el área de trabajo (no sobre un bloque)
- Presione el botón izquierdo del mouse y arrastre sin soltar el botón, se mostrará un rectán-
gulo en línea de trazos.
- Al soltar el botón del mouse, se seleccionarán todos los bloques y vínculos que son inclui-
dos en el área seleccionada.

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.

a) Tamaño del bloque original


b) Bloque estirado

Utilice el comando “Edición/Deshacer” para restablecer el tamaño anterior del bloque.

Borrar Bloques
Tiene 2 formas de eliminar un o varios bloques:

1) Seleccione el bloque que desea eliminar y presione la tecla “Suprimir”.


2) Seleccione el bloque que desea eliminar y presione el botón derecho del mouse. Se desplegara un
“menú contextual” y presione la opción “Borrar Símbolo” (o la opción “Borrar” si ha seleccionado varios blo-
ques o vínculos).

Utilice el comando “Edición/Deshacer” para recuperar los bloques borrados.

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:

1. Puede borrar el bloque e insertarlo nuevamente seleccionado los parámetros deseados. Si


elige ésta opción deberá realizar los vínculos de manera manual.
2. Puede editar el bloque y asignarle nuevos valores a los parámetros solicitados. Para esto no
necesita borrar el bloque ni realizar los vínculos nuevamente.

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.

Para duplicar 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 “Duplicar”.
Además, puede duplicar uno o más
bloques a la vez.

Página 30 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Habilitar e Inhabilitar Bloques


Durante la fase de diseño del proyecto, es habitual que durante las pruebas, Ud. necesite anular una par-
te del proceso par que no sea ejecutada.
Por medio de las opciones “Habilitar Bloque“ e “Inhabilitar Bloque” puede anular la ejecución uno o más
bloques sin necesidad de borrarlos o de alterar la lógica del programa.
Para inhabilitar 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 o pción “Inhabilitar”.

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.

Cambiar el estilo de un Vínculo


Para cambiar el estilo de un vínculo;
1) Seleccione el vínculo y presione el botón derecho del mouse.
2) Se mostrará un menú contextual con los distintos estilos que puede adoptar un vínculo.
3) Seleccione el estilo deseado.

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”.

También puede borrar un vínculo seleccionándolo y presionando la tecla “Suprimir”.

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”.

Control de ingreso de nombres de registros


Cuando necesite ingresar el nombre de un registro como parámetro para una función, Niple le presenta
una lista con todos los registros declarados, donde Ud. debe selecciona el nombre del registro deseado.

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.

Si necesita seleccionar como parámetro, el nombre de un registro “Predefinido” y no aparece en lista,


consulte el tema “Conceptos Básicos / Modo de Usuario”.

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.

Control de ingreso de valores Literales


Niple le ofrece distintos formatos de ingreso de valores literales, éstos son; formato decimal, hexadecimal
o binario.
En general, cuando necesite ingresar un literal, primero debe seleccionar el “formato” en el cual desea
ingresar el valor. De ésta manera, Niple supervisa de manera automática el ingreso de datos, y admite sólo
los valores permitidos para el formato seleccionado.

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.

Modos de Trabajo “Nivel de Usuario”


Dado que Niple está especialmente diseñado para quienes se inician en la programación de microcontro-
ladores PIC, el sistema ofrece 2 modos de trabajo según el nivel de experiencia o conocimiento técnico del
usuario:

• 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.

Por defecto Niple inicia la sesión de trabajo en modo “Usuario Inicial”.

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.

Exportar Rutina de Usuario


Una vez creada una rutina de usuario, Niple le ofrece la posibilidad de guardarla en un archivo con ex-
tensión .RUT, para luego poder ser utilizada en otros proyectos. De esta manera puede crear una librería de
Rutinas de Usuario.
Se genera un archivo para cada rutina.

Para exportar una Rutina de Usuario realice los siguientes pasos:


1) Seleccione el entorno de la rutina de desea.
2) Seleccione el bloque de inicio del entorno. ( El bloque con forma de elipse de color amarillo).
3) Presione el botón derecho del mouse para mostrar el menú contextual y seleccione la opción
“Exportar Rutina”.
4) Niple solicita el nombre del archivo donde guardar la rutina de usuario. Por defecto, sugiere el
nombre de la rutina 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

Importar una Rutina de Usuario


Niple le permite guardar sus rutinas de usuario en archivos externos para luego ser utilizadas en otros
proyectos.
De ésta manera Ud. puede generar su propia librería de rutinas o incluso intercambiar rutinas con otros
usuarios.

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.

Este tipo de archivos ocupan muy poco espacio de disco.


El archivo de imagen puede ser insertado en un editor de textos para complementar la documentación
técnica.
Al ingresar al Menú “Archivo/Exportar Imagen”, tiene 2 opciones para generar imágenes:
1. Generar una imagen de todo el proyecto: se generan un archivo de imagen por cada entorno.
2. Generar un a imagen solo del Entorno actual: se genera un archivo con el entorno actual.

Los archivos de imagen se nombran según el siguiente formato:


“NombreProyecto_NombreEntorno.WMF”.
Por esto, Niple solicita el nombre del proyecto y sugiere el nombre actual del proyecto.
Si Ud. aún no ha ingresado un nombre al proyecto, Niple sugiere “NombreProyecto”. En el caso de gene-
rar archivos de imagen de todo el proyecto, Niple genera un archivo para cada entorno .
Por ejemplo, en el siguiente proyecto serán
generados los archivos:
§ Ejemplo7_Programa Principal.wmf
§ Ejemplo7_usr_calculo1.wmf
§ Ejemplo7_usr_calculo2.wmf
§ Ejemplo7_usr_calculo3.wmf
Donde cada archivo contiene la imagen del entorno correspondiente.

Página 39 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Programando con Niple


Crear un nuevo proyecto.
Para consultar sobre la creación de un nuevo proyecto remítase la sección correspondiente a las rutinas
específicas de cada versión de Niple.

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.

Borrar un Bit de Usuario


Seleccione el BIT a borrar y presione la tecla “Suprimir”.
Sólo puede borrar los BIT de usuario.

Cambiar el nombre a un Bit de Usuario


Niple de brinda la posibilidad de renombrar un BIT o de modificar la descripción del mismo.
Para esto seleccione el BIT que desea renombrar y presione la tecla “Enter”.

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.

Si elige la opción “NO” se cancela la operación de inserción de bloque.


Si elige la opción “SI”, Niple le permitirá insertar un bloque, pero no se realizará el chequeo de errores en
línea dado que no es posible determinar el contexto en el cual será insertado el nuevo bloque. Además, el
nuevo bloque será insertado en la esquina superior derecha del diagrama de flujo y el vínculo deberá reali-
zarlo manualmente.

Página 41 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Para insertar un bloque siga los siguientes pasos:


1) Seleccione el bl oque al cual vincular el nuevo bloque a ser insertado. (Para generar el vínculo de
manera automática y chequear errores).
2) Haga doble clic para desplegar el “Árbol de Herramientas” y localice la función de que necesite,
desplegando y recorriendo el árbol de herramientas.
3) Una vez localizada la función que quiere insertar, haga doble clic en el nombre de la misma para
cargar la pantalla con las opciones y parámetros de la función. Una vez seleccionadas las opcio-
nes e ingresados los parámetros, presione e l botón “Ingresar”.
4) De ésta manera se insertará el bloque y será vinculado de manera automática.

Página 42 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Descripción de las funciones


Los bloques se encuentran agrupados en distintos niveles organizados por categoría para facilitar la
búsqueda de un bloque en particular.
En el primer nivel se organizan por tipo de función donde se encuentran los siguientes ítems:
1) Instrucciones
2) Rutinas Básicas
3) Interrupciones
4) Rutinas de Usuario

Módulos comunes a todas las versiones de Niple

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.

Instrucciones orientadas a Registros

ADDWF
Suma el valor de W y un registro.

Parámetros:
Registro F: Nombre registro que se
quiere sumar a W.

Destino (d): Indi ca en donde será


guardado el resultado de la operación.

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:

Registro F: Nombre de registro a


combinar con W.

Destino (d): Indica en donde será


guardado el resultado de la operaci ón.

CLRF
Borra el contenido de un registro.

Parámetros:

Registro F: Nombre de registro a


limpiar.

CLRW
Borra el contenido del registro W.

Esta instrucción no contiene


parámetros.

Página 44 de 242
Niple v4.0 - Programación Visual de Microcontroladores

COMF
Devuelve el complemento de un registro.

Parámetros:

Registro F: Nombre de registro del que


se quiere obtener el complemento.

Destino (d): Indica en donde será


guardado el resultado de la operación.

DECF
Decrementa el valor de un registro en 1.

Parámetros:

Registro F: Nombre de registro a


decrementar.

Destino (d): Indica en donde será


guardado el resultado de la operación.

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:

Registro F: Nombre de registro a


decrementar.

Destino (d): Indica en donde será


guardado el resultado de la operación.

Página 45 de 242
Niple v4.0 - Programación Visual de Microcontroladores

INCF
Incrementa el valor de un registro en 1.

Parámetros:

Registro F: Nombre de registro a


incrementar.

Destino (d): Indica en donde será


guardado el resultado de la operación.

INFCSZ
Incremente un registro. Si el valor de un registro y evalúa si el resultado de igual a 0.

Parámetros:

Registro F: Nombre de registro a


incrementar.

Destino (d): Indica en donde será


guardado el resultado de la operación.

IORWF
Realiza una operación lógica OR Inclusive entre W y un registro.

Parámetros:

Registro F: Nombre de registro a


utilizar en la operación.

Destino (d): Indica en donde será


guardado el resultado de la operación.

Página 46 de 242
Niple v4.0 - Programación Visual de Microcontroladores

MOVF
Mueve el contenido del registro.

Parámetros:

Registro F: Nombre de registro a


utilizar en la operación.
Destino (d): Indica en donde será guar-
dado el registro.

MOVWF
Mueve el contenido del registro W a otro registro.

Parámetros:

Registro F: Nombre de registro destino.

RLF
Rota un BIT el contenido del registro hacía la izquierda, incorporando el Carry al registro.

Parámetros:

Registro F: Nombre de registro a rotar.

Destino (d): Indica en donde será


guardado el resultado de la rotación.

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:

Registro F: Nombre de registro a rotar.

Destino (d): Indica en donde será guar-


dado el resultado de la rotación.

SUBWF
Resta el valor de un registro (F) al valor de W.

Parámetros:

Registro F: Nombre de registro a restar.

Destino (d): Indica en donde será


guardado el resultado de la operación.

SWAPF
Intercambia los nibbles bajo y alto de registro.

Parámetros:

Registro F: Nombre de registro a


modificar.

Destino (d): Indica en donde será


guardado.

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:

Registro F: Nombre de registro a


utilizar en la operación.

Destino (d): Indica en donde será


guardado el resultado de la operación.

Instrucciones orientadas a Bits


BCF
Limpia un BIT, o sea que, lo pone a 0.

Parámetros:

Registro F: Nombre de registro en


donde se encuentra el BIT.

Nombre del BIT: Indica el nombre del


BIT a modificar.

BSF
Setea un BIT, o sea que, lo pone a 1.

Parámetros:

Registro F: Nombre de registro en


donde se encuentra el BIT.

Nombre del BIT: Indica el nombre del


BIT a modificar.

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:

Registro F: Nombre de registro en


donde se encuentra el BIT.

Nombre del BIT: Indica el nombre del


BIT a consultar.

BTFSS
Consulta el valor del BIT, si es 1, se descarta una instrucción y ejecuta la siguiente.

Parámetros:

Registro F: Nombre de registro en


donde se encuentra el BIT.

Nombre del BIT: Indica el nombre del


BIT a consultar.

Instrucciones orientadas a Literales


ADDLW
Suma un literal con W.

Parámetros:

Literal K: Valor hexadecimal, decimal, o


binario a sumar.

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:

Literal K: Valor hexadecimal, decimal, o


binario a utilizar en la operación.

IORLW
Realiza una operación lógica OR inclusiva entre el literal (K) y W.

Parámetros:

Literal K: Valor hexadecimal, decimal, o


binario a utilizar en la operación.

MOVLW
Asigna el valor del literal (K) a W.

Parámetros:

Literal K: Valor hexadecimal, decimal, o


binario a mover.

Página 51 de 242
Niple v4.0 - Programación Visual de Microcontroladores

SUBLW
Resta a W el valor del literal (K).

Parámetros:

Literal K: Valor hexadecimal, decimal, o


binario a mover.

XORLW
Realiza una operación lógica OR exclusiva entre W y el valor del literal (K).

Parámetros:

Literal K: Valor hexadecimal, decimal, o


binario a utilizar en la operación.

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:

Repetir: Se refiere al número de NOP a


introducir.

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.

Dado que un Bit representa un


valor Binario, sólo se le puede
asignar un valor de 0 ó 1.
En el campo “Nombre del BIT”
se selecciona el nombre del BIT al
cual se asignará el valor.
Al seleccionar el BIT, Niple
presenta 2 renglones con
información referida al BIT
seleccionado:
En la primera línea se muestra el número de BIT y el registro al cual pertenece.
Y en la segunda, se muestra la descripción o comentario correspondiente al 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.

Filtrar los bits por registro

Puede filtrar la lista de


Nombres de Bit para que sólo
muestre los bits declarados en un
registro determinado. Esto resulta
muy práctico cuando está
trabajando en “Modo de Usuario
Experto” (se muestran todos los
bits del sistema), o cuando ha
declarado muchos Bits de
Usuario.

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

Al Bit RA0 se le asigna el valor 1.

Al Bit RA0 se le asigna el valor 0.

Asignar valor a un Registro


Esta función permite asignarle un valor constante o variable a un registro.
En el campo Registro seleccione el registro al
cual le asignará un valor, en la sintaxis
corresponde al “Destino”.
Si desea asignarle un valor a un registro que
aún no ha sido declarado, mediante el botón
“Nuevo” puede declarar el registro sin necesidad
de cancelar la operación actual.
Una vez especificado el registro al cual asignar
el valor, debe seleccionar que tipo de valor desea
asignar. En la sintaxis corresponde al “Origen”.
Las opciones disponibles son:
- Un valor Literal. Esto es, un valor constante. Niple controla de manera automática el ingreso de lite -
rales, para obtener mayor información consulte el tema “Conceptos Básicos / Ingreso de Datos”.
- El valor de otro registro. Esta opción es equivalente a “copiar” el contenido de un registro. Si en tiem-
po de ejecución se modifica el contenido del registro, estamos frente a una asignación de tipo varia-
ble.
Al igual que con el campo registro, el botón “Nuevo”, le permite declarar un nuevo registro sin necesidad
de cancelar la operación.
Por último puede ingresar un comentario.
Representación gráfica:

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:

Al Registro “Dato” se le asigna el valor Decimal 00.

Al registro “Dato” se le asigna el valor Binario 11011101.

Al registro “Dato” se le asigna el valor que contiene el registro “Dato1”.

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

Una vez ingresado los datos solicitados presione el botón Ingresar.


Representación gráfica

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

El parámetro ‘Valor’ corresponde a un registro (valor variable) o a un literal (valor constante).


Ejemplos

Escribir el valor que contiene el registro contador en el puerto B.

Escribir el valor constante B’10001111’ en el puerto B.

Conversión Analógica/Digital (A/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

Se presenta la pantalla “Activar – Desactivar conversor A/D.


En esta pantalla se muestra toda la información
relacionada con el estado actual del módulo de conversión
A/D. Esto es: Configuración actual del puerto, Cantidad de
canales A/D disponibles y el estado actual del módulo de
conversión (Activado o Desactivado).
En la parte inferior se presentan opciones de Activar o
Desactivar el módulo de conversión A/D.
Seleccione la opción deseada y presione el botón
“Ingresar”.

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:

Activar el módulo A/D

Desactivar el módulo A/D

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:

• Configuración actual del puerto


• Cantidad de canales A/D disponibles
• El estado actual del módulo de conversión A/D (Activado o Desactivado).

Lo primero que Niple le solicita, es que seleccione el


canal A/D que desea utilizar. La lista desplegable lla-
mada “Canal a Leer” contiene todos los canales A/D que
se encuentra disponibles.
En esta lista se muestra el número de canal junto al
correspondiente nombre de Bit. De esta manera, Niple
le facilita la identificación del Pin adecuado.
Para eliminar completamente la posibilidad de
seleccionar un pin del Puerto que no hubiera sido
configurado como “Entrada A/D”, Niple muestra en la
lista, sólo los canales que actualmente están disponibles
de acuerdo a la configuración actual del puerto.
A continuación se presentan algunos ejemplos de
ésta característica.
En cada caso, compare la información de la configu-
ración actual del Puerto, con la cantidad de canales A/D
disponibles, y con la lista de canales A/D que Niple ofre-
ce como canales disponibles.

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

Una conversión A/D puede realizarse de 2 maneras:

1) Mediante un bucle; esperando hasta que finalice la conversión:


El PIC no realiza ninguna otra tarea que no sea “esperar” a que el BIT “go_done” (BIT 2 del registro ad-
con0) se ponga en 0, lo cual indica que la conversión ha finalizado.

2) Iniciar la conversión y generar una interrupción al finalizar la conversión A/D:


El PIC inicia la conversión y continúa ejecutando el resto del código mientras se realiza la conversión
A/D. Cuando termina de realizar la conversión se produce una interrupción por “Fin de Conversión A/D”.

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.

Si selecciona la resolución a 8 bits, el sistema


configura de manera automática la alineación del re-
sultado de la medi ción hacia la izquierda y toma
como resultado el registro “Alto”, ignorando los 2 bits menos significativos.

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.

Para esto, active la opción “Realizar promedio”.


Seleccione la cantidad de mediciones que desea realizar. Niple realiza todas las lecturas y realiza el
promedio de manera automática.
Niple le da la opción de esperar un tiempo entre
las mediciones seleccionadas.

Página 61 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Si elige la opción “Generar una interrupción al finalizar la


conversión”, Niple chequea de forma automática el estado
de los siguientes habilitadores de inte rrupciones:

• “GIE” (Habilitador general de interrupciones)

• PEIE (Habilitador general de interrupciones por


periféricos, a los cuales pertenece el módulo de
conversión A/D).

• ADIE (Interrupción por Fin de Conversión A/D)

Si alguno de los habilitadores anteriormente


mencionados NO se encuentra “Activado”, Niple ofrece la
opción de activarlo para que la interrupción se produzca
normalmente. De lo contrario, la interrupción no se
producirá.

El modo de conversión “por interrupción” no permite realizar el promedio automático.

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).

Conversión A/D por Bucles:


Se inserta el bloque
correspondiente a la conversión
A/D como lo muestra la siguiente
imagen.

Página 62 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Conversión A/D por Interrupción:


Niple inserta de manera automática los siguientes bloques:
• Activación de las interrupciones
• Conversión A/D
• Genera de manera automática el entorno “Interrupción por A/D” dentro del cual se
insertan los bloques de asignación que recuperan el resultado de la conversión A/D.

En la siguiente ilustración se muestran los bloques y el Entorno insertados automáticamente.

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:

A los registros “Dato1” y “Dato2” se asigna el resultado de la conversión A/D.

Genera una interrupción la finalizar la conversión A/D.

EEPROM
Leer EEPROM
Lee u n dato de la memoria EEPROM del microcontrolador y lo guarda en un registro.

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 la lista Registro donde
guardar el dato, seleccione el
registro destino.

Presione el botón i ngresar.

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.

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.

Comparar Registro (8 Bits)


Evalúa el valor de un regis tro, utilizando como valor de comparación un literal o el valor de otro registro.
En la lista “Registro a evaluar”,
seleccione el registro que desea comparar.
A continuación seleccione el operador de
comparación.
Un registro puede ser comparado con un
valor literal (constante) o con el valor de
otro registro (variable).
Seleccione el tipo de valor de
comparación marcando en la casilla de
opción correspondiente

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.

Comparar Registro (16 Bits)


Evalúa un valor formado por 2 registros
(valor a 16 bits), utilizando como valor de
comparación un literal comprendido entre 0 y
65535, o comparándolo con el valor formado
por otros 2 registros (16 bits).
En la lista “Registros a evaluar”, s e-
leccione los registros que desea compa rar. A
continuación seleccione el opera dor de
comparación.
La comparación puede realizarla con
respecto a un valor literal (constante) o con el
valor de otros 2 registros (variable). Se-
leccione el tipo de valor de comparación
marcando en la casilla de opción correspon-
diente.

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”.

Los operadores de comparación posibles pueden ser =, <, >.

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.

En minuendo 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 minuendo.
Repita la operación anterior en sustraendo.
En Resultado, seleccione entre las
opciones en el registro W o en otro registro.
Si selecciono la opción en otro registro,
seleccione de la lista el registro en donde
quiere guardar el resultado de la operación.
Haga clic en Ingresar.

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.

En Dividendo 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 Di videndo.
Repita la op eración anterior en Divisor.
En Resultado, seleccione entre las opciones
en el registro W o en otro registro.

Si selecciono la opción en otro registro,


seleccione de la lista el registro en donde quiere guardar el resultado de la operación.

Haga clic en Ingresar.

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.

Si seleccionó la opción el valor de un


Registro, seleccione de la lista el registro a
utilizar como Multiplicando.
Repita la operación anterior en
Multiplicador.
En Resultado, seleccion e entre las
opciones en el registro W o en otro registro.

Si selecciono la opción en otro registro,


seleccione de la lista el registro en donde
quiere guardar el resultado de la operación.

Haga clic en Ingresar.

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.

Seleccione el registro que contiene el


valor a descomponer.
Seleccione los registros donde desea
almacenar el resultado de la
descomposición a U, D y C.

Haga clic en Ingresar.

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.

En Resultado, seleccione e ntre las opciones


en el registro W o en otro registro.
Seleccione los registros donde guardar el
resultado de la operación.
Haga clic en Ingresar.

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.

Haga clic en Ingresar.

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.

Si selecciona la opción “Registros”,


seleccione de la lista el registro a utilizar
como Multiplicando.

Repita la operación anterior en


Multiplicador.
Seleccione los registros donde guardar el
resultado de la operación.

Haga clic en Ingresar.

Reg (16) a BCD


Reali za el cálculo de conversión de un número contenido en 2 registros a BCD, es decir, descomponerlo
en unidad, decena, centena, unidad de mil y
decena de mil.

Seleccione el registro que contiene el valor


a descomponer.

Seleccione los registros donde desea


almacenar el resultado de la descomposición a
U, D, C, U de mil y D de mil.

Haga clic en Ingresar.

Página 72 de 242
Niple v4.0 - Programación Visual de Microcontroladores

BCD a Reg (16)


Realiza el cálculo de conversión de un número
contenido en 2 registros a BCD, es decir,
descomponerlo en unidad, decena, centena,
unidad de mil y de cena de mil.

Seleccione el registro que contiene el valor a


descomponer.

Seleccione los registros donde desea


almacenar el resultado de la descomposición a U,
D, C, U de mil y D de mil.

Haga clic en Ingresar.

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.

Niple soporta la interfaz DS75176 para realizar las comunicaciones RS485.

La comunicación RS485 requiere de 3 pines:


§ un pin de Transmisión (TX) , configurado como salida
§ un pin de Recepción (RX) , configurado como entrada
§ un pin de control de TX/RX de la interfaz DS75176 configurado como salida

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

A continuación se muestra un esquema de la estructura de un proyecto típico de implementación de una


red RS485.

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.

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 pre establecidos para ser utilizados por el módulo USART.

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.

Luego seleccione la velocidad de co municación.

Luego debe seleccionar el tipo de conexión del bus RS485.

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.

Luego seleccione la “función” que el maestro debe realizar :

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

A continuación se describen cada una de estas funciones:


• Enviar comandos: El maestro envía
uno o más comandos a un esclavo y
no espera respuesta del mismo. Al
seleccionar la función de “Enviar
comando”, Niple presenta la solapa
de “Enviar datos” donde debe
espe cificar los bytes que desea enviar
como comandos .

• Interrogar esclavo: Envía uno o más


comandos a modo de “solicitud de
datos” donde el es clavo debe
responder. El maestro espera a que
el esclavo envíe los datos de
respuesta. Niple muestra las solapas
de “Enviar datos” y “Recibir datos”.

• 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.

El nro de esclavo puede ser un valor


“Fijo” (un literal) o un valor variable (un re-
gistro).
Si selecciona el tipo de valor “Fijo” ,
estará haciendo que el PIC envíe el
comando siempre al mismo esclavo.

Mientras que si elige la opción “Variable”


el PIC puede enviar el dato o comando a
diferentes esclavos según el valor que
contenga el registro seleccionado como
variable. De esta manera puede generar una
estructura “cíclica” para enviar comando o consultas a diferentes esclavos modificando solo el valor del
regis tro seleccionado como variable.

A continuación debe seleccionar la cantidad de comandos que desea enviar.


Niple le permite enviar hasta 5 comandos lo cuales representan hasta 5 niveles de comandos.

Página 79 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Por ejemplo. Supongamos que diseña un proyecto con la siguiente arquitectura.

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

§ Nivel 2 = “ Tipo de sensor”. Este valor es de tipo “parámetro”.


• 01 – Tipo sensor A
• 02 – Tipo sensor B

§ Nivel 3 = “Nro. de sensor a leer ”.


• 01 – Sensor 1
• 02 – Sensor 2

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.

De esta manera, por ejemplo:


§ Para activar el sensor Tipo “A”, Nro. 1 del primer esclavo debe enviar la siguiente
secuencia de coman dos “01”, “01”, “01”, “01”.
§ Para leer el valor del sensor Tipo “A”, Nro.1 del esclavo 2 debe enviar la siguiente
secuencia de comandos “03”, “02”, “01”, “01”.

Página 80 de 242
Niple v4.0 - Programación Visual de Microcontroladores

De esta manera se utilizan 3 niveles de comandos. (Previamente se envía e l Nro. de esclavo).

En cada uno de los 5 niveles puede


generar hasta 256 comandos (o
parámetros), con lo cual se puede generar
una gran cantidad de comandos o aplicar
una gran cantidad de parámetros lo cual
facilita el desarrollo proyectos fácilmente
escalables.
Niple administra el envío de todos los
datos de comandos de manera automática.
Seleccione la cantidad de comandos que desea enviar.

Cada uno de estos comandos puede ser de tipo “Fijo” o “Variable”.

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”.

Primero ingrese la cantidad de registros


que espera recibir desde el dispositivo
esclavo. La grilla de re cepción de datos se
ajusta automáticamente la cantidad de datos
ingresados.

Página 81 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Luego debe seleccionar los registros


donde guardar cada uno de los bytes reci-
bidos. Para esto haga un clic en la celda de la
grilla correspondiente al byte a recibir.

Seleccione el registro en el cual desea


guardar el byte recibido.

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).

Por último, presione el botón “Ingresar”.

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.

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.
Luego seleccione la velocidad de
comunicación.

Página 83 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Luego debe seleccionar el tipo de conexión del bus RS485.

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.

El nro. de dispositivo se puede asignar de manera “Fija” o “Variable”.


En este punto, es muy importante tener en cue nta que el nro. de dispositivo “Fijo” implica tener que cam-
biar el programa (reprogramar el PIC) para
cambiar el nro. de dispositivo dado que este
número no se pue de cambiar una vez que
ha sido compilador el programa y grabado
en el PIC.
En un proyecto formado por una red de micros, es muy común que todos micros esclavos realicen los
mismos procesos. Es decir que un micro esclavo bien podría trabajar en cualquiera de los puntos de control
ocupado por cualquiera de los otros esclavos .

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.

Luego seleccione la “función” que el dispositivo esclavo debe reali zar:

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.

A partir de este punto, las opciones de la pantalla dependen de la función seleccionada


A continuación se describen cada una de e stas funciones:
• Responder consulta : Se reciben los
comandos desde el maestro y envía
uno o más datos como respuesta . Al
seleccionar esta función, Niple
presenta las solapas de “Recibir
comandos ” y “Enviar Respuesta”.

Página 85 de 242
Niple v4.0 - Programación Visual de Microcontroladores

• Recibir comandos : Recibe uno o


más comandos desde el maestro.
Niple muestra las solapas de “Recibir
comandos ”.

• Recibir datos: Recibe datos desde


un esclavo. Muestra la solapa “Recibir
datos”.

A continuación vamos a describir las


secciones de “Recibir Comandos ” y “Enviar
Respuestas ” las cuales son comunes a todas las funciones.

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.

Primero seleccione la cantidad de


comandos (byte) que espera recibir desde el
dispositivo maestro.

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.

Al ingresar la cantidad de registro, la grilla


se adapta automáticamente a la cantidad de
datos a enviar.

Para seleccionar el valor a enviar como


respuesta en cada byte seleccione el byte
correspondiente en la grilla de datos a
enviar.

En la parte inferior, seleccione el tipo de


dato “Fijo” o “Variable”.
Si envíe un dato de tipo “Fijo” como
respuesta, el PIC siempre enviará el mismo dato.

Mientras que si selecciona el tipo de datos variable, Niple envía el dato guardado en el registro seleccio-
nado.

Una vez seleccionado el valor a enviar, presione el botón “ OK”.


Repita esta operación para cada byte de la grilla de datos a enviar.

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.

Índice Valor Resultado


0 D’48’
1 D’49’
2 D’50’
3 D’51
4 D’52’
5 D’53’
6 D’54’
7 D’55
8 D’56’
9 D’57’
El procedimiento consiste en sumar al registro contador de programa (registro PCL) el valor correspon-
diente al índice, esto produce que la ejecución del programa “salte” la cantidad de posiciones correspon-
diente al valor del índice. Para que la tabla devuelva un valor para cada ítem, la tabla debe estar formada
por instrucciones “RETLW” (retorno de subrrutina con un valor en W) y debe ser llamada mediante una ins-
trucción “CALL”.

En el siguiente ejemplo en código Assembler se describe el principio de funcionamiento de una consulta


por tabla.

Página 89 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Crear una nueva tabla


Niple incluye un generador de tablas en el cual
Ud. declara la tabla y luego la graba como un
archivo con extensión TBL. De esta manera Ud.
puede crear su propia librería de tablas.
Para crear una tabla ingrese al menú Declar a-
ción / Generador de tablas / Tabla estándar.
Niple le muestra la pantalla de “declaración de
tablas” y solicita que ingrese el nombre de la tabla.
Cada tabla debe tener su correspondiente nombre.
Una vez ingresado el nombre debe proceder a
ingresar los valores de los distintos “elementos”
que componen la tabla. Los valores de los índices
se incrementan de manera automática ya que no
debe “sal tearse” ninguno de ellos.
Para ingresar nuevos elementos a la ta bla
presione el botón “Agregar un valor”.

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.

De esta manera podrá utilizar la tabla recién creada en


distintos proyectos sin necesidad de volver a de clararla cada
vez que la necesite.

Página 90 de 242
Niple v4.0 - Programación Visual de Microcontroladores

ConsultarTabla
Carga una tabla, la cual debe haber sido previamente
definida.

Haga clic en Cargar Tabla.


Seleccione el archivo de tabla que desea consultar,
haga clic en Abrir.
Aparecerá una pantalla con el detalle de los datos de la
tabla.

En Valor a buscar, seleccione el registro que contiene el


valor del puntero de la tabla.

En Resultado, elija el registro en donde desea guardar


el dato devuelto por la tabla.

Haga clic en Ingresar.

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.

En Tiempo de espera, escriba el valor de tiempo


que desea.
Seleccione la unidad de tiempo que desee de la
lista.
Haga clic en Ingresar.

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.

A continuación debe seleccionar los valo res a visualizar en cada display.

Página 92 de 242
Niple v4.0 - Programación Visual de Microcontroladores

En cada display se puede visualizar el valor de un registro o un valor literal.


Para seleccionar el valor a visualizar en cada dígito debe hacer un doble clic en cada imagen de display.

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.

2) O puede visualizar un valor constante (un valor literal): en


este caso se muestra siempre el mismo valor. Al seleccionar la
opción “un valor constante”, Niple presenta una imagen del display
en el cual debe hacer un clic en cada barra que quiere visualizar
iluminada. De esta forma puede generar el número o símbolo que
desea visualizar. Niple genera el código binario correspondiente
de manera automática. Este código binario varía si se trata de un
display tipo Ánodo común o Cátodo común, Niple controla el
código gen erado según el tipo de display.
Una vez ingresados los valores que desea visualizar en cada
display, debe seleccionar los pines correspondientes al
multiplexado, es decir, los pines a través de los cuales se habilita y
se deshabilita cada display en el proceso de multiplexado.

Página 93 de 242
Niple v4.0 - Programación Visual de Microcontroladores

Debajo de cada display se encuentra una lista desplegable.


En cada una de estas listas seleccione el pin al cual se conecta el común de cada display.
Niple presenta
como opciones
válidas, solo los
pines de los puertos
que se encuentra
configurados como
salida.
Una vez
seleccionados los
pines de habilitación
de cada display,
Niple le solicita que
seleccione los pines
correspon dientes al
bus de datos. En este
caso se trata de 7
pines, uno por cada
barra de los display.

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”.

Por último presione el botón “Ingresar”.

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

valores a visualizar en cada display.


En cada display se puede visualizar el valor de un registro o un valor literal.
Para esto debe hacer un doble clic en la imagen de cada display.

Al hacer doble clic en la imagen de un display


se presenta la pantalla de “Mostrar un valor en un
display”.
Mediante la utilización del codificador CD4511
solo puede visualizar valores numéricos. Es decir
que no puede crear sus propios símbolos ya que el
codificador CD4511 no reconoce dichos códigos.
Por esto solo puede visualizar el valor que
contiene un registro: este valor puede ser variable
y no requiere la codificación mediante tabla ya que ésta tarea la realiza el CD4511. Niple informa acerca de
esto en la pantalla.
Una vez ingresados los valores que desea visualizar en cada display, debe seleccionar los pines corres-
pondientes al multiplexado, es decir, los pines a través de los cuales se habilita y se deshabilita cada display
en el proceso de multiplexado.
Debajo de cada display se encuentra una lista desplegable.
En cada una de estas listas seleccione el pin al cual se conecta el común de cada display.
Niple presenta como opciones válidas, solo los pines de los puertos que se encuentra configurados como
salida.

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”.

Por último presione el botón “Ingresar”.

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.

En la versión de Niple para


PIC 16F6xx puede controlar
hasta 8 pantallas LCD y en la
versión Para PIC 16F84 puede
controlar hasta 7 pantallas
LCD.
Como siempre, en Niple,
tanto las configuraciones de
las pantallas LCD, las configu-
raciones y diseños de los de
los mensajes y los comandos
se realiza de manera visual y
en alto nivel de programación.
Niple genera todo el código
Assembler necesario de
manera automática.

Principales características:

Página 100 de 242


Niple v4.0 - Programación Visual de Microcontroladores

• Control de múltiples Pan tallas LCD de manera simultanea.


• Configuración visual de mensajes.
• Bus de datos a 4 y 8 bits configurable por el usuario.
• Mensajes con valores variables.
• Conversión automática de formato numérico a código ASCII para valores variables.
• Edición y ajuste de mensajes y comandos de manera visual.
• Envío de comandos al LCD:
ü Apagar la Pantalla
ü Encender la Pantalla
ü Limpiar la pantalla
ü Ubicación del cursor a Inicio
ü Ubicación del cursor
ü Configuración del Cursor
ü Desplazamiento del cursor
ü Desplazamiento de la Pantalla
• Envío de caracteres al LCD de manera independiente de un mensaje (para ingreso de da-
tos)
• Código Assembler optimizado: Cuando actualiza un mensaje en un LCD, si el mensaje con-
tiene valores variables, Niple solo actualiza las variables en lugar de volver a cargar todo el
mensaje nuevamente. De esta manera Niple le ahorra tiempo durante la ejecución del pro-
grama.

Para utilizar un LCD debe realizar los siguientes pasos:

1. Configurar el Puerto donde conectar el LCD


2. Configurar el LCD
3. Generar el mensaje
4. Visualiza r el mensaje
5. Opcionalmente se pueden enviar comandos o caracteres independientemente de un mensaje.

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:

Insertar/Rutinas Básicas/Visualización/Pantalla LCD/Configurar LCD

Página 101 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Al realizar un doble clic en “Configurar LCD” se presenta la pantalla “Configuración de LCD”.

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.

Página 102 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Si selecciona el bus de datos a 8 pines, Niple utiliza un puerto completo.

Página 103 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”.

Una vez ingresados todos los datos solicitados,


presione el botón Insertar y en el diagrama de flujo ac-
tual se insertara un bloque de tipo “configuración” con
las características seleccionadas.

Si desea modificar alguna de éstas cara cterísticas,


seleccione el bloque y presione la tecla “Enter”. O bien
puede seleccionar el bloque, hacer un clic con el
botón derecho del mouse y seleccionar la opción
“Editar Blo que”.
La configuración de la pantalla LCD se realiza solo
una vez en un proyecto.

Página 104 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Utilizando más de una pantalla LCD


Niple le permite controlar más de una pantalla LCD. Para esto, los pines correspondientes al bus de d a-
tos y los pines de control RS y RW de las pantallas a utilizar deben estar conectados en paralelo.
Solo debe conectar de manera independiente los pines correspondientes al control “E” de las pantallas.
El pin “E” de un LCD es el encargado de habilitar e inhabilitar una pantalla LCD. De esta manera Niple habi-
lita e inhabilita las distintas pantallas LCD de manera automática de acuerdo al programa que Ud. está des-
arrollando.
Si desea utilizar más de un LCD, el mismo debe ser configurado. Para esto debe ingresar al árbol de
herramientas y seleccionar el comando “Configurar LCD”.
Cuando Niple carga la pantalla “Configurar LCD”, supervisa si ya existe alguna otra configuración de
LCD en todo el proyecto, si esto es así, Niple asume que se trata de un segundo LCD. Entonces informa al
usuario mediante el siguiente mensaje:

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.

Página 105 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Seleccione el BIT corres pondiente al pin de control E del LCD.


Por último presione la el botón “Ingresar”.

Generar un nuevo mensaje

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

En Niple cada mensaje es identificado con


un nombre único. Por ejemplo “Bienvenida”.
Al cargar la pantalla de nuevo mensaje, lo
primero que debe ingresar es el nombre del
mens aje.

Página 106 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Además muestra el número de mensaje correspondiente.


Una vez ingresado el nombre, Niple nuestra las opciones de configuración de pantalla.

Por defecto la opción “Visualización de


Caracteres” se presenta como “Caracteres
Visibles”. Niple supone que Ud. quiere que
el mensaje sea visible al momento de
“llamar” al mensaje.

Si por algún motivo Ud. desea que el


mensaje se cargue en el LCD pero que
permanezca invisible para luego mostrarlo
con el comando “Encender Pantalla” (ver
envío de comandos más adelante),
seleccione la opción “Caracteres
Invisibles”.
Además la opción “Limpiar pantalla” se
presenta como activada.
Esta opción realiza una limpieza de la
pantalla antes de visualizar el mensaje.
Esto significa que será borrado
completamente cualquier mensaje que
haya sido visualizado antes de mostrar el actual mensaje.
Si esta opción se inhabilita, Niple no realiza la limpieza de la pantalla y existe la posibilidad de “superp o-
sición de mensajes”.
Al inhabilitar la opción “Limpiar Pantalla” Niple advierte lo anteriormente mencionado mediante el siguien-
te 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.

Página 107 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por esto, si la opción “Limpiar Pantalla” se desmarca, se activa la opción “Ubicar el cursor”.

A continuación debe seleccionar la configuración del cursor.

Si seleccione la opción “Cursor


Invisible”. La opción “Visualización
de parpadeo” se configura de
manera automática como “Sin
parpadeo”.
Seleccione la configuración del
cursor y del parpadeo.
Una vez seleccionadas todas
las opciones de la configuración
del mensaje, se activa la “Solapa
Mens aje”.

A continuación debe ingresar el


mens aje propiamente dicho.

Se presenta una imagen de la


pantalla LCD representada por
una grilla de 2 filas y en la cual se
enumeran las columnas las cuales
representan a los caracteres.

Página 108 de 242


Niple v4.0 - Programación Visual de Microcontroladores

En la grilla ingrese el mensaje que desea visualizar.

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.

Página 109 de 242


Niple v4.0 - Programación Visual de Microcontroladores

El botón “Limpiar Todo” le permite limpiar la grilla del texto cuando Ud. desea corregir el mensaje.

Visualizando valores variables en un 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”.

Al ingresar la variable, la misma se presenta en la grilla de mensaje como un símbolo de interrogación y


de color celeste. Se muestra como un símbolo de interrogación dado que Niple no puede “predecir” que va-
lor será mostrado en la correspondiente variable.

Página 110 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 111 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último presione el Botón “Ingresar”.


Al insertar un nuevo Mensaje de LCD, Niple genera un nuevo entorno para el mensaje. De esta manera
el mensaje puede ser tratado como una rutina de usuario.
Al insertarse el mensaje
como una rutina de
usuario, el mismo puede
ser “llamado” desde
cualquier parte del
programa y puede ser
visualizado en cualquier
LCD en caso de estar
utilizando más de 1 LCD.
Además, para minimizar
al máximo las posibilidades
de error de visualización,
Niple incluye la configura-
ción de la pantalla junto
con el mensaje a
visualizar. De esta manera
se garantiza que la
pantalla se va a encontrar
configurada de acuerdo a
las necesidades del
mensaje a visualizar.
De esta manera Ud. no
debe preocuparse por la
configuración de la pantalla, o la configuración y ubicación del cursor cada vez que desea visualizar el men-
saje. Simplemente indica el mensaje desea visualizar.

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”.

Página 112 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Optimización del código Assembler


Niple incluye un algoritmo de optimización de para
ahorrar recursos en tiempo de ejecución (del PIC). Niple
administra los mensajes que están siendo visualizados
en cada LCD y “sabe” en todo momento que mensaje se
está visualizando en cada LCD. Incluso si un proyecto
incluye solo 1 LCD, Niple sabe qué menaje está siendo
visualizando en el LCD.

Cuando desea visualizar un mensaje en un LCD que


ya esta mostrando en dicho mensaje, Niple solo ac-
tualiza los valores variables (en caso de que el mensaje
incluye variables). Es decir que no vuelve a “cargar”
todo el mensaje en el LCD. De esta manera se ahorra
tiempo de ejecución.
Lo mismo ocurre con la configuración de la pantalla y
la configuración y ubicación del cursor. Solo se eje cutan
éstas configuraciones cuando el mensaje no esta siendo
visualizado en el LCD 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.

Los comandos disponibles son los siguientes.


• Apagar la pantalla: Este comando apaga los caracteres. No incluye opciones.

Página 113 de 242


Niple v4.0 - Programación Visual de Microcontroladores

• Encender la pantalla: Visualiza los caracteres. Opcionalmente puede ubicar y reconfi-


gurar el cursor.

• Limpiar la pantalla: Limpiar todos caracteres de la pantalla. No incluye opciones.


• Cursor a Inicio: Ubica el cursor al inicio de la pantalla LCD, esto es, al renglón 1, cará c-
ter 1. Este comando no incluye opciones.
• Ubicar el cursor: Ubica el cursor en la posición que indique el usuario. Opcionalmente
puede reconfigurar la visualización del cursor.

• Configurar el cursor: Permite reconfigurar el cursor. Este comando requiere que nec e-
sariamente configure la visualización de los caracteres.

Página 114 de 242


Niple v4.0 - Programación Visual de Microcontroladores

• Desplazar el cursor: Permite realizar un desplazamiento del cursor hacia la izquierda o


hacia la derecha. Opcionalmente puede ingresar un retardo entre cada desplazamiento.

• Desplazar la pantalla: Permite realizar un desplazamiento de la pantalla hacia la iz-


quierda o hacia la derecha. Opcionalmente puede ingresar un retardo entre cada des-
plazamiento. Este comando produce un efecto visual d e desplazamiento del mensaje.

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 .

Niple le permite enviar un carácter o un texto.

Además le permite enviar los caracteres a la


actual posición del cursor o definir una posición de
visualización determinada. Si necesita enviar un
valor numérico guardado en un registro, Niple le
ofrece la posibilidad de convertirlo a código ASCII
de manera automática.

Página 115 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 116 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Memorias EEPROM I2C


Leer Memoria EEPROM I2C
Para leer datos de memorias EEPROM de la familia 24Cxx x.
Ingrese al árbol de herramientas a:

Se presenta la pantalla “Leer Memoria EEPROM 24Cxxx”.


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.

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 va-
rios dispositivos en paralelo f ormando
una red, en la cual, a cada dispositivo
se le asigna un numero. Este número
de dispositivo se configura conectado
los pines correspon dientes de cada
dispositivo. La cantidad de dispositi-
vos que puede incluir en una red de-
pende del modelo de memoria que
esta utilizando. Niple controla de ma-
nera automática la cantidad de dispo-
sitivos que puede conectar en función
del modelo seleccionado.

Página 117 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Si selecciona el tipo de dirección


“Variable” debe seleccionar el registro
que contiene el valor correspondiente 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 registro
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 seleccionada la dirección a leer, debe seleccionar el registro donde guardar el dato obtenido desde
la memoria.
Por último, puede ingresar un comentario.

Página 118 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Una vez ingresados los parámetros


requeridos, puede visualizar el
esquema de conexión.

Por último, presione el botón


“Ingresar“ y se insertará el bloque de
Lectura de Memoria EEPROM en el
diagrama de flujo.

Escribir Memoria EEPROM I2C


Para guardar datos de memorias EEPROM de la familia 24Cxxx ingrese al
árbol de herrami en tas como se muestra en la imagen de la derecha:
Se presenta la pantalla “Escribir Memoria EEPROM 24Cxxx”.

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.
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.

Página 119 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 120 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Puede ingresar un valor


literal o seleccionar un registro
el cual contiene le valor que
desea grabar.

Si selecciona la opción “un

Literal”, debe seleccionar el tipo


de dato a grabar y luego debe
ingresar el valor que desea
grabar en la memoria.

Si selecciona la opción “un


Registro”, debe seleccionar el
registro que contiene el valor a
grabar en la memoria.

Página 121 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último, puede ingresar un comentario.

Una vez ingresados los parámetros requeridos, puede visualizar el esquema de conexión.

Página 122 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 123 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Si selecciona el tipo de dirección


“Variable” debe seleccionar el registro
que contiene el valor correspondiente
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 registro
seleccionado al ejecutarse el
programa.
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.

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.

Página 124 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Una vez ingresados los parámetros


requeridos, puede visualizar el
esquema de conexión.

Por último, presione el botón “Ingre-


sar“ y se insertará el bloque de Lectura
de Memoria RAM en el diagrama de
flujo.

Escribir 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 escribir datos de la
memoria RAM ingrese al árbol de herramientas como se muestra en la imagen
de la derecha:
Se presenta la pantalla “Escribir 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.
Luego debe seleccionar los pines
de señal de reloj y de datos corres-
pondientes al bus I2C. Primero selec-
cione el puerto y luego el pin corres-
pondiente.
Una vez seleccionados los pines
del bus I2C, debe seleccionar el
núme ro 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 con-
figura conectado los pines correspondientes de cada dispositivo. La cantidad de dispositivos que puede

Página 125 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 RAM.
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. Me diante 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 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.

Página 126 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Una vez seleccionada la dirección a escribir,


debe indicar el dato que desea grabar en la
memoria.
Puede ingresar un valor literal o seleccionar
un registro el cual contiene le valor que desea
grabar.
Si selecciona la opción “un Literal”, debe
seleccionar el tipo de dato a grabar y luego
debe ingresar el valor que desea grabar en la
memoria.

Si selecciona la opción “un Registro”, debe


seleccionar el registro que contiene el valor a
grabar en la memoria.

Por último, puede ingresar un comentario.

Una vez ingresados los parámetros


requeridos, puede visuali zar el esquema de
conexión.

Página 127 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Reloj de Tiempo Real


Configurar el PCF8583
El reloj de tiempo real PCF8583 controla fechas y horas de manera autónoma y precisa, sin necesidad
que el microcontrolador se “ocupe” de esto ahorrando, código y tiempo de
proceso.
Para poder utilizar el reloj de tiempo real PCF8583, primero debe
configurarlo.
Para esto ingrese al árbol de herramientas como se muestra en la
imagen de la derecha.
Se presenta la pantalla “Configuración 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 seleccionar el número de dispositivo al cual
desea acceder.

Recuerde que puede conectar varios disposi-


tivos 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 tratara del mismo tipo de
dispositivos.
Primero debe seleccionar el modo de trabajo,
los cuales pueden ser reloj de 32768 Khz. o reloj
50 Hz.
Al seleccionar el modo de trabajo, se habilitan
las solapas denominadas “Fecha”, “Hora” y
“Alarmas”.

Página 128 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”:

Página 129 de 242


Niple v4.0 - Programación Visual de Microcontroladores

La siguiente imagen muestra una configuración de fecha “Variable”:

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.

Página 130 de 242


Niple v4.0 - Programación Visual de Microcontroladores

La siguiente imagen muestra una configuración de Hora “Fija”:

La siguiente imagen muestra una configuració n de Hora variable:

Página 131 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 132 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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’

Alarma por Fecha


• Día
- Fijo: entre 01 y 31 inclusive.
- Variable : un registro que contiene el valor del día seleccionado.

• 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:

Página 133 de 242


Niple v4.0 - Programación Visual de Microcontroladores

La configuración de alarma por Temporización le permite realizar temporización independientemente de


la fecha, por ejemplo, 5 segundos, 35 minutos ó 3 horas:
El tipo de temporización puede ser “Fijo” ó “Variable”:
La siguiente imagen muestra una alarma por temporización Fija.

La siguiente imagen muestra una temporización Variable:

Página 134 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 135 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 136 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Para leer la “Fecha Actual”, ingrese a la sección “Fecha”.

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.

Página 137 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último, puede consultar el esquema de conexión.

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.

3) Repita esta operación hasta declarar la cantidad de bits que desee.

4) Seleccione la señal de Reloj , que producirá la rotación de todos sus bits.

5) Elija si el registro se va a rotar cuando el BIT reloj sea 1(uno) o 0(cero).

Página 138 de 242


Niple v4.0 - Programación Visual de Microcontroladores

6) Seleccione que condición se tiene que cumplir para que sea introducido un 1(uno) al registro.

7) Haga clic en Ingresar.

Las casillas de verificación “Y” o “O” corresponden a las operaciones lógicas AND y OR inclusiva corres-
pondientemente.

Página 139 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 140 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Niple para PIC 12F6xx

Características técnicas de los PIC 12F6xx

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.

Entre las principales características del PIC 16F84 podemos destacar:

• Voltaje de alimentación: 5VCC.


• CPU RISC
• Circuito Integrado de 8 pines.
• 6 Pines de configurables como Entrada o Salida.
• Frecuencia operación máxima: 20 Mhz.
• Memoria Flash:
ü 12F629 = x Kbytes
ü 12F675 = x Kbytes
• Memoria de Datos:
ü 12F629 = x Bytes
ü 12F675 = x Bytes
• Memoria de Datos EEPROM:
ü 12F629 = x Bytes
ü 12F675 = x Bytes
• 1 Temporizador interno de 8 bits (TMR0).
• 1 Temporizador interno de 16 bits (TMR1).
• 1 Comparador Analó gico
• Conversores Analógico-Digital:
ü 12F675 = 4 canales

Como mencionamos anteriormente, 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

Página 141 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.).

Conexió n de los PIC 12F6xx

El puerto del PIC 12F6xx


Los microcontroladores de la familia 12F6xx disponen de 1 puerto formado por 4 pines.

Página 142 de 242


Niple v4.0 - Programación Visual de Microcontroladores

IMPORTANTE: Procedimiento para programación de los PIC 12F6xx.


Los micros de las familia de PIC 12 F6xx requieren un procedimiento especial para ser programados.
Estos micros requieren de un valor de calibración ubicado en final de la memoria de progr ama que per-
mite garantizar la correcta calibración del oscilador interno.

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 .

A continuación, vamos a utilizar el PIC12F675 y el software de programación IcProg.


Seleccione el modelo correcto de PIC. En este caso el 12F675.

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).

En nuestro ejemplo el valor de calibración del PIC actualmente utilizado es 0x3428 .

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.

Cargue el archivo .HEX que desea programar en ICProg.

Página 143 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 zona de valor hexadecimal , ingrese el valor de calibración anteriormente obtenido .

Para nuestro ejemplo, el valor corresponde a 3428.

Presione el botón “OK”.

Ahora el programa esta listo para grabar el PIC.

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.

Página 144 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 145 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Módulos específicos de Niple para PIC 12F6xx


Crear un nuevo proye cto.
Para crear un nuevo proyecto ingrese al menú Archivo \Nuevo Proyecto...
Se presentará la pantalla de
Nuevo Proyecto.
En primer lugar debe
seleccionar el modelo PIC que
será utilizado para desarrollar
el proyecto.
Es importante saber que en
Niple, todo el sistema de
adapta de acuerdo al modelo
de PIC seleccionado (los
registros, los bits, memoria
EEPROM, periféricos,
interrupciones, etc.).
Tenga en cuenta que una
vez creado el proyecto no puede cambiar el modelo de PIC.
Una vez seleccionado el modelo de PIC a utilizar Niple le solicita que ingrese los siguientes datos:
Datos del Proyecto:
• Nombre del proyecto: Nombre descriptivo del proyecto (No es el nombre de Archivo).
• Descripción del proyecto: Ingrese una descripción para identificar el proyecto
• Fecha: Por defecto Niple presenta la fecha actual del sistema.
• Nombre del Autor: Niple asigna el nombre del titular de la licencia como Autor del proyecto.
Este nombre no puede ser modificado.

Página 146 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 proye cto.

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.

Página 147 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 12F6xx cuenta con 2 bancos de


memoria, las cuales son presentadas en 1 “solapa”.

Cada registro está identificado con una “dirección


de registro” la cual está expresada en formato
hexadecimal.

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 r egistros.
Registros inhabilitados (Color Gris):
Corresponde a la memoria no disponible. Estas direcciones de memoria no pueden ser utilizadas.

Declaración de un Registro de Usuario


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”, “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.

Página 148 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

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.

Página 149 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Declaración de un Bit de Usuario


Antes de declarar un BIT de usuario debe haber declarado primero el registro de usuario al cual pertene-
ce el BIT que desea declarar.
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.

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”.

Página 150 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

El PIN A5 como Reset o Entrada Digital


Este pin 3 del puerto (pin 4 del microcontrolador) puede ser utilizado como pin de RESET del microcon-
trolador. Cuando no lo utilizamos como RESET, este pin solo puede ser utilizado como Entrada digital. La
función de este pin la seleccionamos desde el panel de control que se encuentra a la derecha del diagrama
de flujo .
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.

Los pines A6 y A7 como Oscilador externo o Entradas/Salidas Digitales


Cuando utilizamos el microcontrolador configurado con un oscilador externo, el mismo se conecta a los
pines A6 y A7. Si utilizamos el microcontrolador con el oscilador interno del micro, estos pines pueden ser
utilizados como Entradas/Salidas Digitales.
La configuración
de estos pines se
controla de manera
automática en
función de la
velocidad de reloj
seleccionada en le
panel de control
que se encuentra a
la derecha del
diagrama de flujo.
Si selecciona
una configuración
de oscilador
interno, Niple
habilita de manera
automática los
pines 6 y 7 del
puerto A para ser
utilizados como
Entradas o Salidas
Digitales.

Página 151 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Las siguiente imagen muestra las configuraciones del pin de reset y del oscilador externo y como afectan
la disponibilidad de los pines del puerto.

El módulo Comparador Analógico


La línea 12F6xx cuenta con 1
módulo comparador Analógico.
Este se encuentra en los pines 0,
1 2 del puerto. Por defecto, en
Niple el módulo comparador se
inicializa desconectado.

Para configurar el módulo


comparador, marque la opción
“Habilitar comparador analógico”
que se encuentra en el extremo
superior izquierdo de la pantalla
de configuración del puerto.

Página 152 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Puede seleccionar alguna de las siguientes configuraciones:

Página 153 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Página 154 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.

Configuración de los canales A/D


El módulo de conversión A/D solo esta disponible en el modelo de PIC 12F675. EL 12F629 no tie ne con-
versores A/D.
Cuando alguno de los pines GP0, GP1, GP2 o GP4 es configurado como entrada, ésta puede utilizarse
como entrada digital o como una conversión analógica/digital (A/D).
Por esto, se presenta una segunda casilla de verificación donde se esp ecifica el tipo de lectura a realizar.
Por defecto se presenta opción ‘D’ que significa “Entrada Digital”.

Página 155 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 156 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Página 157 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 seleccione el pin por el cual


transmitir los datos y la velocidad de
comunicación.
Luego, ingrese la cantidad de bytes que
desea transmitir.

Seleccione los datos a enviar.


Puede enviar datos fijos (literales) o
variables (registros).

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.

Para enviar un dato de tipo “Fijo” (literal).

Página 158 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Para enviar un dato de tipo “Variable” (registro).

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.

Página 159 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Al presionar el botón ingresar, se inserta el bloque en el diagrama de flujo.

Página 160 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 seleccione la cantidad de registros que


desea recibir.

Luego ingrese los registros donde desea guardar cada uno de los datos recibidos.

Niple le permite calcular y verificar el checksum de los datos recibidos.


Al seleccionar esta opción, automáticamente se agregan los registros correspondientes a la recepción de
los bytes de checksum.

Página 161 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último presione el botón “Ingresar”.

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.

2) Si selecciono Interrup. 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.

Haga clic en Ingr esar.

Página 162 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Niple para PIC 16F84


Características técnicas del PIC 16F84
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 PIC 16F84, al igual que el resto de los microcontroladores de la actualidad, están
diseñados con la arquitectura Harvard. La arquitectura Harvard dispone de dos memorias independientes;
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 (lectura o escritu-
ra) simultáneamente en ambas memorias.

Entre las principales características del PIC 16F84 podemos destacar:


• Voltaje de alimentación: 5VCC.
• CPU RISC
• Circuito Integrado de 18 pines.
• 13 Pines de configurables como Entrada o Salida.
• Frecuencia operación máxima: 10 Mhz.
• Memoria Flash: 1 Kbytes
• Memoria de Datos: 68 bytes
• Memoria de Datos EEPROM: 64 bytes
• 1 Temporizador interno de 8 bits.
• 3 Interrupciones.

Como mencionamos anteriormente, 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 se utiliza un cristal. 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.).
Lo microcontroladores de la línea 16F6xx pueden ser configurados para que el origen de la señal de reloj
sea a trabes de un oscilador interno. Con esto, puede prescindir del oscilador externo y utilizar los pines co-
rrespondientes a la entrada del oscilador 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.

Página 163 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Conexió n del PIC 16F84

Los puertos del PIC 16F84


Los microcontroladores PIC 16F84 disponen de 2 puertos denominados “Puerto A” y “Puerto B” de 5 y 8
pines respectivamente, los cuales pueden ser configurados como Entrada o Salida. La configuración de los
puertos se realiza mediante los registros TRISA y TRISB, y por medio de los registros PORTA y PORTB se
accede directamente a cada uno de los pines de los puertos.

Página 164 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Módulos específicos de Niple para PIC 16F84


Crear un nuevo proyecto.
Para crear un nuevo proyecto ingrese al menú Archivo \ Nuevo Proyecto...
Se presentará la pantalla de Nuevo Proyecto donde Niple le solicita que ingrese los siguientes datos:

Datos del proyecto


Nombre del proyecto: Nombre descriptivo del proyecto (No es el nombre de Archivo).
Descripción del proyecto: Ingrese una descripción para identificar el proyecto
Fecha: Por defecto Niple presenta la fecha actual del sistema.
Nombre del Autor: Niple asigna el nombre del titular de la licencia como Autor del proyecto. Este nom-
bre no puede ser modificado.

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 repetir el
nombre de un archivo de proyecto.
Una vez ingresados todos los datos necesarios, presione el botón “Crear”.

Página 165 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.


Cada registro está identificado con una “dirección de registro” la cual está expresada en formato hexade-
cimal.

Página 166 de 242


Niple v4.0 - Programación Visual de Microcontroladores

El mapa de memoria de datos presenta los disti n-


tos 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 utili zadas.

Declaración de un registro de usuario

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.

Página 167 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Página 168 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Página 169 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Comunicaciones
RS232
RS232 – Enviar datos
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 seleccione el pin por el cual


transmitir los datos y la velocidad de
comunicación.
Luego, ingrese la cantidad de bytes que
desea transmitir.

Seleccione los datos a enviar.


Puede enviar datos fijos (literales) o
variables (registros).

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.

Para enviar un dato de tipo “Fijo” (literal).

Página 170 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Para enviar un dato de tipo “Variable” (registro).

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.

Página 171 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Al presionar el botón ingresar, se inserta el bloque en el diagrama de flujo.

Página 172 de 242


Niple v4.0 - Programación Visual de Microcontroladores

RS232 – Recibir datos


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 seleccione la cantidad de registros que


desea recibir.

Luego ingrese los registros donde desea guardar cada uno de los datos recibidos.

Niple le permite calcular y verificar el checksum de los datos recibidos.

Al seleccionar esta opción, automáticamente se agregan los registros correspondientes a la recepción de


los bytes de checksum.

Página 173 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último presione el botón “Ingresar”.

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.

2) Si selecciono Interrup. 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.

Haga clic en Ingresar.

Página 174 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Niple para PIC 16F6xx


Características técnicas de los PIC 16F6xx
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 16F6xx, 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.

• Voltaje de alimentación: 5VCC.


• CPU RISC
• Circuito Integrado de 18 pines.
• 16 Pines de configurables como Entrada o Salida.
• Frecuencia operación máxima: 20 Mhz.
• Memoria Flash:
ü 16F627 = 1 Kbytes
ü 16F628 = 2 Kbytes
ü 16F648 = 4 Kbytes
• Memoria de Datos:
ü 16F627 = 224 bytes
ü 16F628 = 224 bytes
ü 16F648 = 256 bytes
• Memoria de Datos EEPROM:
ü 16F627 = 128 bytes
ü 16F628 = 128 bytes
ü 16F648 = 256 bytes
• 2 Temporizadores internos de 8 bits.
• 1 Temporizador interno de 16 bits.
• 1 Módulo CCP (Captura, Comparación y PWM).
• 1 Módulo de comunicaciones USART.
• 2 Comparadores analógicos.
• 10 Interrupciones.

Como mencionamos anteriormente, 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.

Página 175 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Conexió n de los PIC 16F6xx

Los puertos del PIC 16F6xx

Los microcontroladores de la familia 16F6xx


disponen de 2 puertos denominados “Puerto A” y
“Puerto B”. Ambos puertos cuentan con 8 pines que
pueden ser configurados como Entrada o Salida.

La configuración de los puertos se realiza


mediante los registros TRISA y TRISB, y por medio
de los registros PORTA y PORTB se accede
directamente a cada uno de los pines de los puertos.

Página 176 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Módulos específicos de Niple para PIC 16F6xx


Crear un nuevo proyecto.
Para crear un nuevo proyecto ingrese a l menú Archi vo\Nuevo Proyecto...
Se presentará la
pantalla de Nuevo
Proyecto.
En primer lugar
debe seleccionar el
modelo PIC que será
utilizado para
desarrollar el
proyecto.
Es importante
saber que en Niple,
todo el sistema de
adapta de acuerdo al
modelo de PIC
seleccionado (los
registros, los bits,
memoria EEPROM, periféricos, interrupciones, etc.).

Tenga en cuenta que una vez creado el


proyecto no puede cambiar el modelo de
PIC.
El Botón “Características de la Línea
16F6xx” presenta un cuadro comparativo
con las características de cada uno de los
modelos de PIC que componen la línea
16F6xx.

De ésta manera Niple lo ayuda a


seleccionar el modelo de PIC a utilizar.

Una vez seleccionado el modelo de PIC


a utilizar Niple le solicita que ingrese los
siguientes datos:

Página 177 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Datos del proyecto


Nombre del proyecto: Nombre descriptivo del proyecto (No es el nombre de Archivo).
Descripción del proyecto: Ingrese una descripción para identificar el proyecto
Fecha: Por defecto Niple presenta la fecha actual del sistema.
Nombre del Autor: Niple asigna el nombre del titular de la licencia como Autor del proyecto. Este nom-
bre no puede ser modificado.

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 repetir 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.

Página 178 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

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.

Página 179 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Registros deshabilitados (Color Gris): Corresponde a la memoria no disponible. Estas direcciones de


memoria no pueden ser utilizadas.

Declaración de un Registro de Usuario


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”, “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.

Página 180 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Declaración de un Bit de Usuario


Antes de declarar un Bit de usuario, es necesario que previamente haya de clarado el registro de usuario
al cual pertenece el Bit.
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.

Página 181 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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:

El PIN A5 como Reset o Entrada Digital


Este pin 5 del puerto A (pin 4 del microcontrolador) puede ser utilizado como pin de RESET del micro-
controlador. Cuando no lo utilizamos como RESET, este pin solo puede ser utilizado como Entrada digital.
La función de este pin la seleccionamos desde el panel de control que se encuentra a la derecha del dia-
grama de flujo.

Página 182 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Los pines A6 y A7 como Oscilador externo o Entradas/Salidas Digitales


Cuando utilizamos el microcontrolador con un oscilador externo, el mismo se conecta a los pines A6 y
A7. Si utilizamos el microcontrolador con el oscilador interno del micro, estos pines pueden ser utilizados
como Entradas/Salidas
Digitales.
La configuración de estos
pines se controla de manera
automática en función de la
velocidad de reloj seleccionada
en le panel de control que se
encuentra a la derecha del
diagrama de flujo
Si selecciona una
configuración de oscilador
interno, Niple habilita de
manera automática los pines 6
y 7 del puerto A para ser
utilizados como Entradas o
Salidas Digitales.

Página 183 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Los Comparadores analógicos


La línea 16F6xx cuenta con 2 comparadores Analógicos. Estos se encuentran en los pines 0 al 3 del
puerto A. Por defecto, en Niple los módulos comparadores se inicializan desconectados.
Para configurar los módulos de los comparadores, marque la opción “Habilitar comparadores” que se e n-
cuentra en el extremo superior izquierdo de la pantalla de configuración del puerto A.

Página 184 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Puede seleccionar alguna de las siguientes configuraciones:

Página 185 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Página 186 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Una vez seleccionado el modo de operación de los comparadores, presione el botón “Ingresar”.

Página 187 de 242


Niple v4.0 - Programación Visual de Microcontroladores

De manera automática Niple asigna las configuraciones a los pines correspondientes a los comparado-
res.

Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.


Si el chequeo de la configuración seleccionada resulta ser correcta, Niple inserta el bloque en el diagr a-
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_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

Página 188 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Página 189 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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:

Se presenta la pantalla de configuración del comparador.

Página 190 de 242


Niple v4.0 - Programación Visual de Microcontroladores

En la parte superior de la pantalla se muestra la configuración del puerto A y de los comparadores.

A continuación debe seleccionar el modo de funcionamiento del comparador seleccionado. Seleccione


como poner la salida (0 ó 1) cuando el voltaje en la entrada Vin+ sea mayor a la entrada Vin-.
Si está utilizando alguna de las configuraciones de comparadores “Multiplexados ”, se activa la opción de
selección de comparador por multiplexado. Debe seleccionar el comparador que desea utilizar.

Página 191 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Si la configuración seleccionada es “4 entradas multiplexadas”, debe seleccionar el voltaje de referencia


interno. Este voltaje está predefinido y puede seleccionar cualquiera de los siguientes voltajes:

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.

Página 192 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

El módulo CCP puede trabajar en tres modos diferentes, que son:

- Modo Captura
- Modo Comparación
- Modo Modulación por Ancho de Pulso, PWM

Página 193 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 Pin RB3 debe estar configurado como Entrada.

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).

Programando el modo Captura en Niple

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.

Página 194 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”.

Página 195 de 242


Niple v4.0 - Programación Visual de Microcontroladores

A continuación seleccione una de las 2 maneras que tiene de realizar la captura.


Esperar en un bucle hasta que termine la Captura: El PIC no realiza ninguna otra tarea que no sea “es-
perar” a que el Bit 2 del registro PIE1 (Bit CCP1IE)
se ponga en 1, lo cual indica que se ha realizado
una captura.

1) No esperar y generar una interrupción por


Fin de Captura: Se configura el modo
Captura y continúa ejecutando el resto del
código. Cuando se realiza la captura se
produce una interrupción por “Fin de
Captura”.
Sea cual fuere la opción seleccionada, a
continuación le solicita que seleccione los registros
donde guardar el resultado de la captura.
Si ha seleccionado la opción “No esperar y
generar una n
i terrupció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.

Por último puede ingresar un comentario.

Página 196 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Una vez seleccionad os todos lo parámetros, presione el botón “Ingresar”.


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”

Página 197 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

El Pin RB3 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.

Página 198 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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).

Programando el modo Comparación en Niple

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.

Una vez realizados los pasos previos necesarios ya esta en condiciones de


realizar una Comparación.
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 imagen
de la derecha .
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 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 debe seleccionar el valor de


Comparación. O sea, el valor hasta el cual
desea que el temporizador interno TRM1
incremente. Dado que el temporizador TMR1
está formado por 2 registros (TRM1H y TMR1L),
el valor de comparación también corresponde a
un número de 16 bits.

Página 199 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Una forma más versátil de realizar esto es:


asignando 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 poder
actualizar el “valor de comparación” mediante
algún sistema de “Set Point” (por RS232,
Teclado, o pulsadores que incrementen y
decrementen estos valores) y se guarde (por
ejemplo) los valores de estos 2 registros en la
memoria EEPROM.

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”.

Página 200 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 201 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último puede ingresar un comentario.


Una vez seleccionados todos lo parámetros, p resione el botón “Ingresar”.
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 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.

Página 202 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Si desea obtener el periodo que genera un determinado valor de PR2:


Periodo = (PR2 + 1) * 4 * Tosc * Predivisor_de_TRM2

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%).

Además, el valor “Valor_Ancho_Pulso” debe estar organizado de la siguiente manera:

Página 203 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Los bits 0 y 1 se ubican en los bits 4 y 5 del registro CCP1CON, respectivamente.


Y los bits 2 a 9 se ubican en el registro CCPR1L según se indica en la siguiente imagen.

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.

Programando el PWM con Niple


Para poder utilizar el Modo PWM primero debe realizar los siguientes pasos:
- Configurar y activar el temporizador interno TMR2.
- Configurar el Pin RB3 como Salida.

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.

Página 204 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

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 veloci dad del cristal utilizado.
A modo de ilustración generaremos 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.

Página 205 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”.

Página 206 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último puede ingresar un comentario.


Una vez seleccionados todos lo parámetros, presione el botón “Ingresar”.

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.

Página 207 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Por último seleccione la velocidad de comunicación.

Página 208 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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:

GIE = habilitador general de interrupciones


PEIE = Habilitador de interrupciones por periféricos
RCIE = Habilitador de interrupción por Recepción en USART.

Si alguna de éstas banderas de interrupción no ha sido activada, no se producirá la interrupción al recibir


un dato y por ende, el micro no detectará cuando recibe un dato.

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.

Por último presione le botón “Ingresar”.

Configurar Interrup.
Permite configurar todas las opciones posibles para las interrupciones.

Seleccione la interrupción a configurar, para esto


haga clic sobre las casillas de verificación
disponibles para cada caso.

Haga clic en Ingresar.

Página 209 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Niple para PIC 16F87x


Características técnicas de los PIC 16F87x
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 16F87x, 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.
• Voltaje de alimentación: 5VCC.
• CPU RISC
• Circuito Integrado de 18 pines.
• Pines de configurables como Entrada o Salida:
ü 16F870/3/6 = 22 pines
ü 16F874/7 = 33 pines
• Frecuencia operación máxima: 20 Mhz.
• Memoria Flash:
ü 16F870/3/4 = 4 Kbytes
ü 16F876/7 = 8 Kbytes
• Memoria de Datos:
ü 16F870/3/4 = 192 Bytes
ü 16F876/7 = 368 Bytes
• Memoria de Datos EEPROM:
ü 16F870/3/4 = 128 Bytes
ü 16F876/7 = 256 Bytes
• 2 Temporizadores internos de 8 bits.
• 1 Temporizador interno de 16 bits.
• Módulos CCP (Captura, Comparación y PWM):
ü 16F870 = 1 módulo
ü 16F873/4/6/7 = 2 módulos
• 1 Módulo de comunicaciones USART.
• Conversores Analógico-Digital:
ü 16F870/3/6 = 5 canales
ü 16F874/7 = 8 canales
• Interrupciones:
ü 16F870/3/6 = 13
ü 16F874/7 = 14

Página 210 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.).

Conexión de los PIC 16F87x

Página 211 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Los puertos del PIC 16F87x


Los microcontroladores de la familia 16F87x disponen de 3 o 5 puertos según el modelo de microcontro-
lador:
Puerto A = 6 pines (5 pines A/D)
Puerto B = 8 pines
Puerto C = 8 pines
Puerto D = 8 pines
Puerto E = 3 pines (3 pines A/D)

Página 212 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Módulos específicos de Niple para PIC 16F87x


Crear un nuevo proyecto.
Para crear un nuevo proyecto ingrese al menú Archivo \Nuevo Proyecto...
Se presentará la
pantalla de Nuevo
Proyecto.
En primer lugar
debe seleccionar el
modelo PIC que será
utilizado para
desarrollar el proyecto.
Es importante
saber que en Niple,
todo el sistema de
adapta de acuerdo al
modelo de PIC
seleccionado (los
registros, los bits,
memoria EEPROM,
periféricos, interrupciones, etc.).
Tenga en cuenta que una vez creado el proyecto no puede cambiar el modelo de PIC.
El Botón “Características de la Línea 16F87x” presenta un cuadro comparativo con las características de
cada uno de los modelos de PIC que componen la línea 16F87x.

Página 213 de 242


Niple v4.0 - Programación Visual de Microcontroladores

De ésta manera Niple lo ayuda a seleccionar el modelo de PIC a utilizar.


Una vez seleccionado el modelo de PIC a utilizar Niple le solicita que ingrese los siguientes datos:

Datos del proyecto


Nombre del proyecto: Nombre descriptivo del proyecto (No es el nombre de Archivo).
Descripción del proyecto: Ingrese una descripción para identificar el proyecto
Fecha: Por defecto Niple presenta la fecha actual del sistema.
Nombre del Autor: Niple asigna el nombre del titular de la licencia como Autor del proyecto. Es-
te nombre no puede ser modificado.

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.

Página 214 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 16F87x 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.

El mapa de memoria de datos presenta los distintos los tipos de registros con diferentes colores.

Página 215 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 un Registro de Usuario


Para declarar un registro de usuario debe ha cer 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á decla rando, 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 conte nga 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 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.

Página 216 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Registros deshabilitados (Color Gris): Corresponde a la memoria no disponible. Estas direcciones de


memoria no pueden ser utilizadas.

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.

Declaración de un Bit de Usuario


Antes de declarar un BIT de usuario debe haber declarado primero el registro de usuario al cual pertene-
ce el BIT que desea declarar.

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.

Página 217 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 218 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Configuración de los canales A/D


Cuando alguno de los pines del puerto A (a excepción del pin RA4) es configurado como entrada, ésta
puede utilizarse como
entrada digital o como
una conversión
analógica/digital
(A/D).
Por esto, se
presenta una segunda
casilla de verificación
donde se especifica el
tipo de lectura a
realizar.
Por defecto se
presenta opción ‘D’
que significa “Entrada
Digital”.

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.

Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.

Página 219 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

La configuración seleccionada será actualizada en la pantalla de configuración del puerto A.

Una vez seleccionada la configuración correcta, presione el botón “Ingresar”.

Página 220 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 221 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Una vez seleccionada la configuración deseada, presione el botón “Ingresar”.

Página 222 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 223 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

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
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

Página 225 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Asignación de bits a los registros CCPxCON, x puede tomar el valor 1 o 2.

CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0


7 6 5 4 3 2 1 0

Los módulos pueden trabajar en tres modos diferentes, que son:


- Modo Captura
- Modo Comparación
- Modo Modulación por Ancho de Puls o, PWM

CCPxM3-0 Modo de trabajo para los módulos CCP


0000 Módulo desconectado.
0100 Modo captura cada flanco descendente.
0101 Modo captura cada flanco ascendente.
0110 Modo captura cada 4 flancos ascendente.
0111 Modo captura cada 16 flancos ascendente.
1000 Modo comparación que activa la salida RC.
1001 Modo comparación que desactiva la salida RC.
1010 Modo comparación que genera una interrupción en el programa.
1011 Modo comparación que genera un disparo para cada módulo.
11xx Modo 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 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).

Página 226 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Programando el modo Captura en Niple


Para poder utilizar el Modo Captura primero debe realizar los siguientes pasos:
• Configurar y activar el temporizador interno TMR1.
• Configurar el Pin correspondiente al módulo CCP como Entrada.

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.

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 imagen de la derecha .
Se presenta la pantalla “Módulo CCP1”. Es importante aclarar que los 3
modos (Captura, Com paració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 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.

Página 227 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”.

Página 228 de 242


Niple v4.0 - Programación Visual de Microcontroladores

A continuación seleccione 1 de las 2 maneras que tiene de realizar la captura.

1) Esperar en un bucle hasta que termine la


Captura: El PIC no realiza ninguna otra
tarea que no sea “esperar” a que el BIT 2
(CCP1IE) del registro PIE1 se ponga en
1, lo cual indi ca que se ha realizado una
captura.

2) No esperar y generar una interrupción por


Fin de Captura: Se configura el modo
Captura y conti núa ejecutando el resto del
código. Cuando se realiza la captura se
produce una interrupción por “Fin de
Captura”.

Sea cual fuere la opción seleccionada, a


continuación le solicita que seleccione los registros
donde guardar el resultado de la captura.

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 ilustración de la derecha muestra este caso.

Por último puede ingresar un comentario.


Una vez seleccionados todos lo parámetros,
presione el botón “Ingresar”.

Página 229 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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” .

Página 230 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 231 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Programando el modo Comparación en Niple


Para poder utilizar el Modo Comparación primero debe realizar los siguientes pasos:
- Configurar y activar el temporizador interno TMR1.
- Configurar el Pin correspondiente al módulo CCP como Salida.

En es te caso trabajamos sobre el modo Comparación del módulo CCP1,


pero lo desarrollado a continuación es válido también para el modo
Comparación del módulo CCP2.
Una vez realizados los pasos previos necesarios ya esta en condiciones de
realizar una Comparación.
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 imagen de la derecha .
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 correspondiente al
módulo, en este caso el Pin RC2 como Salida.
Si todo esta correctamente configurado, Niple
permite comenzar a seleccionar las opciones
correspondientes, de lo contrario, no permite
continuar hasta no contar con los requisitos
anteriormente mencionados.
En primer lugar debe seleccionar el valor de
Comparación. O sea, el valor hasta el cual desea
que el temporizador interno TRM1 incremente.
Dado que el temporizador TMR1 está formado
por 2 registros (TRM1H y TMR1L), el valor de comparación también corresponde a un número de 16 bits.

Página 232 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

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 correspondiente.
- Poner a 0 el Pin correspondiente.
- Generar una interrupción. Esta opción
no afecta al Pin correspondiente el Módulo CCP.

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 (CCP1IE) del registro PIE1 se
ponga en 1, lo cual indica que ha
finalizado la comparación.

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”.

Página 233 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 234 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Por último puede ingresar un comentario.


Una vez seleccionados todos lo parámetros, presione el botón “Ingresar”.

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”.

Página 235 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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

Si desea obtener el periodo que genera un determinado valor de PR2:


Periodo = (PR2 + 1) * 4 * Tosc * Predivisor_de_TRM2

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%).

Página 236 de 242


Niple v4.0 - Programación Visual de Microcontroladores

Además, el valor “Valor_Ancho_Pulso” debe estar organizado de la siguiente manera:


Los bits 0 y 1 se ubican en los bits 4 y 5 del registro CCP1CON, respectivamente.
Y los bits 2 a 9 se ubican en el registro CCPR1L según se indica en la siguiente imag en.

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.

Programando el PWM con Niple


Para poder utilizar el Modo PWM primero debe realizar los siguientes pasos:
- Configurar y activar el temporizador i nterno TMR2.
- Configurar el Pin correspondiente al módulo CCP como Salida.

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”.

Página 237 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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).

Página 238 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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”.

Por último puede ingresar un comentario.


Una vez seleccionados todos lo parámetros, presione el botón “Ingresar”.
La siguiente ilustración muestra el bloque insertado con l os pasos anteriormente realizados.

Página 239 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Página 240 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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.

Si alguna de estas banderas de interrupción no ha sido activada, no se producirá la interrupción al recibir


un dato y por ende, el micro no detectará cuando recibe un dato.
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.
Por último presione le botón “In gresar”.

Página 241 de 242


Niple v4.0 - Programación Visual de Microcontroladores

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 .

Haga clic en Ingresar.

Página 242 de 242