domingo, 17 de febrero de 2013

Motor Paso a Paso


Introducción:

Los motores paso a paso o PAP son muy utilizados en los dispositivos controlados por sistemas digitales.

El eje de un motor paso a paso gira en intervalos regulares en lugar de hacerlo continuamente  como ocurre con los motores de contínua. Pueden ser utilizados para múltiples aplicaciones ya que disponen de un posicionamiento muy preciso.

Los motores PAP giran en función de una secuencia de pulsos aplicados a sus bobinados. El eje del motor gira en un determinado angulo por cada impulso de entrada. Cada incremento de ángulo preciso, se denomina paso, de ahí su nombre.

Los incrementos de rotación o pasos se miden en grados y es un parámetro fundamental de los motores PAP.
Los motores Paso a Paso, son comercializados en una gran variedad de grados de rotación por paso, desde 0.72º a 22.5º.
360º/0.72º = 500 pasos por revolución
360º/22.5º= 16 pasos por revolución

Funcionamiento


Estos motores están constituidos por un rotor sobre el que van aplicados distintos imanes permanentes y por un cierto número de bobinas excitadoras en su estator.
Es decir, estas bobinas son parte del estator y el rotor esta compuesto por un imán permanente. Los diferentes bobinados son alimentados o excitados uno a continuación de otro y estos produce un determinado desplazamiento angular que se conoce como "paso angular".









La  excitación de las bobinas deber ser externamente manejada por un controlador, por ejemplo podemos utilizar un puente H como el L293 o L298. En la imagen que tenemos a continuación podemos ver un ejemplo de motor PAP.








Tipos de motores PAP:
Existen tres clases de motores paso a paso de acuerdo a su construcción: Los de imán permanente, los de reluctancia variable  y los híbridos.


Motores paso a paso de imán permanente:
Dentro de los motores de imán permanente encontramos dos tipos, los bipolares y los unipolares.


Motor PAP Bipolar: de este motor salen cuatro hilos conectados al circuito de control, que realizan la función de cuatro interruptores electrónicos dobles que permiten variar la polaridad de la alimentación de las bobinas. Con la activacion y desactivación adecuada de dichos interruptores dobles, se puede obtener las secuencias correctas para que el motor gire en un sentido u otro.





Motor PAP Unipolar: En los motores PAP Unipolares, todas las bobinas del estator están conectadas formando cuatro grupos. Del motor paso a paso salen dos grupos de tres cables, uno de los cuales es común a dos bobinados. Los seis terminales que parten del motor se conectan al circuito de control, el cual se comporta como cuatro conmutadores electrónicos que al ser activados o desactivados producen la alimentación de los grupos de bobinas.


sábado, 16 de febrero de 2013

Servomotor

¿ Qué es un servomotor?

Un servomotor esta constituido por un pequeño motor de corriente contínua y unas ruedas dentadas que hacen de reductora, lo que le da una potencia considerable. Además de esto cuenta con una pequeña tarjeta electrónica que es necesaria para su control.
El servomotor tiene un ángulo de giro de 0º a 180º, a no ser que se modifique su estructura interna para que este pueda girar 360º.



Funcionamiento del servomotor:

La tensión de alimentación de los servos esta comprendida entre los 4 y los 8 voltios. El control del servo simplemente consiste en indicarle la posición en la que se debe situar, mediante una señal cuadrada TTL modulada con PWM.
La duración de nivel alto de la señal indica la posición donde pondremos el eje del motor.
En la siguiente imagen podemos ver la posición del servo(ángulo) en función de la duración del pulso, estos margenes son genéricos, ya que cada servo tiene sus rangos de operación. 
El rango de operación corresponde con el ancho de pulso mínimo(0º) y el máximo(180º) , que el servo entiende. Por lo general estos rangos van desde 0,3ms hasta 2,1ms.


En el ejemplo de la imagen se aprecia que la posición inicial(0º) se encuentra en 0,3 ms, la posición central(90º) en 1,5ms y la posición máxima(180º) en 2,1 ms. Si se sobrepasan los límites de movimiento del servo, este comenzará a vibrar o emitir un zumbido, pidiendo el cambio en la anchura del pulso.

