• Aprende más sobre el 16F887

    Este blog te explicara de manera más detallada algunas datos importantes sobre dicho integrado. Además de poder descargar su datasheet, para más info presiona aca

  • Herramienta MPLab

    ¿No sabes como iniciar un nuevo proyecto en MPLab?. Aqui te explicamos paso a paso como hacerlo, además de las lineas de instrucciones para cada microcontrolador, junto a enlaces para descargar el programa.

  • Herramienta de simulación Proteus

    Te indicamos una introducción al programa, junto a link de descargas para su versión mas reciente. Aprende a como simular Microcontroladores en este programa.

  • Aprende a programar en assembler

    Domina el lenguaje de Maquinas con este interactivo video y un ejercicio de suma, resta y multiplicacion, para saber como presiona aca.

Proteus 8


Proteus es un software que tiene como función la simulación de circuitos electrónicos y diseño de PCB. Comprende varios módulos para la captura esquemática, el firmware IDE y el diseño de PCB que aparecen como pestañas dentro de una aplicación única e integrada. 

En este blog hablaremos un poco de como trabajar con los micro controladores usando este software, para eso se anexara al final de esta publicación un link de descarga a la versión mas actual del programa, para que vayan realizando a la par que leen esta publicación. Proteus se sincroniza muy bien con la herramienta MPLab, usando algunas extensiones de sus archivos para simular ciertos componentes. Empezaremos este tema didáctico, abriendo el programa.



Luego procederemos a darle en aquel recuadro en la parte superior de la pantalla que dice "File", acto seguido presionaremos "New Project". Se nos abrirá un recuadro que nos pedirá que le coloquemos un nombre a nuestro proyecto y un directorio, cuando hallamos terminado, presionaremos siguiente (Next).



Para nuestro caso, necesitamos crear un esquema de trabajo (Schematic), pero para no complicar las cosas explicando cuales usar, usaremos el de Default y presionaremos Next (Ya se marca por defecto). Se anexa también que en la siguiente pantalla preguntara si queremos usar PCB, en nuestro caso no es necesario producto a que no trabajaremos con Arduino para este caso, así que simplemente pulsamos siguiente.

Finalmente al finalizar la guía de nuevo proyecto proporcionada por proteus, terminaremos en una pantalla parecida a la siguiente.



¿Ven aquel recuadro Azul con una P en el centro? si le damos ahí se nos abrirá una pestaña basada en una base de datos del programa, donde están registrados cada uno de los componentes de los sistemas electrónicos (Desde diodos, hasta compuertas digitales y lo que nos interesa el PIC) pero para no perdernos en este buscador, debemos conocer con exactitud el modelo del componente con el que vamos a trabajar. Procederemos a poner en "Keyword" 16F887.



Si hacemos doble click sobre lo que sombrea en gris, dicho componente se nos anexara a el recuadro blanco de la izquierda en la imagen, que actualmente esta vació, llenándose esta vez con aquel código "PIC16F887" para su rápido acceso. Si queremos anexarlo al circuito, deberemos darle click al codigo ubicado en la barra de acceso rápido y posteriormente, darle click sobre el recuadro milimetrado a la derecha de la pantalla, para que se coloque sobre lo que seria una plataforma de simulación.



A partir de este momento es que cargaremos el archivo de programación que se creo en la herramienta MPLab para anexarla al PIC y que este trabaje en función de ese programa. Para eso debemos darle doble click encima del recuadro que simular el PIC. Lo cual se nos abrirá una ventana parecida a esta.




Este recuadro indica las especificaciones de nuestro integrado, donde podemos cambiarle la frecuencia del reloj, para alterar los ciclos de maquina o incluso escribirle un programa para que simule en base a este. Si le damos a la carpeta amarilla para cargar el programa, este nos pedirá que busquemos el directorio donde se encuentra, la extensión de este archivo debe ser ".hex" que es el dato que crea Mplab cuando no existe ningún error en el programa. Y finalmente le damos a "Ok" para guardar los cambios.





Una vez sabemos lo básico de como hacer trabajar un PIC en proteus, toca hacer las conexiones pertinentes y poner a correr la simulación para analizar su comportamiento y eventualmente grabar dicho programa (si funciona correctamente) en el microcontrolador de manera física usando un programa quemador como PikTik. Para concluir esta publicación, se colocaran el LINK de descarga del programa en cuestión:

