domingo, 29 de agosto de 2010

INSTRUCCIONES PARA EL 16F877A




BUENO JOVENES, AQUI LES TENGO YA LAS INSTRUCCIONES DE COMO PROGRAMAR EL 16F877A,




BUENO ALLI ESTAN LAS INSTRUCCIONES, FALTA VER CON DETENIMIENTO PARA QUE SIRVE CADA UNA DE ELLAS Y APERNDER A UTILIZARLAS, LUEGO ME DOY UNA VUELTA POR SUS BLOGS PARA VER SI ALGUIEN INVESTIGO MAS AL RESPECTO
Leer más...

miércoles, 25 de agosto de 2010

domingo, 22 de agosto de 2010

Numeros Negativos

Los números negativos hablando en cualquier base se representan de la forma habitual, usando el signo (-) antes del número que queramos remarcar como negativo, pero cuando hablamos de sistemas digitales existe una disyunción al respecto, puesto que si tomamos en cuenta, en una cantidad binaria necesitaremos asignar el signo a la posición de un bit y la magnitud a una serie de bits que pueden ir del bit más significativo al bit menos significativo, esto puede significar al realizar operaciones binarias que tengamos confusión al no saber si se trata de un sobre flujo, acarreo o simplemente el signo de alguna de las cantidades involucradas con dicha operación aritmética. De aquí parte el estudio de cómo catalogar los números positivos y negativos y como trabajar con los signos.

En primer lugar tendremos que fijar el número de bits con el que estaremos trabajando 8, 16, 32 ó alguna otra cantidad de bits, con la finalidad de establecer números negativos, fijaremos el bit de la extrema izquierda solo a representar el signo, por ejemplo, si trabajaremos con un byte sabemos que contiene 8 bits (bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0) con los cuales podemos representar 256 objetos diferentes, designaremos el bit7 para el signo del número, por tanto cada número dígase positivo o negativo se maneja como objeto aunque se trate de su equivalente negativo vgr. (43 y -43) tomando esta situación en cuenta simplemente se divide la cantidad posible de representar objetos por la mitad, una parte para los números positivos (0....127) y otra para los negativos (-1....-128) por ultimo debemos hacer notar que si el bit asignado para el signo es cero el número se toma como positivo pero si el bit asignado para el signo es uno el número será negativo.

Una de las operaciones aritméticas básicas es la resta de números binarios, para que esta sea más fácil se utiliza el complemento a la base ó complemento a dos (por tratarse de sistemas binario en base 2) convirtiendo la resta en una suma entre números negativos y positivos, lo que se hace es muy simple, nos enfocaremos en el sustraendo de la operación y sacamos el complemento a uno que no es mas que invertir los unos por ceros y los ceros por unos, a continuación de ese número sacamos el complemento a dos únicamente sumando la unidad al número que resulto del complemento a uno, lo que hemos obtenido hasta aquí es convertir el sustraendo de un número positivo a un número negativo y así solo tendremos que hacer la suma correspondiente.

Supongamos 7-4=3

(7) 0111 - (4) 0100

Tomamos el sustraendo (4) 0100 y sacamos su complemento a uno 1011, ahora obtenemos su complemento a dos 1100 este número representa el 4 negativo (-4) ahora solo hay que sumarlo y obtenemos 0111+1100=10011 lo cual equivale al número (3) por tanto la operación es correcta un punto importante que hay tomar en cuenta es el bit mas significativo del resultado, el cual estamos “ignorando”, también hay que notar que nuestro resultado consta de un bit más ya que estábamos trabajando con cuatro bits y el resultado es de cinco, para ello haremos mención de los siguientes puntos los cuales nos indican como interpretar dicho bit.

• Si los signos de los números que se suman son diferentes, cualquier acarreo obtenido es falso y deberá ser ignorado.

• Si los signos de los números que se suman son iguales, el acarreo es verdadero y actúa como el bit signo. En ausencia de acarreo se considera que este es cero, así la respuesta es positiva.



Leer más...

MICROPROCESADORES Z80 Y 16FF877



El Z80 fué el primero de la tercera generación, sin embargo es uno de los microprocesadores de 8 bits más empleado hasta nuestros días, se encuentran versiones mejores del mismo tales como Z80A, Z80B, Z80H, éstas se caracterizan por trabajar a frecuencias superiores de 4 Mcps, 6.5 Mcps y 8 Mcps respectivamente, las características fundamentales del Z80 son:

1. El transporte de señales se realiza sobre tres buses, el bus de direcciones, el bus de datos, así como el bus de control.
2. Régimen de interrupción uniforme, con la posibilidad de encadenar las prioridades de los circuitos periféricos.
3. Alto grado de programabilidad.
4. Reloj único.
5. Fuente de voltaje única de +5 Volts.

 
Un sistema con Z80 se completa con el empleo de memorias estandard de lectura y memorias estáticas o dinámicas de lectura y escritura, además pertenecen al sistema, puertos de entrada y salida paralelo, interfaces de comunicación serie, sistemas contadores temporizadores y circuitos de acceso directo a memoria.
El funcionamiento del sistema consiste en que las instrucciones del microprocesador, que están en la memoria ROM, se ejecutan en una forma secuencial de operación, la fuente de datos es, la propia CPU, los periféricos o las memorias, la transferencia interna de datos es a través del CPU, exceptuando la transferencia de datos en el proceso de acceso directo a memoria.
El Z80 es una versión apreciablemente mejorada tanto en circuiteria como en características de programación del antiguo modelo INTEL 8080, el Z80 resulta ser un microprocesador más rápido y sencillo en el desarrollo de sistemas ya que solo usa una fuente de alimentación de +5 Volts, contiene íntegramente todo el conjunto de instrucciones del 8080, lo cual le permite ejecutar todos los programas escritos para el CPU 8080, contiene el Z80 una expansión adicional de 80 instrucciones de ahí se deriva su nombre, su repertorio suma un total de 156 instrucciones.
 