El periodo que se suele utilizar suele estar entre 10ms y 30ms, aunque lo habitual es 20 ms, trabajando a una frecuencia de 50Hz. Si el periodo es menor al mínimo, esto puede interferir en la temporización interna del servo, causando zumbido y vibración. En caso contrario si fuera mayor que el máximo pasará a estado dormido entre pulsos provocando que se mueva en pequeños intervalos.

Ademas de todo esto, el servo para que mantenga la misma posición , es necesario enviarle contínuamente pulsos de anchura constante. De esta forma, el servo mantendrá su posición a pesar de que exista alguna fuerza externa que intente mover su posición.

Terminales del servo

El servo motor cuenta con tres terminales de conexión.
  • Vcc: corresponde al cable de alimentación, de color rojo.
  • Gnd: es el cable de masa, puede ser negro o marrón.
  • Señal: es por donde se aplica la entrada de pulsos(Pwm). Puede ser de color amarillo,blanco o naranja.



Motor de CC

Definición:

El motor eléctrico convierte la energía eléctrica en energía mecánica. Un motor de corriente continua(DC) utiliza la corriente eléctrica que fluye ininterrumpidamente en un solo sentido. 

De esta forma, la  corriente eléctrica suministrada recorre las bobinas o devanados del motor, en cuyo interior se crean campos magnéticos, los cuales  generan fuerzas que impulsan el movimiento de rotación de la parte móvil del motor (rotor).
A diferencia de los motores paso a paso y los servomecanismos, los motores DC no pueden ser posicionados o enclavados en una posición específica. Estos simplemente giran a la máxima velocidad y en el sentido que la alimentación aplicada se los permite.

El motor Dc esta compuesto por dos partes principales, rotor y estator.

Rotor: 
El rotor corresponde a la parte móvil del motor, y es el que proporciona el torque para mover la carga. A su vez esta formado por:

  • El eje: Es una barra de acero, la cual proporciona el movimiento producido.
  • El núcleo: Esta localizado alrededor del eje y esta fabricado en acero, proporciona un campo magnético entre los polos para que el flujo magnético del devanado circule.
  • Devanado: Es el conjunto de bobinados por el cual esta compuesto el motor, están conectados eléctricamente con el colector. 
  • Colector: La función del colector es recoger la tensión producida por el devanado inducido, transmitiéndola al circuito por medio de las escobillas.


Estator: Es la parte fija o componente estático del motor, también llamado inductor. Soporta lo que podríamos llamar la culata, que es un aro acero, donde están situados los núcleos de los polos principales, aquí es donde se sitúa el bobinado encargado de producir el campo magnético de excitación.
Este está formado por:


  • El armazón: sirve como soporte y proporcionar una trayectoria de retorno al flujo magnético del rotor y del imán permanente.
  • Imán permanente: proporciona un campo magnético uniforme al devanado del rotor o armadura, de modo que interactua con el campo formado por el bobinado, y se origine el movimiento del rotor como resultado de la interacción de estos campos.
  • Las escobillas: transmiten la tensión y corriente de la fuente de alimentación hacia el colector y  al bobinado del rotor.


Control de un motor de CC

El primer problema a considerar a la hora de alimentar el motor, es la forma de como hacerlo. Ya que si lo hacemos mediante un PIC, por lo general, la corriente máxima que nos puede proporcionar cualquier línea de salida está limitada a 25mA como máximo. Esta corriente es demasiado pobre para alimentar un motor DC o CC directamente. Por ello se hace necesaria la utilización de transistores que puedan ser configurados en diferentes posiciones, siendo la mas utilizada el Puente en H.

Puente en H

La forma mas sencilla de controlar un motor de CC de baja potencia, en velocidad y sentido de giro, es mediante la conmutación electrónica de unos circuitos realizados básicamente con transistores que reciben el nombre de Puente en H.
Como se puede ver en la imagen, este circuito esta formado por 4 transistores que trabajan en conmutación y se comportan como interruptores controlados por las señales que les llega a las entradas Input1 e Input2.
Cuando se activa la entrada Input1 a nivel alto y la entrada Input2 a nivel bajo los transistores Q3 y Q2(NPN y PNP) entran en saturación, mientras que Q1 y Q4 están en corte ya que son contrarios(PNP y NPN). De esta forma el motor gira en un sentido.
Si en caso contrario activáramos las entradas a la inversa, se produce el giro en el sentido contrario, ya que invertimos la polaridad del motor.