Proteus 8.6 SP2











Share:

Modo de direccionamiento y ciclos de maquina

Ciclos de maquina

Un micro-controlador es un ordenador en miniatura, con su unidad de proceso, memoria, dispositivos y juego de instrucciones propias de cada micro (Detalladas en la datasheet, en el caso del PIC16F887 posee 35 instrucciones). Cada instrucción tiene una función definida y se ejecutan en una cierta cantidad de tiempo, algunas instrucciones mucho más rápida que otras; para saber este tiempo es que se usa el termino  de ciclo de maquina, que no es más que "El tiempo mínimo necesario para ejecutar una instrucción".


Si nos fijamos en la figura de arriba, nos podemos dar cuenta que el reloj se ha definido en cuatro estados (Q1, Q2, Q3 y Q4) y divididas a partir de este punto. Con esto nos podemos dar una idea que para esa figura,,  un ciclo de maquina esta compuesto por cuatro periodos de reloj. Es decir, que el tiempo mínimo para que un integrado ejecute una instrucción es igual a cuatro ciclos de reloj.

Un ciclo de maquina cambia para cada microcontrolador. Por ejemplo, para la serie de PIC16F, un ciclo de maquina comprende 4 periodos de reloj. Por lo tanto, si queremos calcular tiempos de ejecución entre cada instrucción tenemos que tener a la manos dos cosas: saber la velocidad del reloj y tener un cronograma a la mano que nos indique cuando ciclos de reloj comprende el ciclo de maquina del microcontrolador que vamos a analizar. A continuación se anexa un pedazo del datasheet del PIC16F887, donde hace énfasis en los ciclos que tarda en ejecutar cada una de sus 35 instrucciones.


Modo de direccionamiento

Los modos de direccionamiento de un microcontrolador, son las diferentes maneras de especificar un operando dentro de una instrucción mediante lenguaje ensamblador, en otras palabras, localiza la dirección de memoria de un operando mediante la información contenida en los registros del microcontrolador. Se definen de seis formas:

  • Direccionamiento Directo: En el modo directo, el campo de dirección contiene la dirección del operando. Se requiere una única referencia de memoria para leer el operando de la localización dada. Sin embargo, sólo proporciona un espacio de direcciones limitado.
  • Direccionamiento Indirecto: Este modo tiene un espacio de direcciones grande, a diferencia del direccionamiento inmediato y el directo, pero debido a que se requieren múltiples accesos de memoria para encontrar el operando es más lento.
  • Direccionamiento Inmediato: Este modo es rápido y se puede utilizar para definir constantes o establecer valores de variables iniciales.
  • Direccionamiento Indirecto de registro: Este modo tiene un espacio de direcciones grande, pero es limitado al ancho de los registros disponibles para almacenar la dirección efectiva.
  • Direccionamiento de Desplazamiento: Este modo puede considerarse una combinación del modo de direccionamiento indirecto y de registro.
  • Direccionamiento de Pila (Stack): Consiste en un conjunto lineal de ubicaciones referidos al último que entra y primero en salir. El operando está en la parte superior de la pila.