El microprocesador Z80 contiene las siguientes unidades funcionales;
1).- Unidad aritmética y lógica
2).- El contador de programa
3).- El apuntador del stack
4).- Registros de propósito general
5).- Registros de indice
6).- Registros de interrupciones
7).- Registro de banderas
8).- Registro para refrescar memorias dinámicas
LA UNIDAD ARITMÉTICA Y LÓGICA (ALU)
Las operaciones del CPU Z80 se realizan con un grupo de dispositivos lógicos conocidos comúnmente como unidad aritmética y lógica (ALU) esta efectúa las siguientes operaciones;
1. Suma binaria.
2. Operaciones lógicas.
3. Complementar a dos.
4. Corrimiento de un bit a la derecha o a la izquierda.
5. Registro de resultados importantes como el acarreo, signo, acarreo auxiliar, paridad o si el resultado es zero.
6. Comparaciones
7. Poner, Limpiar o probar un bit
 
EL CONTADOR DE PROGRAMA (PC)
Es un registro de 16 bits, que continuamente tiene la dirección de la localidad de memoria siguiente que se va a accesar, de esa localidad obtiene el código de la instrucción a ejecutarse, en la CPU el PC se incrementa en uno, cada vez que el microprocesador lee el código de la instrucción contenida en la localidad direccionada, de esta forma el contador del programa direcciona secuencialmente las localidades de la memoria ROM, donde se encuentra almacenado el programa.
EL APUNTADOR DEL STACK (SP)
El microprocesador Z80 cuenta con el registro de pila (SP) o stack pointer que contiene una dirección de memoria RAM a partir de la cual y en forma descendente, se almacenan los contenidos de un par de registros, o a partir del cual en forma ascendente se obtienen los últimos dos datos de 8 bits almacenados en esa área, el SP es un registro de 16 bits, para almacenar en el stack el contenido de un par de registros se utiliza la instrucción PUSH y para cargar a un par de registros con los dos últimos bytes del stack se utiliza la instrucción POP.
REGISTROS DE PROPÓSITO GENERAL
El microprocesador Z80 contiene 14 registros de 8 bits separados en dos grupos;
GRUPO 1; A, B, C, D, E, H, y L
GRUPO 2; A', B', C', D', E', H' y L
Todas las instrucciones trabajan con los registros del grupo 1, con las instrucciones EX y EXX se logra el intercambio entre los contenidos de los registros del grupo 1 con los contenidos de los registros del grupo 2, el grupo 2 se utiliza en cierta forma como stack del grupo 1, dentro de la propia CPU.
Con los 14 registros de propósito general se efectuan por medio de las instrucciones las siguientes funciones;
1. Recibir datos desde la memoria.
2. Enviar datos hacia la memoria.
3. Incrementar o decrementar en uno su contenido.
4. Formar una dirección con el contenido de un par de registros.
5. Transferir datos entre los registros.
6. Obtener un operando durante las funciones de la ALU.
 
REGISTROS DE ÍNDICE IX e IY.
Estos son registros de 16 bits cada uno y conservan direcciones base que se usan para modo de direccionamiento indexado, en este modo un registro de índice se usa como base para apuntar a una región de la memoria. La dirección efectiva de la localidad de memoria a donde se va a depositar el dato o de donde se va a leer, se obtiene, al sumar el contenido del registro de índice y el valor de 8 bits contenido en el campo de "desplazamiento" de las instrucciones que emplean direccionamiento con índice, estos desplazamientos se especifican con números enteros signados con el complemento a dos.
REGISTRO DE INTERRUPCIONES
El Z80 opera en modo de interrupción en el que responde como una "llamada" indirecta en respuesta a una solicitud de interrupción. El registro I se usa para este propósito almacenando los 8 bits más significativos de la dirección indirecta mientras que el dispositivo que interrumpe proporciona los 8 bits menos significativos de la dirección índice, esta característica permite que las rutinas servicio de las interrupciones se localicen en cualquier parte de la memoria y que se puedan accesar en un tiempo muy corto.
BANDERAS DE ESTADO
El microprocesador Z80 tiene un registro de 8 Flips Flops, para monitorear ciertos resultados de las operaciones de la ALU, a la información que almacenan estos flips-flops se conoce como banderas de estado, las banderas se actualizan después de cada operación con alguno de los registros, no todas las operaciones modifican a todas las banderas, de los 8 bits del registro de banderas, únicamente seis registran información útil para el programador, cuatro de estas banderas se prueban, esto es, se usan como condiciones de salto (JP), llamada (CALL), o regreso (RET), estas banderas son;
 
1. La paridad o sobreflujo (P/V). El registro "P" se utiliza para realizar funciones auxiliares necesarias para el usuario, le sirven para interpretar los resultados, es uno cuando el resultado de la operación lógica del complemento a dos produce un acarreo, de otro forma es un cero lógico..
2. SIGN (S); Set if into the result of ALU operation the most significant bit = 1, otherwise reset.
3. ZERO (Z); Set if result of ALU operation is zero otherwise it is reset.
4. AUXILIARY CARRY; Set if carry out results b3 into b4 otherwise reset.
5. CARRY (C); Set if result of addition or subtraction operation result in a carry or borrow of the highest order bit, otherwise reset.




 
TERMINALES DEL MICROPROCESADOR Z80
El Z80 es un microprocesador de 8 bits y cuenta con 158 instrucciones y 10 modos de direccionamiento. El circuito integrado del microprocesador Z80 se deposita en un encapsulado Dual In Line de 40 terminales, de las cuales 5 son únicamente de entrada, 24 son de salida y 8 son bidireccionales, además, existen dos que sirven para conectar la fuente de alimentación y otra más que es la entrada del reloj.  





  Todas ellas tienen características eléctricas compatibles con la tecnología TTL, el intervalo de voltajes de entrada para un cero lógico es; 0.3 £ Vil £ 0.8 volts, el intervalo del voltaje de entrada para un uno lógico es; 2.0 £ Vih £ Vcc, el voltaje máximo de salida para un cero lógico es; Vol=0.4Volts, y el voltaje mínimo de salida para un uno lógico es; Voh=2.4Volts El Z80 opera con una fuente de alimentación de +5.0 Volts conectada a la terminal 11, (pin 11), la tierra de la fuente se conecta a la terminal GND, (pin 29), el consumo típico de corriente para el Z80 es de 90 mA.