Disponemos de integrados que ya poseen estas configuraciones para el gobierno de los motores, los mas utilizados son el Driver L293 y el doble puente H L298.

Driver L293:
Es un driver de 4 canales que es capaz de proporcionar una corriente de salida de hasta 1A por canal. Cada canal es conrtolado por señales de entrada TTL y cada pareja de canales dispone de una señal de habilitación.
En el esquemático siguiente podemos ver el diagrama de bloques del driver L293, así como una serie de configuraciones para la conexión de motores.

Driver L298:
Posee en su interior un doble puente en H lo que permite dirigir dos bobinas de una forma individual, el control es de habilitación y de dirección. Soporta hasta un máximo de 3A por cada canal.
Si observamos el diagrama de bloques del L298, podemos ver la diferencia entre el L293 y L298. Este esta compuesto por un parámetro doble en H como ya hemos citado anteriormente.



Control de velocidad de un Motor de CC

La velocidad de giro de un motor de corriente contínua depende del valor medio de la tensión aplicada en sus extremos.
El sistema mas utilizado para controlar la velocidad de un motor DC es mediante la modulación de ancho de pulso PWM.


La tensión contínua media presentada al motor se controla manteniendo una frecuencia constante, y variando el tiempo que la señal permanece en alto, es decir variando el ciclo de trabajo o Duty cycle.
Por ejemplo una ciclo de trabajo del 50% suministra una tensión media del 50%.

En la siguiente entrada realizaremos un ejemplo de control de un motor de CC, mediante el driver L298.


viernes, 15 de febrero de 2013

Adquisición de datos en Labview

A continuación pasaremos a explicar las funciones básicas de nuestro DAQ en Labview, así como una pequeña introducción a la utilización del mismo en el entorno de Labview.

En primer lugar localizaremos las funciones que disponemos para la adquisición de datos mediante DAQ. Para ello seguimos la ruta, Programming->Measurement I/O->DAQmx- Data Adquisition.
Aquí podemos observar las funciones.


Una vez explicadas las funciones de adquisición vamos a realizar un ejemplo sencillo en el cual vamos a utilizar una tarea creada anteriormente en MAX.

Asociar una tarea a un canal

Nos disponemos a crear el siguiente VI, donde seleccionamos la tarea CIFPN1_2013_tarea_1.


Configuramos el Read(polimórfico) como lectura de un booleano de 1 línea.


Una vez creado el VI, cambiaremos al Front Panel donde podemos ver el Led que hemos creado como indicador, si hacemos Run podemos ver que nuestro Led se ilumina ya que el canal que hemos seleccionado se encuentra "al aire".



Si ahora en el DAQ estableciéramos el canal P04 a "0", es decir lo conectáramos físicamente a Gnd, podemos ver el resultado donde nuestro indicador se apaga.



¿Podemos asociar 2 tareas a un mismo canal?

La repuesta es, No. Si duplicamos el ejemplo anterior, e hiciéramos Run podemos ver que no es posible asociar 2 tareas a un mismo canal, en cambio si se pueden asociar dos tareas distintas a distintos canales, y asociar una tarea a varios canales.




Lectura de una tarea del puerto 0

También tenemos la posibilidad de hacer una lectura de una tarea de un puerto. Para ello en primer lugar realizaremos la creación de la tarea desde MAX(tal y como explique en las entradas de MAX), pero en este caso en "adquire signals", seleccionaremos "Digital Input->Port input".


Una vez que hagamos next, seleccionamos en la pestaña "Virtual" el puerto que hemos creado anteriormente. En este caso CIFPN1_DIG_PORT0.




Establecemos el nombre a la tarea nueva, que en este caso la hemos llamado CIFPN1 2013_tarea3_port0.