El microcontrolador PIC16F887 tiene la capacidad de realizar el direccionamiento indirecto mediante los registros INDF y FSR. En otras palabras, las direcciones de registro se especifican en FSR mientras que se almacenan en el registro INDF (Un registro que no existe físicamente, gracias a esto se facilita el proceso de escribir un programa en este microcontrolador. 



Share:

Conversiones — Byte y Bit

Antes de explicar como hacer conversiones entre las distintas bases númericas (Ya sea hexadecimal, decimal, entre otros) tenemos que tener en claro las definiciones de las unidades de almacenamiento más básicas, que son el Bit y el Byte.

¿Que es un bit? 

Es la unidad de almacenamiento más pequeña que puede tomar un ordenador. Sus valores se limitan a sólo dos, tomando el valor de 0 o de 1. Por lo tanto, es un tipo de dato binario, ya que de esta manera, es mucho más sencillo de interpretar por los dispositivos electrónicos.

¿Que es un byte? 

Un byte no es más que un conjunto de bits, que trabajan como una sola unidad de medida mucho más grande, capaces de almacenar datos de mayor complejida. Esta unidad es un multiplo de bits, siendo su equivalente en esta unidad de 8, es decir, 8 bits equivalen a 1 byte.

Actualmente se trabaja mucho con los terminos de Byte, adquiriendo valores de mayor frecuencia como serian Kilobyte, Megabyte, Gigabyte, entre otros. Estos son conceptos básicos que nos permitiran entender que tipo de almacenamiento trabaja un sistema informatico, y tener una mejor compresión de todo lo relacionado al sistema binario, como sus conversiones a otra base, materia que se explicara a continuación.

Conversión de sistemas de base númerica

De cualquier base a decimal: Para transformar números de cualquier base a su correspondiente decimal, solo se necesita multiplicar cada digito de izquierda a derecha por la base que se desea convertir, elevado a la potencia usando como referencia el numero de digitos que compone el numero (Ejemplo: si tiene 5 digitos, y es binario, el primero sera multiplicado por 2^4, el segundo por 2^3 y asi sucesivamente hasta 2^0), y el resultado en decimal, sera la suma de todas esas multiplicaciones. Pongamos dos ejemplos:

10(2) = 1*(2^1) + 0*(2^0)= 2 + 0 = 2(10)
A58(16) = 10*(16^2) + 5*(16^1) + 8*(16^0) = 2560 + 80 + 8= 2648(10)

De decimal a cualquier base: Para hacer esta conversión, solo basta con dividir el numero decimal entre la base que se desea convertir hasta el minimo valor, usando una división parte entera (Donde el ultimo digito de la división sera antes de pasar al valor decimal del resultado de la misma). Pongamos un ejemplo para un mayor entendimiento.

560(10) — ()(2)

Empezamos dividiendo:

560/2 = 280 con resto 0 (Este 0 es el bit más próximo al punto binario)
280/2= 140 con resto 0 (Este 0 es el bit a la izquierda del 0 obtenido arriba)
140/2= 70 con resto 0 (Este 0 es el bit a la izquierda del 0 obtenido arriba)
70/2= 35 con resto 0 (Este 0 es el bit a la izquierda del 0 obtenido arriba)
35/2= 17 con resto 1 (Este 1 es el bit a la izquierda del 0 obtenido arriba)
17/2= 8 con resto 1 (Este 1 es el bit a la izquierda del 1 obtenido arriba)
8/2= 4 con resto 0 (Este 0 es el bit a la izquierda del 0 obtenido arriba)
4/2= 2 con resto 0 (Este 0 es el bit a la izquierda del 0 obtenido arriba)
2/2= 1 con resto 0 (Este cero es el bit a la izquierda del 0 obtenido arriba)
Con 1 no se puede continuar dividiendo pero se coloca éste a la izquierda del cero obtenido arriba, quedando como bit de mayor peso.

Por lo tanto nuestro numero en binario seria: (1000110000)(2)

Si se va a convertir un numero fraccionario, a todo el número en cuestión se debe ir multiplicando por la base a la que se desea convertir y el numero se va conformando a partir del entero resultante de la multiplicación. Esta multiplicación SOLO se aplica en la parte fraccionaria, ejemplo:

0.625(10) — ()(2)

Empezamos multiplicando

0.625 x 2 = 1.250 (bit mas próximo al punto binario)
0.250 x 2 = 0.500 (bit a la derecha del uno obtenido anteriormente)
0.500 x 2 = 1.000 (bit a la derecha del cero obtenido anteriormente)

La operación concluye porque no queda parte fraccionaria para seguir multiplicando.

0.625(10) = 0.101(2)

De hexadecimal a binario: Para hacer esta conversión solo basta con colocar el equivalente de 4 bits en binario de cada digito en cuestión en el mismo orden que se presenta. Ejemplo:

A58(16)

A= 1010
5=  0101
8= 1000

Por lo tanto el resultado seria: 101001011000 (2)

De binario a hexadecimal: Se agrupan los digitos del numero de derecha a izquierda hasta 4 bits, separando los mismos y encontrando su equivalente en hexadecimal. Un ejemplo:

101001011000(2). Se agrupa de la siguiente manera: 10100 - 0101 - 1000
Y encontramos su equivalente en hexadecimal:

10100= A
0101= 5
1000= 8

Por lo tanto el resultado seria: A58(16)

Existe un caso que analizaremos con el siguiente ejemplo: 011(2). Para agrupar estos tres digitos se le agrega un 0 a la izquierda del primer numero (0011), para completar los 4 bits. Se encuentra su equivalente en hexadecimal y su resultado seria: 3

Share:

Operaciones ariméticas y lógicas — Unidad arimética lógica

Operaciones aritméticas

Estas operaciones están definidas por los símbolos matemáticos más básicos: suma (+), resta (-), multiplicación (* o un ciclo de suma), división (/ o un ciclo de resta) y potencia (^). En la programación son comúnmente usadas en cualquier lenguaje tanto para escribir datos en pantalla en base a una de estas operaciones, como declarar variables. Para ello podremos un ejemplo basado en pseudo código, como esquema base:

Las primeras seis lineas de código son la declaración de variables de un sistema programado en pseudo código usando operaciones aritméticas. Mientras que la séptima linea corresponde a mostrar en pantalla el resultado de la ecuación presentada, donde el sistema prioriza lo que esta dentro del paréntesis (5*8=40; 10/5=2) y por ultimo realizara la resta, mostrando en pantalla el resultado de esta resta que seria 48. Esta codificación se puede adaptar a lenguaje C/C+/Java/Phyton, pero en lenguaje ensamblador, algunas operaciones suelen cambiar; para un mejor entendimiento de como definir estas operaciones en dicho lenguaje, se anexara el siguiente vídeo:




Operaciones lógicas

Mientras que los operadores aritméticos se usan principalmente con números, los operadores lógicos están pensados para usarse con valores lógicos (verdadero y falso). Alguna de estas operaciones pueden variar desde la condición "If" "Else" y usando como referencia símbolos matemáticos ( mayor qué ">", menor qué "<", diferente a "!= o ><"), agregando también símbolos lógicos (y "AND", o "OR" y no). Como un ejemplo, haremos un pequeño programa basado en un lenguaje esquema, que seria pseudo código.



A partir de la linea 3 de código comienza la condición, en donde el módulo de la izquierda (b>3) es verdadero, a su vez que el módulo de la derecha (a!=0) también se cumple; por lo tanto el primer mensaje se va a producir. En caso de que dicha condición no se cumpla, mostrara el segundo mensaje ubicado en la linea siete del programa. Al igual que las operaciones aritméticas, estas tienen una configuración especial para el lenguaje ensamblador, que varía dependiendo del modelo del microcontrolador. Se anexara otro vídeo explicando esta parta un poco más a fondo para un mejor entendimiento, usando como ejemplo el microcontrolador PIC16F887 (El más usado por estudiantes).


Unidad lógica aritmética (ALU)
La unidad lógica aritmética es un contador digital capaz de realizar las operaciones aritméticas y lógicas entre los datos de un circuito; suma, resta, multiplica y divide, así como establece comparaciones lógicas a través de los condicionales lógicos “si”, “no”, y, “o”. Cualquier circuito posee al menos una de estas unidades, desde los más sencillos como una calculadora, hasta los más complicados como los microchip más actuales.

A diferencia de cualquier microcontrolador, las instrucciones de la ALU involucran operaciones sobre un operando, o entre dos de ellos, almacenando estos datos en el registro acumulador de trabajo que suele denominarse como registro W (una cierta cantidad de instrucciones están referidas al contenido del registro en su totalidad, y otras respecto a algunos bits del mismo, correspondiente a una palabra de datos que se desea modificar). El tipo de operaciones que puede realizar una ALU, pueden resumirse así:
  • Suma aritmética
  • Resta aritmética (complemento a 2)
  • Operaciones lógicas
  • Producto y suma lógica Comparación, Complementación, enmascaramiento
  • Desplazamiento o rotación
  •  No operar (transferencia)






Share:

MPLAB- X IDE y Palabras de configuración PIC

MPLAB X IDE es un programa de software que se ejecuta en una PC (Windows, Mac OS, Linux) para desarrollar aplicaciones para microcontroladores de microchip y controladores de señales digitales. Se llama entorno de desarrollo integrado (Integrated Development Environment) (IDE) porque proporciona un "entorno" integrado único para desarrollar código para microcontroladores integrados.

El entorno de desarrollo integrado MPLAB X trae una gran cantidad de características para mejorar la experiencia de depuración durante la fase de diseño de su proyecto. Basado en el código abierto NetBeans IDE de Oracle, Microchip puede agregar muchas de las funciones más solicitadas de manera rápida y sencilla, al mismo tiempo que proporciona una arquitectura mucho más ampliable para ofrecerle incluso más funciones nuevas rápidamente, incluida la compatibilidad adicional para dispositivos AVR.

En los microcontroladores, cuando se estan programando existen ciertas intrucciones de configuración para garantizar el perfecto funcionamiento de sus entradas/salidas digitales, a esto se le conoce como Palabras de configuración (También llamado Bits de configuración). Internamente MPLAB tiene esos archivos para cada serie de PIC integrado en los archivos de descarga de su sistema, es cuestión de buscarlo en donde se instalo dicho programa. Esta palabras de configuración, suelen estar escritos en lenguaje de programación C y varian dependiendo del modelo del microcontrolador. Se anexaran de esta manera la codificación de los microcontroladores más usados como un ejemplo de estas mismas, explicando cada linea de codigo para su perfecto entendimiento.

Bit de configuracion de PIC 16F88

Oscilador interno 4MHz
CONFIG1: 0x3F50
CONFIG2: 0x3FFC
--------------------------------------------------------------------------------------
Oscillator: INTRC-OSC2 as RA6
Watchdog Timer: Off
Power Up Timer: Enabled
RA5/MCLR Pin Function Select: RA5
Brown Out Detect: Enabled
Low Voltage Program: Disabled
Data EE Read Protect: Disabled
Flash Program Write: Write Protect Off
Background Debug: Disabled
CCP1 Mux: RB0
Code Protect: Off
Fail-Safe Clock Monitor: Disabled
Internal External Switch Over: Disabled


Bit de configuracion de PIC 16F887A (Sin oscilador)

Oscilador externo 4MHz
CONFIG1: 0x2F42
--------------------------------------------------------------------------------------
Oscillator: HS
Watchdog Timer: Off
Power Up Timer: On
Brown Out Detect: On
Low Voltage Program: Disabled
Data EE Read Protect: Off
Flash Program Write: Write Protect Off
Background Debug: Disabled
Code Protect: Off

Bit de configuracion de PIC 16F887

Oscilador interno 4MHz (por defecto)
CONFIG1: 0x23C4
CONFIG2: 0x0700
--------------------------------------------------------------------------------------
Oscillator: INTOSCIO: I/O on RA6/OSC2 and RA7/OSC1
Watchdog Timer: Disabled
Power Up Timer: Enabled
Master Clear Enable: RE3/MCLR is digital input, MCLR internally tied to VDD
Code Protect: Off
Data EE Read Protect: Disabled
Brown Out Reset Selection: Bor enabled
Internal External Switch Over: Disabled
Monitor Clock Fail-Safe: Disabled
Low Voltage Program: RB3 is digital I/O, HV on MCLR must be used for programming
Background Debug: In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins.
Brown Out Reset Selection Bit: Brown Out Reset set to 4.0V
Flash Program Self Write: Write Protect Off

Bit de configuracion de PIC 18F4550

(incluye oscilador interno, configurado para el oscilador externo)
Oscilador externo 8MHz
CONFIG1L: 0x0000
CONFIG1H: 0x000E
CONFIG2L: 0x001F
CONFIG2H: 0x001E
CONFIG3H: 0x0001
CONFIG4L: 0x0081
CONFIG5L: 0x000F
CONFIG5H: 0x00C0
CONFIG6L: 0x000F
CONFIG6H: 0x00E0
CONFIG7L: 0x000F
CONFIG7H: 0x0040
--------------------------------------------------------------------------------------
96MHz PLL Prescaler: Divide by 2 (8MHz input)
CPU System Clock Postscaler:  [OSC1/OSC2 Src:/1][96MHz PLL Src:/2]
Full Speed USB Clock Source Selection: Clock src from 96MHz PLL/2
Oscillator: HS:HS+PLL, USB-HS
Fail-Safe Clock Monitor Enable: Disabled
Internal External Switch Over: Disabled
Power Up Timer: Enabled
Brown Out Detect: Enabled in hardware, SBOREN disabled
Brown Out Voltage: 4.2V
USB Voltage Regulator: Enabled
Watchdog Timer: Disabled-Controlled by SWDTEN bit
Watchdog Postscaler: 1:32768
CCP2 Mux: RC1
PortB A/D Enable: PORTB <4:0> configured as digital I/O on reset
Low Power Timer1 Osc Enable: Disabled
Master Clear Enable: MCLR disabled, RE3 enabled
Stack Overflow Reset: Enabled

(El resto de opciones se deja Disabled)
Crear un nuevo proyecto en MPLab para trabajar con los Bits de configuración

Para trabajar con lo antes mencionado se debe crear un proyecto donde se va a especificar con que PIC se piensa trabajar y el lenguaje en cuestión. Para poder hacerlo se deben seguir los siguientes pasos (Esto aplica para cualquier version del programa):

  • Presionar "Project" ubicado en la barra superior. Posteriormente oprimir "Project Wizard"

  • Se abrira una ventana de introducción a la creación del nuevo proyecto, pulsaremos "Siguiente" y en la siguiente ventana seleccionaremos el integrado con el que deseamos trabajar (PIC16F887 como ejemplo)

  • Se debe seleccionar ahora el espacio de trabajo (Es decir, en que lenguaje desamos trabajarlo) existen varias herramientas, las más usadas son: MPASM Tollsuite (Programación Assembler) y CCS Compiler (Programación en C)

  • Acto seguido, se le coloca el nombre al nuevo proyecto junto con el directorio donde se guardara.

  • En este espacio se pueden cargar archivos que ya realizamos anteriormente, con el motivo de hacer solamente configuraciones minimas en los bits para adaptarlo al microcontrolador que se esta preparando para usar. Si no hay nada que agregar se pulsa "Siguiente"

  • Se le da a Finalizar y se termina de crear el nuevo proyecto

  • Una vez creado el proyecto, se debe crear el espacio de trabajo para empezar a programar nuestro integrado. Para eso se presiona la pestaña "File" y luego "Add File to Project.." 


  • Se coloca el nombre del nuevo archivo y luego se le da a guardar. 


  • Una vez terminado este proceso ya se puede proceder a programar


Para finalizar, anexaremos el LINK para la descarga de la versión mas reciente del MPLAB (Para los interesados en descargarlo) junto con una versión más vieja para aquellas PC poco potentes.


Share:

Tipos de Memoria

Antes de abarcar un poco lo que serián la diferentes variedades de almacenamiento que existen, hay que recordar la definición de este tipo de componentes en un sistema. La memoria es un dispositivo basado en circuitos que permiten el almacenamiento de multiples archivos de información, con el motivo de llevar un control de estos datos ya sean como metodo de seguridad (En caso que llegue a ocurrir una perdida) o compartir dicha información con otros sistemas, este ultimo solo aplicaria a las memorias flash como el USB. Existen seis tipos de memoria en la informatica, que son los siguientes:
  • Memoria RAM (Random access memory) (Memoria de acceso Aleatorio): Es usada como almacenamiento temporal de datos o de instrucciones; conocida también como memoria de escritura y lectura, debido a que en el momento que ejecutamos un programa o escribimos algun texto en cualquier tipo de sistema que posea este tipo de memoria (Ya sea una computadora, o un telefono móvil), los datos de entrada de esta información son guardados por la RAM. En el caso de un programa, facilita su rápida ejecución una vez se inicia en el sistema, esto debido a que los datos de registro fueron almacenados de forma temporal y lista para usarse.
  • Memoria ROM (Read only memory) (Memoria sólo de lectura): Es usado para almacenar los datos generales de cualquier aplicación del sistema y / o datos permanentes. Este tipo de memoria esta constituida de un chip que tiene integrado un software no programable por el usuario, si no por el fabricando. Esto hace que este tipo de memorias sea conocidas como Firmware, es decir, que poseen un software internamente pero puede ser considerado como un hardware.
  • Memoria PROM (Programable read only memory) (ROM programable):  Se comporta igual que una memoria ROM, la diferencia es que el software de este tipo de memoria puede ser programable una unica vez por el usuario, siempre y cuando dicho software no requiera futuras actualizaciones y sean de series pequeñas, sin procesos tan extensos. Se suele usar cuando se trabaja con microcontroladores.
  • Memoria EPROM (Erasable programable read only memory) (ROM borrable y programable): A diferencia de la memoria PROM y la ROM, estas son reprogramables, suelen usarse (aunque esten descontinuadas) en sistema donde requieran actualizaciones del software y comunmente en procesos de desarrollo.
  • Memoria EEPROM (Electrical erasable programable read only memory (ROM borrable y programable electricamente): Son el sustituto natural de las EPROM, la diferencia es que estas se pueden programar electricamente, se usan comunmente en los procesos desarrollo para la configuracion de microcontroladores de diferentes tipos de gama, como cualquier ser de PIC (Ya sea 16F, 18F u otros)
  • Memoria Flash: Se comportan similarmente a las EEPROM, pero estas tienen un bajo costo y pueden ser usadas en la vida cotidiana para almacenar y sobreescribir archivos. Un ejemplo de este tipo de memoria serian los Pendrive e incluso los descontinuados Diskette. Memorias compactar que pueden ser usadas para trasladar la información de un sistema a otro y estas se programan electricamente.








Share:

Bus informatico, Pilas y Retardo

Bus informático y sus características.

En la informática existe un termino que se basa en un conjunto de conexiones físicas que se comparten entre múltiples componentes del hardware en un sistema con el fin de transmitir datos desde un punto hacia otro; esto se conoce como bus. Su función es reducir el número de rutas necesarias para transmitir información entre los componentes, ya que se usa un sólo canal de comunicación; por eso es que en algunas ocasiones se refiere a este canal como "Autopista de datos"

Un bus se caracteriza por la gran cantidad de información que puede enviar a la vez. Este volumen se suele expresar en bits y va definido por cada linea de física mediante las cuales la información se envía de manera simultanea; ejemplo, un cable de 32 lineas puede enviar hasta una cantidad máxima de 32 bits de información. 

Los bus suelen estar constituidos entre 50 a 100 lineas de información, las cuales se dividen en tres subconjuntos diferentes: bus de direcciones, que se basa en transportar las direcciones de memoria a la que el procesador requiere acceder, para poder leer o escribir datos; bus de datos, el encargado de transferir información tanto la del procesador como las que van siendo ingresadas en el; y bus de control, capaz de transportar y sincronizarse con los componentes del hardware mediante ordenes de control a través del procesador. 

Pilas informáticas (Stack) 

Se denomina pila informática a una lista que tiene una estructura capaz de almacenar una cierta cantidad de datos, la única formas de acceder a este registro es mediante un sistema que consiste en que el primer dato que entra es el ultimo en salir.  Esto quiere decir, que en una pila la primera información que encontraremos es el ultimo registro que se incorporo la pila (A esta variable o archivo se le denomina tope), por lo que si necesitamos algún otro dato que no este en este espacio de la estructura, se deberá ir extrayendo archivo por archivo hasta encontrar el necesario. Posee dos elementos básicos: Insertar elemento (Push) y extraer (Pop).


Stack Pointer (Puntero de la pila): Como su propio nombre indica es un registro apuntador a la posición de memoria donde se encuentra la pila. Su posición varia dependiendo del modelo del micro controlador, pero todos tienen la misma función: colocarse en cualquier espacio de la pila para facilitar los datos almacenados en dicho lugar. Inicialmente se coloca en los bancos de registros del integrado, y para mover dicho apuntador se debe hacer fuera (De manera recomendada) fuera de la zona de registro, mediante un comando en lenguaje ensamblador que suele ser el siguiente:

Usando como ejemplo la seria de micro controladores 8051

MOV SP, #30H; // Situar el puntero del stack en la posición 30H del integrado.

Nota: Para saber en que banco de posiciones desplazar el stack pointer, se debe consultar la datasheet del micro controlador a utilizar, donde suele decir las dimensiones de la pila.


 Retraso, Retardo o Delay

El retardo normalmente se ve representado como el diferencial de tiempo que se establece entre la señal de salida y de entrada de un dispositivo, en otras palabras es el tiempo que tarda una señal en producirse; en la electrónica se puede ver comúnmente en la carga de los condensadores cuando se requiere variar este valor para retrasar su carga; mientras que en la informática es el tiempo requerido que tarda en enviarse un paquete de datos. Existen diferentes tipos de retardo y alguno de estos son los siguientes:

  • Retrasos de Procesamiento: El tiempo requerido para analizar la cabeza de un paquete y decidir donde mandar el paquete
  • Retrasos de Fila de Espera: El tiempo que espera un paquete en transmitir, se suelen ver mucho en las re conexiones masivas de un sistema de información.
  • Retraso de Transmisión: El tiempo requerido para empujar todo los bits en un paquete al medio de transmisión en uso. Normalmente es lo que tarda una señal de comunicación en enviarse, se ve mucho en los cables de ethernet o en la red wi-fi. Este tiempo se mide en mili segundos (mS) y a mayor tiempo, el envió de datos se hace muchísimo más lento; lo que coloquialmente se conocer como "LAG".

Share:

Microcontrolador PIC16F887

Para entender un poco como funciona este integrado, debemos explicar en lo que se basa un microcontrolador con tecnología PIC (Peripheral Interface Controller). Basicamente, son dispositivos que realizan diferentes actividades al ser programados mediante un procesamiento de datos digitales (En otras palabras, programación en lenguaje de maquinas; Assembler). Dependiendo de las anchura del BUS de cada microcontrolador, estos pueden expresarse entre 8 y 16 bits (Esto tambien depende de su Gama)

El modelo 16f887 posee diferentes caracteristicas (o especificaciones) que permiten que su uso sea mucho mas versatil y facil de aprender para aquellas personas que esten ingresando en el area de la electronica digital. Las funciones principales de este integrado vienen definidas por ciertos parametros, explicados a continuacion.
  • Soporta modo de comunicación serial, posee dos pines para ello.
  • Amplia memoria para datos y programa.
  • La memoria del PIC se puede reconfigurar de manera electronica mediante su memoria denomidada FLASH. Lo que hace que este tipo de dispositivos sea reprogramable.
Como todos los instrumentos tanto electronicos, electricos, entre diversas areas, suelen tener especificaciones para su uso; esto facilita al diseño de muchos circuitos, dependiendo de lo que se requiera realizar. Alguna de esas especificaciones, o caracteristicas básicas son las siguientes:

- Arquitectura RISC.
  • El microcontrolador cuenta con solo 35 instrucciones diferentes 
  • Todas las instrucciones son uni-ciclo excepto por las de ramificación
- Frecuencia de operación 0-20 MHz
- Oscilador interno de alta precision
  • Calibrado de fábrica 
  • Rango de frecuencia de 8MHz a 31KHz seleccionado por software
- Voltaje de la fuente de alimentación de 2.0V a 5.5V
  • Consumo: 220uA (2.0V, 4MHz), 11uA (2.0 V, 32 KHz) 50nA (en modo de espera)
- Ahorro de energía en el Modo de suspensión 
- Brown-out Reset (BOR) con opción para controlar por software 
- 35 pines de entrada/salida
  • alta corriente de fuente y de drenador para manejo de LED
  • resistencias pull-up programables individualmente por software 
  • interrupción al cambiar el estado del pin 
- Memoria ROM de 8K con tecnología FLASH 
  • El chip se puede re-programar hasta 100.000 veces 
- Opción de programación serial en el circuito 
  • El chip se puede programar incluso incorporado en el dispositivo destino. 
- 256 bytes de memoria EEPROM 
  • Los datos se pueden grabar más de 1.000.000 veces 
- 368 bytes de memoria RAM 
- Convertidor A/D: 
  • 14 canales 
  • resolución de 10 bits 
- 3 temporizadores/contadores independientes 
- Temporizador perro guardián 
- Módulo comparador analógico con 
  • Dos comparadores analógicos 
  • Referencia de voltaje fija (0.6V) 
  • Referencia de voltaje programable en el chip 
- Módulo PWM incorporado 
- Módulo USART mejorado 
  • Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0 
  • Auto detección de baudios 
- Puerto Serie Síncrono Maestro (MSSP) 
  • Soporta los modos SPI e I2C

Descripción de PINES.


La mayoria de los pines del microcontrolador PIC16F887 son multipropositos como se muestra en la figura anterior. Donde por ejemplo en el PIN2 se puede conectar tanto una entrada/salida digital (RA0) como una entrada analogica (AN0). Para un mejor entendimiento, se procede a incluir el siguiente video, que se basa en el proceso de identificación de pines.



Cabe destacar que existen otras especificaciones esenciales para entender de mejor manera el microcontrolador y como funciona sus rangos tanto de voltaje como de corriente. Para eso se estudia el datasheet que vendra anexado a continuación.

Share:

Publicaciones Populares

Publicaciones Recientes