Cuenta con 18 registros de 8 bits y 4 registros de 16 bits, todos los registros del Z80 se implementan con una RAM estática, los registros incluyen 2 bancos de 6 registros de propósito general, que se usan individualmente como registros de 8 bits, o en pares como registros de 16 bits, existen también 2 bancos de registros denominados "acumulador" y "banderas", además cuenta con 6 registros de propósito especial, 4 registros de 16 bits, PC, SP, IX e IY, y 2 registros de 8 bits, el registro del refresh "R" y el registro de interrupciones "I", la aritmética de 8 bits de las funciones, y las instrucciones lógicas de la CPU se ejecutan en la ALU, la ALU reliza las siguientes funciones son;
 
1. Sumar.
2. Restar.
3. Función lógica AND.
4. Función lógica OR.
5. Función lógica OR-EX.
6. Comparación.
7. DespIazamientos a la derecha y a la izquierda.
8. Incrementar bytes.
9. Decrementar bytes.
10. Poner bits en uno lógico.
11. Poner bits en zero lógico y
12. Comprobar el estado de los bits
 
LÍNEAS DE DIRECCIONES (A0 - A15), Pines 30-40, 1-5 respectivamente
Se forman con 16 líneas de direcciones, tienen la facultad de establecerse en tercer estado, estas señales proporcionan las direcciones correspondientes a intercambios de datos entre la memoria, la CPU y los puertos de los periféricos, la capacidad de direccionamiento con 16 bits es de 64 Kbytes y 256 puertos de entrada y salida, son activas en estado alto, los 8 bits menos significativos se usan para permitirle al usuario seleccionar los 256 puertos E/S, (A0-A7), en donde A0 es el bit menos significativo.
LÍNEAS DE DATOS (DO - D7), Pines 14, 15, 12, 8, 7, 9, 10 y 13
Se forman con 8 líneas de datos bidireccionales con capacidad del tercer estado, son activas en nivel alto, se utilizan para el intercambio de datos con la memoria, y periféricos de E/S.
CICLO DE MAQUINA UNO (M1),
Salida activa en nivel bajo, indica que en este ciclo de máquina uno el microprocesador va a obtener el código operacional de una instrucción, en las instrucciones que tienen un código operacional de 2 bytes esta señal se opera al obtener cada uno de los bytes del código operacional, al igual que para indicar el reconocimiento de un ciclo de interrupción cuando ocurre (IORQ)'.
REQUERIMIENTO DE MEMORIA (MREQ)', Pin 19
Salida activa en nivel bajo, esta señal indica una petición que interrelaciona a la memoria con la CPU, obtiene una dirección valida de las líneas de direccionamiento, esta terminal tiene capacidad del tercer estado.
REQUERIMIfNTO DE E/S (IORQ), Pin 20
Es salida triestado activa en nivel bajo, esta señal indica que la mitad baja del bus de direcciones mantiene una dirección válida de E/S, para efectuar una operación de lectura o escritura de E/S, se genera esta señal cuando el ciclo de maquina 1 (M1) reconoce una interrupción, indica que el vector de respuesta de la interrupción se coloca en el bus de datos, las operaciones de reconocimiento de interrupción ocurren durante el ciclo de maquina 1, mientras que las operaciones de E/S nunca se producen durante este ciclo.
LECTURA (RD), Pin 21
Salida triestado activa en nivel bajo, indica que la CPU desea leer datos desde la memoria de un dispositivo externo de E/S, el dispositivo E/S se direcciona a la memoria o al periférico, se usa esta terminal para dirigir los datos al bus de datos de la CPU.
ESCRITURA (WR)', pin 22
Salida triestado activa en nivel bajo, indica que el bus de datos de la CPU va a obtener datos válidos para ser almacenados en la memoria o en algún dispositivo de E/S.
REFRESCO DE LA MEMORIA DINÁMICA (RFSH)', Pin 28
Salida activa en nivel bajo, indica que los siete bits inferiores de las líneas de direccionamiento contienen una dirección válida de refresco de memoria, se utiliza para el mantenimiento de datos en memorias dinámicas, con esta se efectúa una lectura de refrescamiento para todas las memorias dinámicas.
PARO (HALT), Pin 18
Salida que activa en nivel bajo, indica que la CPU realiza una instrucción por software de paro (HALT), y que espera una interrupción (NMI)' o (INT)' antes de que continue la operación, mientras permanezca en este estado la CPU ejecuta operaciones NOP, para mantener activo el refresco de las memorias dinámicas, al aplicarse un reset se continua con la operación.
ESPERA (WAIT), Pin 24
Es una entrada activa en nivel bajo, le indica al microprocesador que la memoria direccionada o los dispositivos periféricos de E/S no son tan rápidos como para realizar una transferencia de datos a la velocidad de la CPU, o no están listos para una transferencia de información, la CPU continua con el estado de espera durante todo el tiempo que esta terminal es activa, esto les permite a los otros dispositivos sincronizarse con la CPU.
REQUISICIÓN DE INTERRUPCIÓN MASCARABLE (INT), Pin 16
Entrada activa en nivel bajo, esta terminal se acciona con dispositivos E/S externos, una requisición (INT)' se atiende al final de la instrucción que se ejecuta, si el enable interno del Flip Flop de interrupción IFF1 controlado por software se encuentra habilitado, y si la requisición de bus no esta activa, al aceptar la CPU una interrupción envía una señal de reconocimiento, la petición de E/S se realiza durante el ciclo de máquina 1, al principio del siguiente ciclo de instrucción, esta petición solo es valida bajo control del programa interno, reconociendo la CPU tres modos diferentes de interrupción.
INTERRUPCIÓN NO MASCARABLE (NMI)', Pin 17
Entrada que se activa con un flanco de bajada mediante un impulso que identifica una interrupción obligada, posiciona al contador de programa (PC) en la dirección 0066h desde donde continua el proceso, esta tiene una prioridad más alta que la interrupción (INT)' y siempre se reconoce al final de la instrucción que se ejecuta, independientemente del estado del IFF1, el contador de programa PC se almacena automáticamente en el stack pointer externo de forma que el usuario regrese al programa en el mismo punto del que fué interrumpido.
REHABILITACIÓN (RESET), Pin 26
Entrada que se activa con un flanco de bajada mediante un impulso, obliga a la CPU a reiniciar su actividad, coloca al contador de programa (PC) en la localidad de inicio de memoria 0000h, desde donde empieza el proceso, durante este tiempo el bus de direcciones y el bus de datos adquieren el estado de alta impedancia y todas las terminales de control de salida adquieren el estado inactivo.
REQUERIMIENTO DE LAS TERMINALES DE LA CPU (BUSRQ), Pin 25
Esta entrada es activa en nivel bajo, le indica a la CPU que coloque todas sus líneas en estado de alta impedancia, (tan pronto el ciclo de maquina 1 actual termine), a petición del periférico externo que desea tomar el control del sistema, regresa el control a la CPU cuando esta señal (BUSRQ)' pasa al nivel alto, se utiliza para pedir que el bus de direcciones, el bus de datos y las terminales de salida triestado del bus de control vayan a un estado de alta impedancia de tal forma que otros dispositivos controlen esos buses.
ENTREGA DE LAS TERMINALES DE LA CPU (BUSAK)', Pin 23
Salida activa en nivel bajo, es una indicación para el periférico que efectúa una petición (BUSRQ)' de que su petición ha sido concedida por parte del microprocesador, sirve para indicar al dispositivo que solicita este reconocimiento, que el bus de direcciones, el bus de datos y el bus de las terminales de control triestado han sido puestos en su estado de alta impedancia y que el dispositivo externo puede ahora controlar estas terminales.
RELOJ (CK), Pin 6
Entrada configurada por un tren de impulsos útiles, es la diferencia que permite la secuencia de tiempos de operación, se implanta físicamente con un oscilador de onda cuadrada cuya frecuencia depende del tipo de características de la CPU Z80, requiere oscilación de una fase con niveles TTL, una forma de satisfacer todos los requerimientos de voltaje es por medio de una resistencia de activación "pull up" de 330 ohms conectada entre +Vcc y la terminal de salida de un oscilador implantado con circuitos TTL que generen oscilaciones.
ALIMENTACIÓN POSITIVA DE +5 VOLTS (Vcc), Pin 11
Esta es una entrada de alimentación de tensión de +5 volts con un 5 % de tolerancia.
TIERRA (GND), Pin 29
Terminal de alimentación negativa, requiere un potencial de 0.0 volts que sirven de referencia para la interconexión de los dispositivos.