Una vez creada la tarea, si volvemos a nuestro VI hecho en Labview, y cambiamos la tarea, podemos observar como realizamos el control del puerto PORT0.
En este caso la función Read la configuramos como lectura de 1 boleano de N líneas, ya que la tarea va a leer todos los canales del  puerto.


En este caso, los indicadores creados son un Array, ya que este array representa a port0.



PIC 18F4550


Principales características del Pic 18F4550

  • Microcontrolador con módulo USB  2.0. Soporta Low speed 1.5Mb/s y full speed 12Mb/s. 
  • 1kB de memoria de doble acceso vía USB
  • 35 pines I/O disponibles
  • Memoria de programa flash de 32 kB
  • RAM de 2048 Bytes
  • EEPROM de datos de 256 Bytes
  • Velocidad de la CPU 12 MIPS
  • Oscilador externo de dos modos hasta 48 MHz
  • Oscilador interno selecionable entre 8 frecuencias desde 31kHz hasta 8MHz
  • Oscilador secundario con Timer 1 de hasta 32kHz
  • Opciones de oscilador dual permiten que la velocidad de la CPU y del módulo USB sean diferentes
  • ADC de 10 bits y 13 canales
  • Tecnología nanoWatt que brinda características y funciones de bajo consumo y ahorro de energía
  • Voltaje de operación 4.2V a 5.5V
  • 4 Timer(desde Timer0 a Timer3). Uno de 8 bits y 3 de 16 bits
  • 2 módulos de captura/comparación/PWM
  • EUSART, SPP, SPI, I²C.
  • 20 fuentes de interrupciones (3 externas)
  • Resistencias de pull-ups en el puerto B programables
  • Función del pin MCLR opcional
  • Brown-out Reset de valor programable
  • Power-on Reset
  • Power-up Timer y Oscillator Start-up Timer
  • Soporta 100,000 ciclos de borrado/escritura en memoria flash
  • Soporta 1,000,000 ciclos de borrado/escritura en memoria EEPROM
  • Retención de datos mayor a 40 años
  • Protección de código y datos programable
  • Encapsulado DIP de 40 pines

Después de analizar las principales características del dispositivo , nos introduciremos mas a fondo en él, tal y como hicimos en la entrada del PIC 16F877.
En la siguiente captura podemos ver una tabla comparativa entre varios dispositivos de la familia, así como sus principales características.



Detallado de Pines

Como se puede apreciar en la imagen tiene cierta similitud a la disposición de pines del Pic 16F877.



Arquitectura del Pic

Como expliqué en la entrada del Pic 16F877 existen dos tipos de arquitecturas la de Von Newman y la tipo Harvard. 
El Pic 18F4550 posee una arquitectura tipo Harvard, ya que dispone de diferentes buses para acceder a la memoria de programa o a la memoria de datos. Esto nos da la opción de acceder a la memoria de datos para ejecutar una instrucción, mientras se lee de la memoria de programa la siguiente instrucción. Es decir, podemos acceder de forma simultánea a ambas memorias.

El Bus de memoria de programa: Está formado por 21 líneas de dirección,16 líneas para instrucciones  y 8 líneas para datos.

El Bus de memoria de datos: Compuesto por 12 líneas de dirección y 8 líneas de datos.

Estructura Interna del Pic

Dentro del datasheet del dispositivo podemos encontrar un diagrama de bloques que nos explica la arquitectura interna que tiene el Pic 18F4550.


Como podemos ver en la imagen este modelo de Pic es bastante completo, cuenta con una serie de elementos como: la memoria de programa, memoria de datos,contadores, puertos I/O, latch de dirección, datos...


Organización de la memoria

La memoria del Pic se divide en: Memoria RAM de datos, memoria de programa, memoria EEprom de datos, la pila y memoria de configuración

Memoria de datos

Cuenta con una memoria de RAM de datos de 2048 bytes, (8 de los bancos de 256 bytes).
También cuenta con 160 bytes dedicados a los SFR's(Registros de función especial) los cuales se encuentran en la parte alta del banco 15.
Como se puede ver en la imagen la memoria RAM de datos se compone por GPR's o registros de propósito general y SFR's o registros de función especial.
Es la encargada de almacenar datos de forma temporal durante la ejecución del programa.


Para acceder a un Byte de la memoria de datos en primer lugar seleccionaremos el banco mediante el BSR(Bank Selector Register) y a continuación se disecciona el byte dentro del banco.


Memoria de programa

El Pic 18F4550 cuenta con una memoria de programa de 32K (32768 bytes). Es una memoria tipo Flash. 
Esta memoria es la que se encarga de almacenar las instrucciones, constantes y datos.
La podemos escribir o leer con un programador externo o en ejecución.


Memoria EEprom de datos
Es una memoria no volátil en la que se almacenan los datos en ausencia de tensión.
Cuatro SFR son usados para la escritura y lectura de la EEPROM:
EECON1 y EECON2(controlan el acceso a los datos de la memoria EEPROM).
EEDATA y EEADR(ordenan la escritura/lectura y la dirección).


La pila o Stack
Es un bloque de memoria RAM independiente de 31 palabras de 21 bits en la cual se almacena de una forma temporal el valor del Contador de Programa(Program Counter) cuando se produce una llamada a subrutina o interrupción.


Memoria de configuración
Es un bloque de memoria situado a partir de la posición 30000H en la memoria de programa donde se almacenan:
  • Bits de configuración. Contenidos en 12 bytes de memoria flash donde se almacenan varias opciones de configuración: opciones del oscilador, reset, watchdog, circuitería de depuración y programación... Estos bits pueden ser modificados.
  • Registros de identificación. Contienen información del modelo y revisión del dispositivo. Son registros de lectura


Ciclo máquina y ciclo de instrucción

Al igual que explique en el Pic 16F877, en el Pic 18F4550 la mayoría de las instrucciones también se ejecutan en un solo ciclo máquina.



El ciclo de instrucción
Un ciclo de instrucción comprende cuatro ciclos Q(desde Q1 hasta Q4), tal y como se puede apreciar en la imagen.
En la captura también se puede observar el esquemático del proceso Pipeline el cual es un sistema que nos permite ejecutar una instrucción(acceso a la memoria de datos), mientras se lee de la memoria de programa la siguiente instrucción.



Espero que te haya servido el tutorial, te dejo un link donde puedes encontrar este potente micro.

https://s.click.aliexpress.com/e/_EzTdxNx


¡Un abrazo electrónico!

PIC 16F877


Principales características del Pic 16F877
  • Procesador de arquitectura RISC (Reduced Instruction Set Computer) avanzada.
  • Juego de 35 palabras de instrucción a aprender.
  • Velocidad de operación: Frecuencia de entrada 20 Mhz, ciclos de instrucción de 200ns.
  • Hasta 8K en palabras de 14 bits para la memoria tipo flash.
  • Hasta 368 Bytes de memoria de datos RAM.
  • Hasta 256 Bytes de memoria datos EEPROM
  • Capacidad de interrupción de hasta 14 fuentes internas y externas
  • Power on reset
  • Power-up Timer (PWRT) y Oscillator Start-up Timer (OST)
  • Compatible modo SLeep
  • Protección de código Programable
  • Voltaje de operación entre 2.0 y 5.5 voltios
  • Corriente máxima 25 mA.
  • Bajo consumo 
Características periféricas
  • Timer0: temporizador / contador 8-bit  con prescaler de 8-bits
  • Timer1:  temporizador / contador 16-bit con prescaler
  • Timer2: temporizador / contador con periodos de registro de 8-bits, preescaler y postscaler.
  • Dos módulos de captura PWM 
  • Conversor analógico digital multicanal de 10 bits
  • Universal síncrono y asíncrono Transmisor Receptor(USART/SCI) con 9 bits de dirección detección.
  • Puerto paralelo esclavo(PSP) con ancho de 8 bits, con controles externos RD,WR y CS.
  • Brown-out

Detallado de Pines

OSC1/CLKIN(9): corresponde a la entrada para el oscilador externo.
OSC2/CLKOUT(10): es la salida del oscilador.