La Familia del PIC16F877
El microcontrolador PIC16F877 de Microchip pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes características generales que los distinguen de otras familias:
- Arquitectura Harvard
 - Tecnología RISC
- Tecnología CMOS
Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa y por lo tanto en la velocidad de ejecución. Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al número de bits de su bus de instrucciones:

Subfamilia instrucciones nomenclatura
Base - Line 33 instrucciones de12 bits PIC12XXX y PIC14XXX
Mid – Range 35 instrucciones de 14 bits PIC16XXX
High - End 58 instrucciones de 16 bits PIC17XXX y PIC18XXX
• Existen algunas excepciones, como el PIC16C5X que maneja 33 instrucciones
 Algunos autores manejan una “gama enana” consistente en los PIC12C508 y PIC12C509 en empaque de 8 patitas y con un bus de instrucciones de 12 o de 14 bits.

Variantes principales
Los microcontroladores que produce Microchip cubren una amplio rango de dispositivos cuyas características pueden variar como sigue:
- Empaquetado (desde 8 patitas hasta 68 patitas)
- Tecnología de la memoria incluída (EPROM, ROM, Flash)
- Voltajes de operación (desde 2.5 v. Hasta 6v)
- Frecuencia de operación (Hasta 20 Mhz)

Empaquetados
Aunque cada empaquetado tiene variantes, especialmente en lo relativo a lasdimensiones del espesor del  paquete, en general se pueden encontrar paquetes tipo PDIP (Plastic Dual In Line Package), PLCC (Plastic Leaded Chip Carrier),





Nomenclatura

Además de lo mostrado en la tabla anterior, en el nombre específico del microcontrolador pueden aparecer algunas siglas que dependen del rango de voltaje manejado y del tipo de memoria ROM incluida, como se muestra en la siguiente tabla:


Oscilador

Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador. El usuario puede seleccionar alguno de estos 8 modos programando 2 bits de configuración del dispositivo denominados: FOSC1 y FOSC0, ubicados en un registro especial de configuración en la localidad 2007H de la memoria de programa:

 
Los tres modos LP, XT y HS usan un cristal o resonador externo, la diferencia sin  embargo es la ganancia de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y la potencia consumida. En la siguiente tabla se muestran los rangos de frecuencia así como los capacitores recomendados para un oscilador en base a cristal.

Cristal externo: En los tres modos mostrados en la tabla anterior se puede usar un cristal o resonador cerámico externo. En la siguiente figura se muestra la conexión de un cristal a las patitas OSC1 y OS2 del PIC.
 

Circuito RC externo: En los modos RC y EXTRC el PIC puede generar su señal oscilatoria basado en un arreglo RC externo conectado a la patita OSC1 como se muestra en la siguiente figura:

Este modo sólo se recomienda cuando la aplicación no requiera una gran precisión en la medición de tiempos.

Rangos.- La frecuencia de oscilación depende no sólo de los valores de Rext y Cext, sino también del voltaje de la fuente Vdd. Los rangos admisibles para resistencia y capacitor son:

Rext: de 3 a 100 Kohms

Cext: mayor de 20 pf

Oscilador externo.- También es posible conectar una señal de reloj generada mediante un oscilador externo a la patita OSC1 del PIC. Para ello el PIC deberá estar en uno de los tres modos que admiten cristal (LP, XT o HS). La conexión se  muestra en la siguiente figura:

Oscilador interno de 4Mhz.- En los PIC’s que poseen este modo de oscilación, (modo INTRC) el PIC usa un arreglo RC interno que genera una frecuencia de 4Mhz con un rango de error calibrable de ± 1.5%. Para calibrar el error de oscilación se usan los bits CAL3, CAL2 , CAL1 Y CAL0 del registro OSCCAL. Calibración del oscilador interno.- El fabricante ha colocado un valor de calibración para estos bits en la última dirección de la memoria de programa. Este dato ha sido guardado en la forma de una instrucción RETLW XX. Si no se quiere perder este valor al borrar el PIC (en versiones EPROM con ventana) primero se deberá leer y copiar. Es una buena idea escribirlo en el empaquetado antes de borrar la memoria).

 Características generales del PIC16F877

La siguiente es una lista de las características que comparte el PIC16F877 con los dispositivos más cercanos de su familia:
 

 CPU:

- Tecnología RISC

- Sólo 35 instrucciones que aprender

- Todas las instrucciones se ejecutan en un ciclo de reloj, excepto los saltos que requieren dos

- Frecuencia de operación de 0 a 20 MHz (200 nseg de ciclo de instrucción)

- Opciones de selección del oscilador  Memoria:

- Hasta 8k x 14 bits de memoria Flash de programa

- Hasta 368 bytes de memoria de datos (RAM)

- Hasta 256 bytes de memoria de datos EEPROM


- Lectura/escritura de la CPU a la memoria flash de programa

- Protección programable de código

- Stack de hardware de 8 niveles

Reset e interrupciones:

- Hasta 14 fuentes de interrupción

- Reset de encendido (POR)

- Timer de encendido (PWRT)

- Timer de arranque del oscilador (OST)

- Sistema de vigilancia Watchdog timer.

Otros:

- Modo SLEEP de bajo consumo de energía

- Programación y depuración serie “In-Circuit” (ICSP) a través de dos patitas

- Rango de voltaje de operación de 2.0 a 5.5 volts

- Alta disipación de corriente de la fuente: 25mA

- Rangos de temperatura: Comercial, Industrial y Extendido

- Bajo consumo de potencia: o Menos de 0.6mA a 3V, 4 Mhz o 20 μA a 3V, 32 Khz o menos de 1μA corriente de standby (modo SLEEP).
Diagrama de Bloques del PIC16F877

En la siguiente figura se muestra a manera de bloques la organización interna del PIC16F877, Se muestra también junto a este diagrama su diagrama de patitas, para tener una visión conjunta del interior y exterior del Chip.
 Descripción de la CPU

La CPU es la responsable de la interpretación y ejecución de la información (instrucciones) guardada en la memoria de programa. Muchas de estas instrucciones operan sobre la memoria de datos. Para operar sobre la memoria de datos además, si se van a realizar operaciones lógicas o aritméticas, requieren usar la Unidad de Lógica y Aritmética (ALU). La ALU controla los bits de estado (Registro STATUS), los bits de este registro se alteran dependiendo del resultado de algunas instrucciones.

Ciclo de instrucción

El registro Program Counter (PC) es gobernado por el ciclo de instrucción como se muestra en la siguiente figura. Cada ciclo de instrucción la CPU lee (ciclo Fetch) la instrucción guardada en la memoria de programa apuntada por PC y al mismo tiempo ejecuta la instrucción anterior, esto debido a una cola de instrucciones que le permite ejecutar una instrucción mientras lee la próxima:
 

Como puede verse, cada ciclo de instrucción (Tcy = 4Tosc) se compone a su vez de cuatro ciclos del oscilador (Tosc= 1/Fosc)). Cada ciclo Q provee la sincronización para los siguientes eventos:

Q1: Decodificación de la instrucción

Q2: Lectura del dato (si lo hay)

Q3: Procesa el dato

Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4 ciclos de reloj, de manera que si la frecuencia de oscilación es Fosc, Tcy será 4/Fosc.Registros de la CPU. Registro PC.

Registro de 13 bits que siempre apunta a la siguiente instrucción aRegistro de Instrucción.

 Registro de 14 bits. Todas las instrucciones se colocan en él para ser decodificadas por la CPU antes de ejecutarlas.

Registro W.- Registro de 8 bits que guarda resultados temporales de las operaciones realizadas por la ALU

Registro STATUS.- Registro de 8 bits, cada uno de sus bits (denominados Banderas) es un indicador de estado de la CPU o del resultado de la última operación como se indica en la siguiente figura:

Z.- Este bit se pone (=1) para indicar que el resultado de la última operación fue cero, de lo contrario se limpia (=0)

C.- Bit de acarreo/préstamo’ de la última operación aritmética (en el caso de préstamo (resta), el bit se invierte antes de guardarse)

DC.- Acarreo/

prestamo proveniente del cuarto bit menos significativo. Funciona igual que el bit C, pero para operaciones de 4 bits.

Las restas se realizan sumando el complemento a dos del segundo operando, por ejemplo, para los datos 4FH y 25H: ejecutarse. En la siguiente sección se dan mayores detalles en el manejo de este registro.