MCLR/VPP/THV(1): MCLR, corresponde al reset del microcontrolador por hardware, tambien se utiliza como pulso para comenzar a grabar en el dispositivo.
RA0/AN0(2): Actúa como Pin digital I/O o como entrada analógica del conversor AD (canal 0)
RA1/AN1(3): Actúa como Pin digital  I/O o como entrada analógica del conversor AD (canal 1)
RA2/AN2/VREF-(4): Actúa como Pin digital I/O,  como entrada analógica del conversor AD (canal 2) o como entrada negativa de voltaje de referencia.
RA3/AN3/VREF+(5): Actúa como Pin digital I/O,  como entrada analógica del conversor AD (canal 3) o como entrada positiva de voltaje de referencia.
RA4/T0CKI (6): Actúa como Pin digital I/O,  o entrada de reloj del timer0
RA5/SS/AN4(7): Actúa como Pin digital I/O, o selección como esclavo SS.

RB0/INT(21):Corresponde al pin 0 del puerto B, es bidireccional y también se puede utilizar como interrupción externa.
RB1(22): pin 1 del puerto B, es bidireccional.
RB2(23): pin 2 del puerto B, es bidireccional.
RB3/PGM(24): pin 3 del puerto B, es bidireccional o entrada de bajo voltaje.
RB4(25): pin 4 del puerto B, es bidireccional.
RB5(26): pin 5 del puerto B, es bidireccional.
RB6/PGC(27): pin 6 del puerto B, es bidireccional, también puede programarse como petición de interrupción cuando el pin cambia de estado.
RB7/PGD(28): pin 7 del puerto B, es bidireccional, también puede programarse como petición de interrupción cuando el pin cambia de estado.


RC0/T1OSO/T1CKI(11): Actúa como Pin digital I/O del puerto C, salida del oscilador del timer1 o como clock de entrada del timer1. 
RC1/T1OSI/CCP2(12): Actúa como Pin digital I/O del puerto C, entrada del oscilador del timer1 o entrada al modo captura CCP2, tambien proporciona salida PWM 2. 
RC2/CCP1(13): Actúa como Pin digital I/O del puerto C o entrada al modo captura CCP1, tambien proporciona salida PWM 1. 
RC3/SCK/SCL(14): Actúa como Pin digital I/O del puerto C, entrada de reloj SCL/SCK o salida de los módulos SPI e I2c.
RC4/SDI/SDA(15): Actúa como Pin digital I/O del puerto C, entrada de reloj SCL/SCK o salida de los módulos SPI e I2c.
RC5/SDO(16): Pin digital I/O del puerto C o salida digital en modo SPI.
RC6/TX/CK(17): Pin digital I/O del puerto C , pin de transmisión Tx USART o reloj síncrono.   
RC7/RX/DT(18): Pin digital I/O del puerto C , pin de recepción Rx USART o datos síncronos. 

RD0/PSP0-RD7/PSP7(19-22, 27-30): Puede actuar como I/O o como líneas para la transferencia de datos en la comunicación por puerta paralela esclava. 
RE0/!RD/AN5(8): Pin digital I/O del puerto E, señal de lectura para la puerta paralela esclava o entrada analógica canal 5.
RE1/!WR/AN6(9): Pin digital I/O del puerto E, señal de escritura para la puerta paralela esclava o entrada analógica canal 6.
RE2/CS#/AN7: Pin digital I/O del puerto E, activación/desactivación puerta paralela esclava o entrada analógica canal 7.

VSS(8,19): Gnd
VDD(20,32): +5vdc


Arquitectura interna del Pic

Se distinguen dos tipos de arquitecturas para los dispositivos RISC, las cuales se diferencian en la forma de conexión de la memoria al procesador y en los buses que necesitan.

La arquitectura  de Von Newman, que es la utilizada para los Microprocesadores, por lo general que disponemos en nuestros Pc's. Como se puede apreciar solo hay un Bus de datos, de direcciones y control.



La arquitectura de Harvard, es la  mas empleada en los ordenadores mas potentes y en los microcontroladores. En este caso ademas del procesador, cada tipo de memoria tiene un bus de datos, uno de direcciones y uno de control.
La ventaja principal que tiene esta arquitectura frente a la de Von Newman es que se permite adecuar el tamaño de los Buses a las carácteristicas de cada tipo de memoria, y ademas el procesador puede acceder a cada una de ellas de forma simultánea, aumentando la velocidad de procesado de datos.
La desventaja como se puede apreciar en la imagen, es que consume muchas mas líneas. Pero en el caso de los microcontroladores como se encuentra en el mismo encapsulado que el procesador, esto no supone un problema, por lo que es la arquitectura mas utilizada en estos.


Estructura Interna del Pic 16F877

En el Datasheet del dispositivo podemos encontrar un diagrama de bloques que nos explica la estructura interna del Pic.
Como se puede apreciar en la imagen, el Pic esta compuesto por una cantidad de elementos como la memoria de programa, memoria de datos, procesador, contadores(Timers), periféricos(puertos)...


Analizándola de un punto de vista mas detallado podemos observar las siguientes características:

Si comenzamos observando la parte superior del diagrama de bloques nos encontramos con:
La memoria de programa(Flash): con una capacidad de 8K en posiciones de 14 bits.
La Ram: con una capacidad de 368 bytes en posiciones por 8 bits.
La memoria EEPROM: cuenta con 256 bytes en posiciones por 8 bits también.
Program Counter: es el contador de programa o registro que nos indica la dirección de la instrucción a ejecutar.
Se puede apreciar también 8 niveles de Stack anidados en 13 bits.
ALU: El procesador está formado por la Unidad de Aritmética Lógica(ALU) que multiplexa los datos en el regsitro W. 
Justo a su lado contamos un registro de instrucción, que se carga cada vez que la ALU solicita una nueva instrucción a procesar. 
Los "Status Reg": son los registros encargados de anotar el estado actual del sistema cada vez que se producen cambios.
El FSR: controla el direccionamiento de la RAM.
Periféricos: Dentro de los periféricos nos encontramos.
A la derecha los puertos I/O(PORTA, PORTB, PORTC)
Abajo del diagrama de bloques el resto de periféricos: Timer0, Timer1, Timer2, Conversor analógico-digital 10 bits, EEPROM, CCP1/2, Puerto serie síncrono, USART.

Organización de la memoria

La memoria se divide en memoria de datos y memoria de programa.

Memoria de datos

A su vez podemos decir que la memoria de datos se divide en:

SFR: También llamada Special Function Register o registros de propósito especial, los cuales ayudan a configurar el hardware interno y ademas sirven para escribir o leer valores en los diferentes componentes que constituyen nuestro Pic. Por ejemplo la función TRIS nos permite configurar el modo de trabajo de las lineas del puerto a que nos refiramos(TRISA,TRISB,..)

GFR: En ingles General Function Register o registros de propósito general, son posiciones de memoria que podemos usar para almacenar valores que almacenan nuestros programas. 

La memoria de datos se divide en cuatro bancos, de las cuales las posiciones altas se reservan para los GFR y las bajas para los SFR. Cada banco comprende hasta 7Fh(128 bytes)

En la siguiente imagen podemos observar el mapa de registros.


Memoria de Programa
La memoria de programa se almacena en la memoria Flash.
El Pic 16F877 tiene un contador de programa capaz de direccionarse en 8K, por 14 espacios de memoria de programa. Es decir estos dispositivos tienen 8K por 14 palabras de memoria de programa Flash.
En la siguiente imagen se puede apreciar el mapa de la memoria de programa.


Ciclo máquina

En lla mayoría de los Pic un ciclo máquina está constituido por 4 ciclos de reloj, y la mayoría de instrucciones se ejecutan en un solo ciclo máquina(4 ciclos de reloj).

¿Pero que es un ciclo máquina?
Podemos decir que el ciclo máquina es el tiempo mínimo necesario para ejecutar una instrucción y esta formado por un número determinado de ciclos o periodos de reloj.

En el caso del Pic 16F877 si observamos su datasheet podemos apreciar que la ejecución de la mayoría de los registros o instrucciones se realiza en 1 solo ciclo máquina.