Conjunto de Instrucciones de Rango Medio En la siguiente tabla se resumen las 35 instrucciones que reconoce la CPU de los PIC de medio rango, incluyendo su mnemónico, tiempo de ejecución, código de máquina y afectación de banderas:
Descripción de algunas instrucciones.

Para obtener la descripción detallada de cada instrucción de la tabla anterior se deberá consultar la sección 29 del manual del fabricante (PICmicro Mid-Range MCU Reference Manual). A continuación sólo se ejemplificarán algunas instrucciones con el propósito de clarificar la operación que realizan.
 
En el siguiente ejemplo se ejemplifica el efecto de algunas instrucciones sobre el registro W, sobre el registro de propósito general 20h de memoria RAM.
Formato General de las Instrucciones.
Cada instrucción en lenguaje de máquina (binario) del PIC contiene un código de operación (opcode) el cual puede ser de 3 a 4 o 6 bits, dependiendo del tipo de instrucción.

A continuación se describe el formato para cada tipo de instrucción de los PIC de rango medio:


El bit d especifica el destino del resultado de la operación:

d = 0: destino W

d = 1: destino f

f = dirección de 7 bits del archivo de registros.Operaciones con el archivo de registros orientadas a bytes
Operaciones con el archivo de registros orientadas a bits
b : Especificación en tres bits del bit sobre el que se va a operar

f = dirección de 7 bits del archivo de registros.

Operaciones con literales y de control

Formato general:

k : Literal = Valor de un operando de 8 bits

Formato para CALL y GOTO:

k : Literal = Valor de un operando de 8 bits





 Organización de la memoria del PIC

Los PIC tienen dos tipos de memoria: Memoria de Datos y Memoria de programa, cada bloque con su propio bus: Bus de datos y Bus de programa; por lo cual cada bloque puede ser accesado durante un mismo ciclo de oscilación.

La Memoria de datos a su vez se divide en

- Memoria RAM de propósito general

- Archivo de Registros (Special Function Registers (SFR))

.- La Memoria de Programa

Los PIC de rango medio poseen un registro Contador del Programa (PC) de 13 bits, capaz de direccionar un espacio de 8K x 14, como todas la instrucciones son de 14 bits, esto significa un bloque de 8k instrucciones. El bloque total de 8K x 14 de memoria de programa está subdividido en 4 páginas de 2K x 14. En la siguiente figura se muestra esta organización.
 

Observación1: No todos los PIC tienen implementado todo el espacio de 8K de memoria de programa (Consultar las hojas de datos del PIC específico).
Observación2: El fabricante puede grabar datos de calibración en localidades de memoria de programa por lo que se deberán anotar en papel antes de borrar los dispositivos con ventana transparente.

Vector de Reset.- Cuando ocurre un reset el contenido del PC es forzado a cero, ésta es la dirección donde la ejecución del programa continuará después del reset, por ello se le llama “dirección del vector de reset”.

Vector de interrupción.- Cuando la CPU acepta una solicitud de interrupción ejecuta un salto a la dirección 0004h, por lo cual a ésta se le conoce como “dirección del vector de interrupción”. El programador deberá colocar en esta dirección la Rutina de Atención a la Interrupción (Interrupt Service Routine (ISR))., o bien un salto al inicio de ella.

El registro PCLATH no es modificado en esta circunstancia, por lo cual habrá que tener cuidado al manipular el registro PC (saltos y llamadas a subrutina) dentro de la Rutina de Atención a la Interrupción Manejo del Contador del Programa (PC)

El registro contador del programa (PC) especifica la dirección de la instrucción que la CPU buscará (fetch) para ejecutarla. El PC consta de 13 bits, separados en dos partes: como se muestra en la figura siguiente
alto es llamado registro PCH. Este último contiene los bits PC<12:8> y no se puede leer o escribir directamente Todas las actualizaciones al registro PCH deben ser hechas a través del registro PCLATH.

En la siguiente figura se ilustran las cuatro situaciones y las maneras correspondientes en que el PC puede ser actualizado.
Paginación

Para saltar entre una página y otra, los bits más significativos del PC deberán ser modificados. Debido a que las instrucciones GOTO y CALL sólo pueden direccionar un bloque de 2K (pues usan una dirección de 11 bits) deben existir otros dos bits que acompleten los 13 bits del PC para moverse sobre los 8K de memoria de programa.

Estos dos bits extra se encuentran en un SFR denominado PCLATH (Program Counter Latch High) en sus bits PCLATH<4:3>. Por esto antes de un GOTO o un CALL el usuario deberá asegurarse que estos bits apunten a la página deseada.

Si las instrucciones se ejecutan secuencialmente el PC cruza libremente los límites de página sin necesidad de que el usuario escriba en el PCLATH

Memoria de Stack

La memoria de stack es una area de memoria completamente separada de la memoria de datos y la memoria de programa. El stack consta de 8 niveles de 13 bits cada uno. Esta memoria es usada por la CPU para almacenar las direcciones de retorno de subrutinas. El apuntador de stack no es ni leíble ni escribible.

Cuando se ejecuta una instrucción CALL o es reconocida una interrupción el PC es guardado en el stack y el apuntador de stack es incrementado en 1 para apuntar a la siguiente posición vacía. A la inversa, cuando se ejecuta una instrucción RETURN, RETLW o RETFIE el contenido de la posición actual del stack es colocado en el PC y el apuntador de stack es decrementado en 1.

�� Nota 1: PCLATH no se modifica en ninguna de estas operaciones

�� Nota 2: Cuando el apuntador de stack ya está en la posición 8 y se ejecuta otro CALL se reinicia a la posición 1 sobrescribiendo en dicha posición. No existe ningún indicador que avise de esta situación. Así que el usuario deberá llevar el control para que esto no ocurra.

 La Memoria de Datos

La memoria de datos consta de dos áreas mezcladas y destinadas a funciones distintas:

• Registros de Propósito Especial (SFR)

• Registro de Propósito General (GPR)

Los SFR son localidades asociadas específicamente a los diferentes periféricos y funciones de configuración del PIC y tienen un nombre específico asociado con su función. Mientras que los GPR son memoria RAM de uso general. Bancos de memoria

Toda la memoria de datos está organizada en 4 bancos numerados 0, 1, 2 y 3.

Para seleccionar un banco se debe hacer uso de los bits del registro STATUS<7:5> denominados IRP, RP1 y RP0. Hay dos maneras de acceder a la memoria de datos: Direccionamiento directo e indirecto. La selección de bancos se basa en la siguiente tabla
Cada banco consta de 128 bytes (de 00h a 7Fh). En las posiciones más bajas de cada banco se encuentran los SFR, y arriba de éstos se encuentran los GPR. Toda la memoria de datos está implementada en Ram estática.

Direccionamiento Directo

Para acceder una posición de memoria mediante direccionamiento directo, la CPU simplemente usa la dirección indicada en los 7 bits menos significativos del código de operación y la selección de banco de los bits RP1:RP0 como se ilustra en la siguiente figura.
Direccionamiento indirecto

Este modo de direccionamiento permite acceder una localidad de memoria de datos usando una dirección de memoria variable a diferencia del direccionamiento directo, en que la dirección es fija. Esto puede ser útil para el manejo de tablas de datos.

El registro INDF.- En la figura anterior se muestra la manera en que esto se realiza. Para hacer posible el direccionamiento indirecto se debe usar el registro

INDF. Cualquier instrucción que haga un acceso al registro INDF en realidad accesa a la dirección apuntada por el registro FSR (File Select Register).

La selección de banco en el caso de direccionamiento indirecto se realiza mediante los bits IRP (STATUS<7>) y el bit 7 del registro FSR, como se muestra en la figura.

El registro INDF mismo al leerse de manera indirecta (con FSR=0) producirá un cero. Y al escribirse de manera indirecta no es afectado.

A continuación se muestra un ejemplo del uso de este direccionamiento para limpiar las localidades RAM 20h a 2Fh.
En el siguiente ejemplo se muestra la manera como se switchea mediante instrucciones dentro del programa de un banco a otro
El Archivo de Registros

Aunque el archivo de registros en RAM puede variar de un PIC a otro, la familia del PIC16F87x coincide casi en su totalidad. En la siguiente figura se muestra a detalle el mapa de este archivo de registros y su organización en los cuatro bancos que ya se describieron.
 
Cada uno de los registros de propósito especial, está asociado a un dispositivo interno del μcc. En el siguiente capítulo se tratará con detalle el uso de cada uno de estos dispositivos y de los registros asociados a él.
Leer más...

viernes, 13 de agosto de 2010

TIPOS DE SENSORES Y CARACTERISTICAS

SENSORES, CARACTERÍSTICAS ESTÁTICAS Y DINÁMICAS

Los sensores o transductores se encargan de convertir una señal física (temperatura, luz,
sonido, etc) en una señal eléctrica de corriente o voltaje que puede ser manipulada
(medida, amplificada, transmitida, etc). Los tipos de sensores se clasifican segun el tipo de señal que reciben (opticos, sonoros de presion, de temperatura, de humedad, etc).



Características generales de los sensores

El transductor ideal sería aquel en que la relación entre la magnitud de entrada y la
magnitud de salida fuese proporcional y de respuesta instantánea e idéntica para todos los
elementos de un mismo tipo.

Sin embargo, la respuesta real de los transductores nunca es del todo lineal, tiene un
rango limitado de validez, suele estar afectada por perturbaciones del entorno exterior y
tiene un cierto retardo en la respuesta.

Las características de los transductores se pueden agrupar en dos grandes bloques:

Características estáticas, que describen la actuación del sensor en régimen permanente o
con cambios muy lentos de la variable a medir.

Características dinámicas, que describen el comportamiento del sensor en régimen
transitorio.

Características Estáticas

Rango de medida: el conjunto de valores que puede tomar la señal de entrada
comprendidos entre el máximo y el mínimo detectados por el sensor con una tolerancia
de error aceptable.

Resolución: indica la capacidad del sensor para discernir entre valores muy próximos de
la variable de entrada. Indica que variación de la señal de entrada produce una variación
detectable en la señal de salida.

Precisión: define la variación máxima entre la salida real obtenida y la salida teórica
dada como patrón para el sensor.

Repetitibilidad: Indica la máxima variación entre valores de salida obtenidos al medir
varias veces la misma entrada con el mismo sensor y en idénticas condiciones
ambientales.

Linealidad: un transductor es lineal si existe una constante de proporcionalidad única
que relaciona los incrementos de la señal de salida con los respectivos incrementos de la
señal de entrada en todo el rango de medida.

Sensibilidad: indica la mayor o menor variación de la señal de salida por unidad de la
magnitud de entrada. Cuanto mayor sea la variación de la señal de salida producida por
una variación en la señal de entrada, el sensor es más sensible.

Ruido: cualquier perturbación aleatoria del propio sistema de medida que afecta la señal
que se quiere medir.

Características Dinámicas

Velocidad de respuesta: mide la capacidad del sensor para que la señal de salida siga sin
retrazo las variaciones de la señal de entrada.

Respuesta en frecuencia: mide la capacidad del sensor para seguir las variaciones de la
señal de entrada a medida que aumenta la frecuencia, generalmente los sensores
convencionales presentan una respuesta del tipo pasabajos.

Estabilidad: indica la desviación en la salida del sensor con respecto al valor teórico
dado, al variar parámetros exteriores distintos al que se quiere medir (condiciones
ambientales, alimentación, etc.).

Leer más...

CONVERSORES DE SAÑALES

¿Qué es un Conversor analógico-digital?
Un conversor (o convertidor) analógico-digital (CAD), (o también ADC del inglés "Analog-to-Digital Converter") es un dispositivo electrónico capaz de convertir una entrada analógica de voltaje en un valor binario, Se utiliza en equipos electrónicos como ordenadores, grabadores de sonido y de vídeo, y equipos de telecomunicaciones. La señal analógica, que varía de forma continua en el tiempo, se conecta a la entrada del dispositivo y se somete a un muestreo a una velocidad fija, obteniéndose así una señal digital a la salida del mismo.


¿Cómo funciona un conversor analógico-digital?
Estos conversores poseen dos señales de entrada llamadas Vref+ y Vref- y determinan el rango en el cual se convertirá una señal de entrada.
El dispositivo establece una relación entre su entrada (señal analógica) y su salida (digital) dependiendo de su resolución. Esta resolución se puede saber, siempre y cuando conozcamos el valor máximo que la entrada de información utiliza y la cantidad máxima de la salida en dígitos binarios. A manera de ejemplo, el convertidor análogo digital ADC0804 tiene la capacidad de convertir una muestra analógica de entre 0 y 5 voltios y su resolución serán respectivamente:
Resolución = valor analógico / (2^8)
Resolución = 5 V / 256
Resolución = 0.0195v o 19.5mv.
Resolución = LSB
Lo anterior quiere decir que por cada 19.5 mili voltios que aumente el nivel de tensión entre las entradas nomencladas como "Vref+" y "Vref-" que ofician de entrada al conversor, éste aumentará en una unidad su salida (siempre sumando en forma binaria bit a bit). Por ejemplo:
Entrada - Salida
0 V - 00000000
0.02 V - 00000001
0.04 V - 00000010
1 V - 00110011
(5 V-LSB) – 11111111

¿Qué es en conversor digital-analógico?
En electrónica, dispositivo que convierte una entrada digital (generalmente binaria) a una señal analógica (generalmente voltaje o carga eléctrica). Los conversores digital-analógico son interfaces entre el mundo abstracto digital y la vida real analógica. La operación reversa es realizada por un conversor analógico-digital (ADC).
Este tipo de conversores se utiliza en reproductores de sonido de todo tipo, dado que actualmente las señales de audio son almacenadas en forma digital (por ejemplo, MP3 y CDs), y para ser escuchadas a través de los altavoces, los datos se deben convertir a una señal analógica. Los conversores digital-analógico también se pueden encontrar en reproductores de CD, reproductores de música digital, tarjetas de sonidos de PC, etc.
El mundo real es básicamente analógico. La medida directa de una magnitud física (sonido, temperatura, presión, etc.) es convertida por el correspondiente transductor (sensor) a un valor de tensión analógica capaz de ser procesada por un sistema electrónico.
Asimismo, el sistema electrónico proporcionará a los correspondientes efectores (altavoces, motores, calefactores, etc.) una tensión analógica que determine su actuación.
Los sistemas digitales emplean los valores numéricos codificados en binario, en palabras digitales compuestas por ceros y unos; ello proporciona a los sistemas digitales alta fiabilidad y precisión, conseguidas por la perfecta distinción física entre el 0 y el 1, y una gran potencia de cálculo, derivada de la utilización de un sistema de numeración y de la capacidad de integración de funciones booleanas de altísima complejidad.
En la frontera (interfaz) entre las señales analógicas procedentes del medio físico o destinadas a interferir con él y las señales digitales que procesa el sistema electrónico se requieren conversores que pasen los valores numéricos del campo analógico al digital y viceversa: conversores A/D y D/A.

¿Cómo funcionan los conversores digital-analógico?
Como todos sabemos, la forma de representar una curva o circunferencia en un ordenador, viene limitada por pixels. Por lo tanto un circulo, nunca será perfecto, pues estará compuesto de cuadraditos. Con lo cual, a mayor cantidad de puntos para representar dicha circunferencia, mas parecida a la realidad será, pues aun al estar formada por pixels, llegara un momento que nuestros ojos no los distingan y nos parecerá un circulo perfecto aun sin ser así. Esto se traslada perfectamente a la hora de digitalizar una onda de sonido analógica.
Ahora traslademos la comparación a un ejemplo
si vemos una circunferencia representada por muchos puntos. A simple vista parece perfecta, pero si hicieramos un zoom o bien nos acercamos a ella y disponemos de buena vista, veremos el pixelado y nos daremos cuenta de que no es tan perfecta.
Podriamos decir, que una gran cantidad de puntos simulando la forma de una circunferencia, llegarian a engañar a nuestros ojos y no notariamos sus imperfecciones.
Pues la musica, funciona igual, es decir, contra mayor sea el muestreo registrado, mayor calidad y parecido con la realidad tendremos.

Si tuvieramos que representar una forma circular solamente tomando 8 puntos de muestra u 8 pixels, conseguiriamos una figura como esta. Como podemos ver, esta lejos de conseguir engañarnos y nos damos cuenta que 8 puntos son insuficientes para una buena simulacion de lineas curvas, con lo que, al menos, nos quedariamos con la circunferencia superior la cual tiene una resolucion que si nos llega a engañar

¿Qué diferencias, ventajas e inconvenientes hay entre analógico y digital?
La calidad digital, nunca superara a la calidad analógica, tanto en imagen como en sonido. Una de las razones de esto, es que la calidad digital, siempre juega con los limites de los sentidos humanos (vista-imagen, oído-sonido) y muchas de las veces esta incluso por debajo de estos. Todo lo analógico tendrá muestras “ilimitadas”, mientras que lo digital siempre tendrá algún tipo de limitación (en el caso de la imagen lo único que le dará una mayor calidad será mayor resolución, pero el valor mínimo seguirá siendo el píxel), pues en el apartado del audio es exactamente igual, siempre habrá un punto mínimo que limite la calidad digital por mucho que esta pueda sobrepasar a nuestros sentidos.
Leer más...