Está en la página 1de 21

Sistemas electrónicos. Tema 10.

Circuitos secuenciales

Tema 10. Circuitos secuenciales.

10.1.- Introducción.
Los circuitos digitales secuenciales son aquellos cuya salida no depende únicamente del valor de las
entradas en el momento actual, sino del estado interno del circuito lógico. Esto significa que tienen memoria (es
decir, ciertas variables internas tienen un valor determinado que afecta a la salida). En realidad el valor de esas
variables internas depende de la historia pasada de las variables de entrada (de la secuencia que han seguido las
entradas en el pasado).
El circuito secuencial más simple es el biestable. En esencia es un circuito que tiene una variable de
memoria (1 bit). Una cierta combinación de las variables de entrada puede cambiar el valor de ese bit de
memoria (pasar de 0 a 1 o viceversa).

10.2.- Biestables activos por nivel.


Un biestable tiene un bit de memoria, que además es su salida. El valor que tiene ese bit en un momento dado
depende de los valores pasados de las entradas al biestable. Los biestables activos por nivel son aquellos en los
que el valor de la salida (memoria) cambia de 0 a 1 o de 1 a 0 cuando las entradas tienen un nivel de tensión
determinado. Existen dos tipos principales de biestables activos por nivel. El biestable RS y el biestable D.

Biestable RS activo por nivel (“latch RS”).


Este elemento tiene 2 entradas (R y S) y una salida. Pueden tener además una 3ª entrada de
habilitación, EN ("enable"):

S Q
EN
R
Q

La salida suele estar disponible en forma normal e invertida. El funcionamiento es como sigue. Si la entrada de
habilitación EN está baja, la salida permanece en el valor que tenga, valgan lo que valgan R y S. Si EN está
alta, la salida cambiará en función de los valores de R y S, según la tabla:

S R Qn+1 Acción
0 0 Qn Sin cambio
1 0 1 Set
0 1 0 Reset
1 1 Indet. Ambiguo

en esta tabla, Qn representa la salida que había antes del cambio de S, R ó EN. Como se ve, si R=S=0, la salida
no cambia (continúa en 0 si valía 0 o en 1 si valía 1). De esta forma, la salida no solo depende de las entradas,
sino del valor anterior que tenía esa salida (memoria). Hay que resaltar que si las entradas R y S son 1 al mismo
tiempo, la salida es indeterminada, por lo que se debe evitar esa combinación de entradas. Si no se tiene en
cuenta la señal de habilitación, el biestable RS se puede implementar con dos puertas NOR:

Las entradas S yR pueden ser activas a nivel bajo (negadas), lo que se indica con un círculo en cada entrada. La
tabla de verdad quedaría:
S R Qn+1 Acción

1
Sistemas electrónicos. Tema 10. Circuitos secuenciales

1 1 Qn Sin cambio
0 1 1 Set
1 0 0 Reset
0 0 Indet. Ambiguo

Si no se tiene en cuenta la entrada de habilitación, el biestable RS con entradas negadas se puede implementar
con dos puertas NAND:

Un ejemplo de circuito TTL es el 74279. Este circuito tiene 4 biestables RS activos por nivel, que no disponen
de entrada de habilitación. Las entradas R y S son activas a nivel bajo. Además solo dispone de la salida
normal, Q, no la salida invertida Q .

Biestable tipo D activo por nivel (“latch D”).


Este biestable tiene una entrada D (datos) y una salida, además de una entrada de habilitación EN:

D
Q
EN Q

Al igual que en el anterior, si EN está a nivel bajo la salida no cambia. Si EN se pone a nivel alto, la salida
cambia haciéndose igual a la entrada, es decir:

EN D Qn+1 Acción
0 X Qn Sin cambio
1 0 0 Carga dato
1 1 1 Carga dato

En este caso, la salida almacena el valor de la entrada D (entrada de datos). Si se desea que el dato almacenado
no cambie aunque cambie D, basta con volver a hacer baja la entrada de habilitación, quedándose memorizado
el valor que tenía D cuando EN estaba alta. El biestable tipo D se puede implementar con puertas NAND:

La entrada de habilitación podría ser activa a nivel bajo, indicándose con un círculo.
Existen varios circuitos TTL que implementan biestables de este tipo. Suelen tener varios biestables en
el mismo integrado.
Por ejemplo el 7477 tiene 4 biestables, con una entrada de habilitación común para dos de ellos, y otra
entrada de habilitación para los otros dos. Solo dispone de las salidas normales, no invertidas. Los 4 biestables
permiten memorizar 4 señales binarias (4 bits).
El 7475 es igual al anterior, pero dispone además de las salidas invertidas.
El 74373 tiene 8 biestables con una entrada de habilitación común a todos ellos. Sirve por tanto para
memorizar 8 señales binarias (8 bits).

2
Sistemas electrónicos. Tema 10. Circuitos secuenciales

10.3.- Biestables activos por flanco.


Son biestables en los que la salida (memoria) solo puede cambiar en el momento en el que una de las entradas
(entrada de reloj) cambia de cero a uno o de uno a cero. Es decir, se activa por un flanco (de subida o de
bajada, según los casos) de la entrada de reloj. Hay varios tipos. Los más comunes son los RS, los D y los JK.

Biestable tipo RS activo por flanco (“RS flip-flop”).


Es un biestable RS cuya entrada de habilitación solo es sensible a los transitorios (flancos) de subida o
bajada. Esa entrada de habilitación se llama ahora entrada de reloj.

S
Q
CLK
Q
R

Si la entrada de reloj es constante (0 ó 1), la salida del biestable no cambia. Cuando la señal de reloj cambia de
0 a 1 (biestable activo por flanco de subida) o cambia de 1 a 0 (biestable activo por flanco de bajada, indicado
con un círculo en la entrada), la salida toma el valor de acuerdo con la tabla del biestable RS vista antes.
Este tipo de biestable no es muy usual en circuitos integrados. En su lugar se utiliza el biestable tipo
JK que es una pequeña variación.

Biestable tipo D activo por flanco (“D flip-flop”).


Es igual al biestable tipo D normal, pero en lugar de entrada de habilitación tiene una entrada de reloj
que solo es sensible a los flancos de subida o de bajada.

D
Q
CLK
Q
Cuando la señal de reloj cambia de 0 a 1 (biestable activo por flanco de subida) o cambia de 1 a 0 (biestable
activo por flanco de bajada), la salida toma el valor de la señal de entrada de datos D. Si la señal de reloj no
cambia, la salida del biestable permanece con su valor memorizado.
Existen varios circuitos integrados que implementan biestables de este tipo.
El 7474 tiene 2 biestables tipo D activos por flanco de subida. Además de la entrada de reloj y la de datos
disponen de 2 señales de Set y de Clear que permiten poner a cero o a uno la salida del biestable
independientemente de la señal de reloj. Se llaman entradas asíncronas. En este dispositivo son activas a nivel
bajo. Su efecto es similar a las entradas S y R de un biestable tipo RS activo por nivel. Su diagrama y su tabla
de verdad son:

Set (PR) Clear Reloj D Q


0 1 X X 1
1 0 X X 0

3
Sistemas electrónicos. Tema 10. Circuitos secuenciales

0 0 X X Indet.
1 1 ↑ 1 1
1 1 ↑ 0 0

Es decir, se carga el dato cuando el reloj tiene un flanco de subida, siempre que las entradas de Set y Clear
estén altas (desactivadas).

Biestables JK activos por flanco (“JK flip-flop”).


Estos biestables son similares a los RS activos por flanco, salvo que tienen una función adicional. Cuando
las entradas J (equivalente a S) y K (equivalente a R) están las dos a nivel alto, la salida en lugar de ser
indeterminada, conmuta (invierte) su valor. Cuando llega un flanco por la entrada de reloj, el funcionamiento
del biestable es:

J K Qn+1 Acción
0 0 Qn Sin cambio
1 0 1 Set
0 1 0 Reset
1 1 Qn Báscula

es decir, si cuando llega la subida del reloj, J=K=1, la salida del biestable cambia su valor (bascula).

Hay varios circuitos integrados que implementan biestables tipo JK activos por flanco. El 7473 es el más
simple. Tiene 2 biestables independientes. La entrada de reloj es sensible al flanco de bajada. Además de las
entradas de reloj y J,K, dispone de una entrada de Clear activa a nivel bajo. Esta entrada es asíncrona, pues su
funcionamiento es independiente del reloj. Cuando se pone a nivel bajo, hace la salida del biestable igual a 0.
El 7476 es un poco más complejo. También tiene 2 biestables JK independientes, activos por flanco de
bajada. Además de las entradas de reloj y JK dispone de una señal de Clear y una de Set (PR) asíncronas,
activas a nivel bajo, que permiten poner la salida a 0 ó a 1 independientemente del reloj. Estas entradas
asíncronas permiten utilizar el biestable como un biestable tipo RS activo por nivel (basta con conectar las
entradas de reloj, J y K a nivel bajo. Las figuras siguientes muestran el diagrama de este integrado biestable, y
su tabla de verdad:

4
Sistemas electrónicos. Tema 10. Circuitos secuenciales

El 74109 tiene 2 biestables JK activos por flanco de subida. Es similar al 7476 (dispone de Set y Clear)
salvo que la entrada de reloj es activa en la subida, y la entrada K es activa a nivel bajo (está invertida
internamente).

10.4.- Sistemas secuenciales síncronos y asíncronos.


La figura siguiente muestra un circuito secuencial utilizado para controlar un proceso en el que las variables
involucradas son binarias. Las entradas son las señales proporcionadas por los sensores, que son binarios, es
decir, dan como salida un 1 ó un 0. Por ejemplo una fotocélula, o un final de carrera, que dan un 1 si detectan y
un 0 si no detectan. Las variables de salida son señales digitales (1 ó 0) que se utilizan para poner en marcha o
parar un actuador del proceso, como un motor, o un cilindro neumático, por ejemplo.
Entradas Salidas
Circuito
combinacional

Biestables

El circuito consta de un conjunto de biestables que memorizan el estado del proceso. Por ejemplo, con 3
biestables se podrían memorizar 8 estados diferentes del proceso. Por otra parte se tiene un circuito
combinacional que tiene como entradas las entradas del proceso y las salidas de los propios biestables que
definen el estado, y que tiene como salidas, las salidas a los actuadores, y unas señales que son las entradas de
los biestables. El circuito combinacional decide, en función del estado en que se encuentra el proceso, y del
valor de las entradas, qué salidas deben activarse, y cómo debe cambiar el propio estado del proceso,
cambiando los biestables que correspondan.
El circuito combinacional también deberá dar como salidas las señales que van a actuar sobre el
proceso, que serán función en general de los estados (biestables) y de las entradas.
Los biestables que implementan el circuito anterior pueden ser de diversos tipos. Una posibilidad es
utilizar biestables tipo RS activos por nivel. En ese caso el circuito secuencial se denomina asíncrono, pues no
interviene ninguna señal de reloj. Las salidas del circuito combinacional actuarán sobre las entradas R y S de
los biestables. Otra posibilidad es utilizar biestables tipo JK activos por flanco. En ese caso las salidas del
circuito combinacional actúan sobre las entradas J y K de los biestables. Estos circuitos necesitan una entrada
de reloj que habilite con su flanco las transiciones del biestable. Se denominan circuitos secuenciales síncronos,

5
Sistemas electrónicos. Tema 10. Circuitos secuenciales

porque todos los biestables cambian a la vez (cuando sube o baja el reloj). Normalmente se utilizan circuitos
síncronos, porque eso simplifica el diseño, ya que si se usan biestables asíncronos, un biestable puede cambiar
un poco antes que el otro y provocar una transición incorrecta.

10.5.- Subsistemas secuenciales.


Existen circuitos integrados que implementan funciones lógicas secuenciales más complejas. Los más
importantes son: los contadores (asíncronos y síncronos) y los registros de desplazamiento.

Contadores asíncronos.
Un contador es un circuito con una entrada principal de reloj y varias salidas, de forma que cada vez
que hay un flanco (de subida o de bajada) en la entrada de reloj, el número binario de la salida aumenta en 1.
Por ejemplo, un contador de 4 bits tiene 4 salidas, y la evolución de las mismas es:
Q3Q2Q1Q0=0000 → 0001 → 0010 →0011→ 0100→0101→0110→0111→1000→etc.
Un contador asíncrono es aquel en el que el cambio en las salidas no se produce a la vez, sino que
cambia primero la salida más baja (Q0), ésta produce el cambio de la segunda salida, ésta de la tercera, y ésta
de la cuarta. El retraso desde que cambia la primera hasta que cambia la segunda es pequeño, pero aun así hay
un instante en que la salida pasa por un valor incorrecto. Por ejemplo, al pasar de 0001 a 0010 la secuencia que
ocurre es: 0001→0000→0010. En el estado 0000 solo está un pequeño intervalo de tiempo (el retraso del
contador), pero puede ser importante. En el caso de que este fenómeno pueda causar problemas debe usarse un
contador síncrono. La figura siguiente muestra cómo sería un contador asíncrono de 4 bits, formado con
biestables JK, con entrada de reloj activa por flanco de bajada:

Inicialmente se supone que los 4 biestables están a 0. Cuando llega un flanco de bajada en el reloj, el primer
biestable pasa a 1, quedándose los demás en 0. Al segundo flanco de bajada del reloj, el biestable 1 pasa a 0,
introduciendo un flanco de bajada en la entrada de reloj del segundo biestable, que pasa a 1. Entra la bajada de
la señal de reloj y la bajada de la señal Q1 hay un pequeño retardo, por lo que primero cambia Q1 de 1 a 0 y
después Q2 de 0 a 1. En el siguiente flanco de bajada del reloj, el biestable 1 vuelve a pasar a 1, y así se repite

6
Sistemas electrónicos. Tema 10. Circuitos secuenciales

el ciclo. Cada vez que Q1 pasa de 1 a 0, Q2 cambia un poco después. Cada vez que Q2 pasa de 1 a 0, Q3
cambia un poco después, y cada vez que Q3 cambia de 1 a 0, Q4 cambia un poco después.

Cada contador tiene un valor máximo de cuenta. Cuando llega al valor máximo de cuenta, el contador vuelve a
cero. Se llama contador módulo N a aquel cuya cuenta máxima es N. Los más habituales son el módulo 16
(contador binario de 4 bits normal que vuelve a cero después de la salida 1111), el módulo 10 (contador de 4
bits que vuelve a cero cuando pasa de 9, es decir, después de la salida 1001) y el contador módulo 12 (que
vuelve a cero después de 1011).
Estos contadores asíncronos se utilizan fundamentalmente para obtener señales de reloj de frecuencias
menores a partir de una señal de reloj dada. Por ejemplo, un contador de módulo 16 cuya entrada de reloj sea
de 16kHz, la salida más baja Q0 es una señal de 8kHz, ya que sólo cambia con el flanco de subida del reloj. La
salida Q1 es una señal de frecuencia 4kHz, la salida Q2 es de 2kHz, y la salida Q3 es una señal de 1kHz.
Debido a esto se llaman también divisores de frecuencia.
La familia TTL tiene varios contadores asíncronos. Los más comunes son:
• El 7490. Es un contador de módulo 10, también llamado de década. Permite obtener una salida de
frecuencia dividida por 10, 5 ó 2.
• El 7492. Es un contador de módulo 12. Permite obtener salidas de frecuencia dividida por 12, 6 ó 2.
• El 7493. Es un contador de módulo 16, también llamado binario. Permite obtener salidas de frecuencia
dividida por 16, 8 ó 2.
Los tres disponen de entrada de Reset, que permite ponerlos a cero. Los tres son activos por flanco de
bajada. La división de frecuencias es muy útil para contar un tiempo determinado. Si se desea contar un tiempo
de 1 segundo y se dispone de una señal de reloj de 1 kHz, bastaría con conectar en cascada 3 contadores
módulo 10 (7490).

Contadores síncronos.
A diferencia de los anteriores sus salidas cambian a la vez cuando hay un flanco de subida (o bajada)
en la entrada de reloj. Son por tanto mejores para ser utilizados como contadores, si se desea utilizar las salidas
del contador en otros circuitos lógicos. La figura siguiente muestra cómo sería un contador síncrono de 4 bits,
formado con biestables JK, con entrada de reloj activa por flanco de bajada:

7
Sistemas electrónicos. Tema 10. Circuitos secuenciales

Cuando llega el primer flanco de bajada, solo pasa de 0 a 1 el primer biestable, ya que los otros tienen sus
entradas J y K a 0. Al ponerse a 1 el biestable Q1, en el siguiente flanco de bajada del reloj, cambian tanto el
Q1 como el Q2 (cambian exactamente a la vez), pasando el Q1 a 0 y el Q2 a 1. En el siguiente flanco de bajada
solo cambia Q1, que vuelve a 1. En el siguiente cambian Q1, Q2 y Q3 (los 3 a la vez), pasando Q1 y Q2 a 0, y
Q3 a 1, etc. Los cambios en todos los biestables se producen de forma sincronizada, cuando llega el flanco de
subida de la señal de reloj.

Al igual que los asíncronos, tienen un valor máximo de cuenta que cuando se sobrepasa hace volver a
cero al contador. En este caso existen 2 tipos, el contador de década (módulo 10) que pasa de 9 (1001) a 0
(0000), y el contador binario, que pasa de 15 (1111) a 0 (0000). En el caso del contador binario, no hay que
añadir nada al circuito, pues cuando los 4 biestables valen 1, al siguiente pulso todos cambian a 0. En el caso
del contador de década, hay que añadir algunas puertas adicionales para asegurar que después del 1001, se
pasa al 0000. En la figura se muestra cómo sería el contador de década:

Los contadores pueden ser ascendentes o descendentes, o ambas cosas. Los contadores ascendentes
incrementan su salida cuando les llega un pulso. El descendente la decrementa. Cuando llega a cero, vuelve al
valor máximo, y así sucesivamente.
La familia TTL dispone de varios contadores síncronos. Los más comunes son:
• 74160. Es un contador ascendente de década (módulo 10). Además de la entrada de reloj (de subida) y las 4
salidas, dispone de 4 entradas de precarga, que permiten cargar un valor determinado en el contador.
Dispone además de una señal de reset asíncrona para poner el contador a cero. También dispone de una
entrada que inhabilita la cuenta (deja de incrementarse).
• 74162. Es un contador idéntico al anterior, salvo que la entrada de reset es síncrona (solo actúa durante el
flanco de subida del reloj). Esto es importante si queremos medir un tiempo con precisión, pues el contador
se pone a cero justo en el flanco del reloj.

8
Sistemas electrónicos. Tema 10. Circuitos secuenciales

• 74161. Es un contador binario (módulo 16). Las demás características son idénticas al 74160.
• 74163. Es un contador idéntico al anterior, pero con la entrada reset síncrona.
• 74168, 74190. Son contadores de década. Los dos son bidireccionales, es decir, tienen una entrada que
selecciona el modo de funcionamiento (cuenta ascendente o descendente). Disponen de posibilidad de
precarga de un valor determinado en el contador. Tiene también una entrada de habilitación de cuenta, que
inhibe la cuenta cuando está a nivel alto. Esto permite la conexión en cascada síncrona de varios
contadores.
• 74169, 74191. Son contadores idénticos a los anteriores, pero de módulo 16 (binarios).
• 74192. es un contador de década bidireccional. Tiene 2 entradas de reloj, una para la cuenta ascendente y
otra para la cuenta descendente. Dispone de opción de precarga y de reset.
• 74193. es idéntico al 74192, pero de módulo 16 (binario). La figura siguiente muestra el diagrama de este
contador, y la tabla de verdad que explica su funcionamiento.

Los contadores de 4 bits pueden conectarse en cascada para dar lugar a contadores de 8 o de más bits.
Para ello disponen también de salidas de fin de cuenta, que indican que se ha llegado al valor máximo, y que
pueden ser utilizadas como entradas del siguiente contador. Esta conexión en cascada puede ser asíncrona (la
señal de fin de cuenta del primer contador es la entrada de reloj del segundo contador), o puede ser síncrona (la
señal de fin de cuenta del primer contador es la señal de habilitación de cuenta del segundo, mientras la señal
de reloj es la misma para los dos).

Registros de desplazamiento.
Son circuitos secuenciales que permiten transformar bits de información en paralelo a una sucesión de
bits por una sola línea (serie), o bien al revés. Hay de 4 tipos.

Entrada en serie-salida en paralelo:

Entrada en serie-salida en serie:

9
Sistemas electrónicos. Tema 10. Circuitos secuenciales

Entrada en paralelo-salida en serie:

Entrada en paralelo-salida en paralelo:

10
Sistemas electrónicos. Tema 10. Circuitos secuenciales

10.6.- Introducción a los microcontroladores.

10.6.1. Introducción.
Se denomina microcontrolador a un circuito integrado (un solo “chip”) que incluye un microprocesador y los
periféricos necesarios para llevar a cabo el control de un proceso.

10.6.2. Elementos de un microcontrolador.


Los elementos más comunes de que consta un microcontrolador (todos ellos incluidos en el mismo “chip”) son:
• El microprocesador (o CPU). Es el elemento que se encarga de ejecutar las instrucciones del
programa almacenado en la memoria de programa.
• Memoria de datos. Es la parte de la memoria donde se almacenan las variables (datos) utilizadas por
el programa. Suele ser memoria RAM (volátil), aunque una parte de esta memoria suele ser EEPROM
(grabable y borrable eléctricamente, pero que no se pierde si se quita la alimentación).
• Memoria de programa. Es la parte de la memoria que contiene el programa que será ejecutado por el
microprocesador. Suele ser memoria no volátil: ROM (grabable una sola vez en fábrica), OTP
(grabable una sola vez por el usuario), EPROM (grabable eléctricamente y borrable por luz
ultravioleta) ó Flash EEPROM (grabable y borrable eléctricamente).
• Líneas de entrada/salida digitales. Suelen llamarse puertos de entrada/salida. Permiten leer señales
digitales de circuitos externos (normalmente a 5V) y sacar señales digitales hacia circuitos externos
(normalmente también a 5V). En muchos casos las líneas de entrada/salida digitales son configurables
por software como entradas o como salidas. En función del microcontrolador, suelen ser de nivel
lógico compatible con circuitos TTL, o de nivel lógico compatible con circuitos CMOS.
• Temporizadores. Constan de un contador digital que permite contar pulsos del reloj del sistema. Se
utilizan para contar tiempo. La forma más habitual de funcionar es la carga de un valor inicial que se
decrementa cada pulso de reloj. Cuando la cuenta llega a cero significa que ha pasado el tiempo
requerido. Lo más habitual es que al llegar a cero provoquen una interrupción del microprocesador.
• Perro guardián. Es un temporizador independiente que provoca una interrupción cuando llega a cero.
Se utiliza para detectar fallos de bucles infinitos. Para que no se produzca esa interrupción es
necesario inicializar el perro guardián antes de que llegue a cero. Es típico programar un tiempo del
orden de 100 ms en este temporizador. De esta forma, si pasan más de 100 ms sin inicializar el perro
guardián significa que el programa ha entrado en un bucle infinito, y como consecuencia se dispara la
interrupción del perro guardián, que indica un fallo en el sistema. Todos los autómatas programables
incorporan este elemento de seguridad.
Además de los anteriores, que son los más comunes, algunos microcontroladores tienen otros elementos, como:
• Puertos de comunicaciones. Son periféricos especiales utilizados para comunicar el microcontrolador
con otros microcontroladores o equipos. Los más típicos son los puertos serie (RS232 ó RS485),
aunque también pueden tener puertos paralelo, o puertos de comunicación por bus de campo (bus
CAN, profibus, etc).
• Convertidores A/D ó D/A. Se utilizan para leer señales analógicas de los sensores y dar señales
analógicas a los actuadores, es decir, constituyen entradas y salidas analógicas. Sus características son
similares a las de los convertidores de las tarjetas de adquisición de datos.
• Módulo PWM. Es un circuito interno que produce una salida digital modulada por ancho de pulso.
Desde el microprocesador se escribe un valor digital proporcional al ciclo de trabajo. Tiene gran
aplicación en el control de motores eléctricos.
• Módulo de entrada de encoder incremental. Es un circuito que cuenta el número de pulsos a partir
de las señales A y B de un encoder incremental. Desde el microprocesador se puede poner a cero el
contador, o leer el valor actual del número de pulsos. Se utiliza para medir la posición y la velocidad
de motores eléctricos.
• Circuito de reloj. Es el circuito encargado de generar la señal de reloj (onda cuadrada que sincroniza
todos los eventos del microcontrolador). Lo más habitual es que este circuito sea externo, pero algunos

11
Sistemas electrónicos. Tema 10. Circuitos secuenciales

microcontroladores incorporan parte de este circuito para reducir al máximo el número de


componentes externos.
Los elementos externos más comunes que necesita el microcontrolador para funcionar son:
• Reloj. Suele ser un oscilador de cristal de cuarzo, que genera una señal cuadrada de una frecuencia
determinada. Frecuencias de 4MHz, 8MHz, 10MHz, 20MHz son habituales. Esta señal de reloj es
utilizada por el microcontrolador para sincronizar todos sus eventos. También es utilizada por el
temporizador para decrementar su cuenta.
• Fuente de alimentación. El microcontrolador necesita una tensión de alimentación continua estable.
El valor más habitual es de 5V, aunque cada vez es más común la alimentación de 3.3V, e incluso de
1.8V. La reducción de la tensión de alimentación tiene como objetivo principal reducir la potencia
disipada por el microcontrolador.

10.6.3. Arquitectura y funcionamiento básico del microprocesador.


La memoria de programa contiene las instrucciones a ejecutar. Estas instrucciones son en realidad números
binarios de una longitud (nº de bits) determinada. En función del número binario de la instrucción el procesador
realiza una operación u otra (suma, resta, etc.). Por otra parte la memoria de datos contiene números binarios
que son los datos con los que operan las instrucciones. Básicamente el procesador se dedica a leer las
instrucciones, interpretar su significado y realizar la operación adecuada utilizando los datos que la instrucción
le indica.
Para leer una instrucción (o un dato) el procesador utiliza tres buses, el bus de direcciones, el bus de control y
el bus de datos. Un bus no es más que un conjunto de pistas (conductores) cada una de las cuales permite
transmitir una señal digital (un bit) entre el procesador y la memoria. El procedimiento es el siguiente: el
procesador pone en el bus de direcciones la dirección de la instrucción (o dato) que quiere leer. A continuación
pone a 1 un bit del bus de control para indicarle a la memoria que debe poner en el bus de datos el valor de la
instrucción (o del dato) requerido. Una vez hecho esto el procesador puede leer la instrucción (o el dato) del
bus de datos.
Según la distribución de la memoria de programa y de datos, se distinguen dos tipos básicos de arquitectura, la
arquitectura Von Newman, y la arquitectura Harvard.

Arquitectura Von Newman.


Un único espacio de memoria contiene el programa y los datos. Debido a esto solo hay un bus de datos (e
instrucciones) y un bus de direcciones, además del bus de control.

Bus de datos e instrucciones


MEMORIA
Bus de direcciones (Datos y
CPU
Programa)
Bus de control

Los datos y el programa pueden ocupar el mismo espacio físico (memoria RAM) o pueden ocupar espacios
físicos diferentes (RAM para los datos y ROM para el programa, por ejemplo), pero en cualquier caso ocupan
direcciones de memoria del mismo espacio de direcciones. Los PC tienen una arquitectura de este tipo (los
datos y el programa están en la misma memoria RAM). La ventaja que tiene es que se puede aprovechar mejor
la memoria al distribuirla libremente entre datos y programa. El inconveniente que tiene es que el tamaño de las
posiciones de memoria de datos y de programa es el mismo, cuando en muchas ocasiones sería conveniente
utilizar tamaños diferentes. Otro inconveniente es que la ejecución de las instrucciones es más lenta, pues se
tiene que leer la instrucción y el operando de la misma memoria (por el mismo bus). Un inconveniente
importante es la posibilidad de producirse un error fatal en el sistema en el caso de que se escriba por error un
dato en una dirección dentro de la zona del programa. En ese caso se modifica el programa con una instrucción
aleatoria (la que resulta del código representado por el valor del dato) lo que normalmente provoca que el
sistema se cuelgue.

Arquitectura Harvard.
Hay dos espacios de memoria diferentes para los datos y para el programa, con sus propios buses de
direcciones y de datos (o instrucciones).

12
Sistemas electrónicos. Tema 10. Circuitos secuenciales

Bus de datos Bus de instrucciones


MEMORIA MEMORIA
DE Bus de direcciones de datos CPU Bus de direcciones de instr. DE
DATOS PROGRAMA
Bus de control de datos Bus de control de instr.

RAM ROM
EEPROM OTP PROM
EPROM
FLASH EEPROM

Los datos y el programa no solo ocupan un espacio físico diferente sino también un espacio diferente de
direcciones de memoria, pues cada uno tiene su bus de direcciones.
Las ventajas que tiene esta arquitectura son principalmente que el tiempo de ejecución puede ser menor, ya que
se puede leer a la vez la instrucción y el dato con el que opera. Por otra parte, el tamaño de las posiciones de
memoria puede ser diferente en la memoria de datos y la de programa, ajustándose a la necesidad del
procesador (es habitual tener instrucciones de 12, 14 ó 16 bits, y datos de 8 bits, por ejemplo). Otra ventaja
importante es la robustez del funcionamiento. El programa que se está ejecutando no puede escribir sobre la
memoria de programa, por lo que es más difícil que se produzca un error.
El inconveniente principal es que la memoria de datos solo puede ser de datos y la de programa solo de
programa, por lo que el aprovechamiento de toda la memoria puede ser más difícil. Otro inconveniente que
tiene es la mayor complejidad del circuito integrado, pues tiene dos sistemas de buses diferentes.
La mayoría de microcontroladores actuales utiliza una arquitectura Harvard. Los autómatas programables
también utilizan este tipo de arquitectura.

Funcionamiento básico del microprocesador.


El microprocesador dispone de un contador de programa (Program Counter ó PC) que se inicializa en un valor
determinado. El PC contiene la dirección de memoria donde está la instrucción que se va a ejecutar. El
procesador lee la instrucción de la memoria de programa, la decodifica y la ejecuta, utilizando para ello los
operandos necesarios de la memoria de datos. El resultado de la operación se almacena en un registro especial
llamado acumulador. Después de ejecutar la instrucción se incrementa automáticamente el PC, y se vuelve a
repetir el ciclo. Algunas instrucciones modifican el valor del PC (instrucciones de salto por ejemplo), por lo
que la instrucción que se ejecuta a continuación no es la siguiente en la memoria de programa, sino otra.
El acumulador se utiliza en casi todas las instrucciones. Por ejemplo, la instrucción que suma dos valores
realiza la suma del contenido actual del acumulador con un valor de la memoria de datos, escribiendo el
resultado en el mismo acumulador. Para realizar una suma habría por tanto que transferir uno de los datos de la
memoria de datos al acumulador, realizar la suma con el otro dato, y transferir el resultado del acumulador a la
memoria de datos.
Otro elemento básico del microprocesador es la pila (o “stack”). Es un conjunto de registros especiales que se
utilizan para guardar el contador de programa cuando se ejecuta una rutina de interrupción o una subrutina
normal. La pila tiene un tamaño (un número de registros) finito. Cuando se llama a una subrutina (o se produce
una interrupción) desde el programa principal, en primer lugar se guarda el PC en la pila, y a continuación se le
da al PC el valor donde empieza la subrutina. Cuando la subrutina finaliza, se le da al PC el valor almacenado
en la última posición de la pila, por lo que se vuelve al punto del programa principal en el que se estaba antes
de la subrutina. Esta misma operación se puede hacer varias veces (desde una subrutina se llama a otra
subrutina). En ese caso se almacenan en la pila dos valores de PC, recuperándose en primer lugar el último
introducido (al volver de la subrutina secundaria) y después el primero introducido (al volver de la subrutina
primaria). Se pueden encadenar tantas subrutinas como tamaño tiene la pila, ya que si la pila se llena, al intentar
escribir un valor de PC se borra otro anterior, y el programa ya no puede volver al punto del programa principal
donde se había producido la llamada.
La diferencia entre una llamada a subrutina y una interrupción es que la primera es una instrucción que se pone
a propósito en un punto determinado del programa principal. La interrupción en cambio se produce por un
evento externo al programa principal. Por ejemplo puede producirse por la activación de una entrada digital del
microcontrolador. En ese caso, cuando esa entrada pasa de 0 a 1, el procesador interrumpe el programa
principal en el punto en el que se encuentre (que puede ser cualquiera), almacena el valor actual del PC en la
pila, y cambia el valor del PC pasando a ejecutar una subrutina especial (la subrutina de interrupción). La
dirección donde empieza esa subrutina se llama vector de interrupción.

13
Sistemas electrónicos. Tema 10. Circuitos secuenciales

La siguiente figura muestra cómo evoluciona la pila cuando se producen dos llamadas encadenadas a
subrutinas. Dir1 es la dirección del programa principal en la que se llama a la subrutina. Dir2 es la dirección de
la subrutina en la que se llama a la subrutina secundaria. En principio la pila está vacía. Cuando se llama a la
subrutina se guarda en la primera posición de la pila la dirección del programa principal a la que se debe volver
al terminar la subrutina. Si dentro de la subrutina se llama a otra subrutina secundaria, se guarda en la pila la
dirección a donde debe volver cuando acabe esa subrutina secundaria. Se observa que la primera dirección
guardada se corre hacia abajo. Cuando termina la subrutina secundaria se recupera el valor del contador de
programa Dir_2+1 , y se continúa con la subrutina inicial. Al recuperar una dirección de la pila ésta se corre
hacia arriba. Cuando termina la subrutina inicial se recupera el valor del contador de programa Dir1+1 y la pila
queda vacía.

Dir1+1 Dir2+1 Dir1+1

Dir1+1

El microprocesador suele tener también una serie de registros especiales. El acumulador es de hecho el registro
especial más importante (lo tienen todos los procesadores). Los registros especiales se suelen utilizar para
guardar variables u operandos intermedios.

10.6.4. Memorias.
Un microcontrolador puede tener memorias de diversos tipos:
• RAM. Se borra si se quita la alimentación. Se utiliza para datos.
• ROM. Grabable solo una vez en fábrica (cuando se fabrica el chip). No se puede borrar. Se utiliza
para memoria de programa.
• OTP PROM. Grabable solo una vez, pero se graba después de fabricar el chip (la puede grabar el
propio usuario). Una vez grabada no se puede borrar. Se utiliza para memoria de programa.
• EPROM. Es una memoria no volátil (no se borra aunque se quite la alimentación), pero que además
se puede borrar con luz ultravioleta y volver a grabar eléctricamente. Se utiliza para memoria de
programa, aunque hoy en día está en desuso.
• EEPROM. Es una memoria no volátil, pero que es grabable y borrable eléctricamente. Se utiliza para
datos que no se deben perder aunque se quite la alimentación y para programa.
• FLASH EEPROM. Como la anterior es grabable y borrable eléctricamente, siendo no volátil (no se
borra si se quita la alimentación). La diferencia con la EEPROM normal es que no se puede grabar
dirección a dirección, sino que es necesario borrarla toda para poder volver a escribirla (o al menos se
tiene que borrar por bloques). Debido a esto no sirve para datos. Se utiliza para memoria de programa.
Tiene la ventaja sobre la EEPROM normal de ocupar mucho menos espacio y ser más barata que
aquella.

10.6.5. Juego de instrucciones y lenguajes de programación.


El número de instrucciones diferentes que admite un microprocesador es una característica importante del
mismo. Existen dos filosofías distintas, los procesadores CISC y los procesadores RISC.

Procesador CISC.
Significa “Complex Instruction Set Computer” e indica que el número de instrucciones diferentes es muy
elevado. Tienen la ventaja de que muchas operaciones se programan como una sola instrucción. El
inconveniente que tienen es que aprenderse todas esas instrucciones lleva bastante tiempo. Además, la
ejecución de las instrucciones es más lenta (al tener que decodificar un número grande de posibles
instrucciones).

14
Sistemas electrónicos. Tema 10. Circuitos secuenciales

Procesador RISC.
Significa “Reduced Instruction Set Computer” e indica que el número de instrucciones es muy pequeño. La
ventaja respecto del CISC es que esas pocas instrucciones se aprenden en muy poco tiempo. Además, la
ejecución de las instrucciones es muy rápida, pues la decodificación también lo es (hay pocos códigos de
instrucción diferentes que distinguir).
La estrategia RISC permite además aplicar el concepto de “pipelining” que consiste en que las instrucciones
consecutivas se ejecutan solapadas (mientras se lee una instrucción de memoria, a la vez se decodifica la
anterior y se ejecuta la anterior a ésta). Esto permite aumentar mucho la rapidez de ejecución.
Los microcontroladores se pueden programar de dos formas fundamentales: a bajo nivel en ensamblador, o con
un compilador de alto nivel (como C).

Lenguaje ensamblador.
Las instrucciones del programa que está en la memoria del microcontrolador son en realidad números binarios
de una longitud (nº de bits) determinada. Estos números binarios son los que interpreta el procesador para
decodificar y ejecutar la instrucción. A este formato de las instrucciones (el que entiende de hecho el
procesador) se le denomina código máquina. Cuando se realiza un programa para un microcontrolador se
podría escribir directamente los números binarios de las instrucciones, pero esto resulta extremadamente
engorroso y lento. En lugar de eso se ha creado el lenguaje ensamblador, que representa esas instrucciones en
forma de nemónicos mucho más fáciles de entender y de manejar por parte del programador.
El lenguaje ensamblador es una representación directa de las instrucciones en código máquina, pero permite
utilizar nemónicos para referirse a las instrucciones y etiquetas para referirse a los datos y a las direcciones.
Una vez escrito el programa en ensamblador el programa ensamblador lo traduce a código máquina (que puede
grabarse directamente en la memoria de programa del microcontrolador).

Lenguajes de alto nivel (compiladores).


Una alternativa al lenguaje ensamblador es la utilización de un lenguaje de alto nivel, como el C. El programa
se escribe en este lenguaje y posteriormente se traduce a código máquina mediante el programa compilador. En
muchos casos el compilador traduce el programa a ensamblador, y después el programa ensamblador lo traduce
a código máquina.
A diferencia del lenguaje ensamblador, cuando se utiliza un lenguaje de alto nivel no se sabe exactamente las
instrucciones del programa final. Por ejemplo en C se puede poner A=B+C. El compilador traduce esta línea en
las instrucciones necesarias para realizar la suma (que puede ser un número importante de instrucciones). En
función de lo bueno que sea el compilador el código máquina resultante puede ser más o menos largo o más o
menos rápido en su ejecución. El lenguaje de alto nivel tiene el inconveniente, por tanto, de que no se tiene
control total sobre las instrucciones del programa resultante. Debido a esto, cuando hay escasez de memoria de
programa puede ser conveniente escribir el programa en ensamblador (o al menos la parte más crítica del
mismo).
La ventaja de programar en un lenguaje de alto nivel es la rapidez y comodidad en el desarrollo del programa.
Si no hay problemas de memoria de programa es conveniente optar por esta forma de programación.

Herramientas de desarrollo.
Se llaman herramientas de desarrollo a aquellas herramientas hardware o software que permiten desarrollar un
circuito electrónico basado en microcontrolador. Éstas herramientas son:
• Programador. Es un equipo que sirve para introducir el programa en la memoria de programa del
microcontrolador. Este programador suele funcionar conectado a un PC por el puerto serie, USB o
paralelo. Desde el software del PC se escribe el programa, se ensambla y se manda al
programador, que lo graba en el microcontrolador.
• Simulador. Es un software que se ejecuta en el PC, y que permite simular la ejecución del
programa que se ha elaborado sin necesidad de grabarlo en el microcontrolador. Permite corregir
errores antes de programar el microcontrolador.
• Depurador residente. Consiste en un programa monitor que se encuentra en una parte de la
memoria ROM del microcontrolador, y que permite comunicar éste con un PC para poder
monitorizar el estado de las diversas variables mientras se ejecuta el programa que se ha grabado
en el microcontrolador. Permite depurar los errores que contiene el programa. El inconveniente
que tiene es que ocupa una parte de la memoria de programa (normalmente pequeña), y que utiliza
una interrupción. Esta interrupción no puede ser utilizada por el programa de usuario. Por otra

15
Sistemas electrónicos. Tema 10. Circuitos secuenciales

parte, si el programa que se está probando utiliza otras interrupciones, el funcionamiento puede no
ser exactamente igual al del sistema final, debido a la presencia del programa monitor (que
interrumpe cada cierto tiempo al programa de usuario para comunicar con el PC).
• Emulador en tiempo real. Es un circuito electrónico complejo (que tiene un microprocesador más
potente que el que se está programando) que emula totalmente el comportamiento del
microcontrolador. A este emulador se le pasa el programa, y éste reproduce exactamente lo que
haría el microcontrolador en el circuito en el que se conectara (para ello dispone de un terminal
con el patillaje idéntico al del microcontrolador). Al mismo tiempo permite monitorizar el estado
de todas las variables, por lo que permite depurar errores cómodamente. El mayor inconveniente
de los emuladores suele ser su elevado precio.

10.6.6. Ejemplo de microcontrolador comercial: Microcontroladores PIC.


Los microcontroladores PIC fabricados por Microchip constituyen una familia de microcontroladores de
distintas prestaciones. Existen tres gamas: gama baja, gama media y gama alta. Cada gama dispone de varios
modelos con distintas configuraciones (memoria, número de entradas y salidas, etc). Algunos de esos modelos
tiene memoria regrabable (Flash EEPROM), lo que permite fácilmente desarrollar una aplicación (modificando
el programa las veces que sea necesario). Estos modelos tienen su equivalente con memoria ROM u OTP
PROM.
Son microcontroladores RISC con arquitectura Harvard. Tienen muy pocas instrucciones y son muy fáciles de
utilizar.
Un microcontrolador de la gama media con memoria Flash EEPROM es el PIC16F84.

Características básicas del PIC16F84.


Las características fundamentales de este microcontrolador son:
• Longitud de las instrucciones de 14 bits.
• Longitud de los datos de 8 bits.
• Memoria de programa Flash EEPROM de 1024 palabras de 14 bits.
• Memoria RAM de datos de 68 bytes.
• Memoria EEPROM de datos de 64 bytes.
• Número de instrucciones 35.
• 13 líneas de entrada/salida digital configurables. PORT A (5 líneas), PORT B (8 líneas).
• Temporizador de 8 bits con prescaler de 8 bits. Configurable como temporizador o contador.
• Un solo vector de interrupción (dirección 04), pero 4 eventos distintos que pueden provocar dicha
interrupción:
– Timer 0 overflow (fin de cuenta del temporizador 0).
– Señal digital externa (RB0/Int).
– Interrupción por cambio en el PORT B.
– Fin de escritura en la EEPROM de datos.

Estructura simplificada del PIC16F84.


El siguiente diagrama muestra de forma simplificada la arquitectura interna del PIC16F84, incluyendo los
periféricos de que dispone:

16
Sistemas electrónicos. Tema 10. Circuitos secuenciales

10.6.7. Ejemplo de microcontrolador comercial: Microcontroladores ATmega328.


Los microcontroladores ATmega fabricados por ATMEL constituyen una familia de microcontroladores de
distintas prestaciones. El microcontrolador ATmega328 es el utilizado en la tarjeta Arduino Uno, que dispone
de software de programación y desarrollo gratuitos descargables desde internet.
Se trata de un microcontrolador de 8 bits. Tiene memoria regrabable (Flash EEPROM), lo que permite
fácilmente desarrollar una aplicación (modificando el programa las veces que sea necesario). Estos modelos
tienen su equivalente con memoria ROM u OTP PROM.
Son microcontroladores RISC con arquitectura Harvard. Tienen relativamente pocas instrucciones y son muy
fáciles de utilizar gracias a la utilización del entorno de programación Arduino, que permite programar el
dispositivo en un lenguaje de alto nivel similar al C++.

Características básicas del ATmega328.


• Arquitectura RISC Avanzada:
– 131 Instrucciones – Muchas de ellas se ejecutan en un solo ciclo
– 32 x 8 registros de trabajo de propósito general
– Hasta 20 MIPS de potencia de procesado a 20 MHz
– Multiplicador de 2 ciclos incluido
– Instrucciones de longitud 16 bits, datos de 8 bits.
• Segmentos de memoria no volátil de gran duración
– 16K Words de memoria Flash de programa auto-programable
– 1K Byte de EEPROM
– 2K Bytes de SRAM interna para datos
• Periféricos
– Dos Temporizadores/contadores de 8-bit con Preescalados separados y modo de
comparación

17
Sistemas electrónicos. Tema 10. Circuitos secuenciales

–Un Temporizador/contador de 16-bit con preescalado independiente y modos de


comparación y captura
– Contador de tiempo real con oscilador independiente
– Seis salidas PWM
– Convertidor Analógico-digital de 8-canales de 10-bit
– Puerto serie asíncrono programable (Programmable Serial USART)
– Puerto serie síncrono SPI maestro/esclavo
– Interface serie de 2 hilos compatible con I2C
– Perro guardián programable con oscilador independiente
– Interrupción y salida del modo sleep por cambio de entrada digital
- 26 vectores y fuentes de interrupción (temporizadores, entrada externa, puertos de
comunicación, etc.)
• Entradas/salidas digitales
– 23 líneas de entrada/salida digital configurables

Estructura simplificada del ATmega328.

18
Sistemas electrónicos. Tema 10. Circuitos secuenciales

Tarjeta y entorno de desarrollo Arduino.


La tarjeta Arduino Uno es una tarjeta simple basada en el microcontrolador ATmega328, que se programa
desde un PC a través del puerto USB, y que permite interactuar con el mundo físico a través de las entradas y
salidas digitales y analógicas, y las salidas PWM. Dispone de un entorno de programación que permite escribir
los programas y cargarlos en el microcontrolador para su ejecución.

La distribución de los elementos principales de la tarjeta de Arduino UNO es la que se muestra a continuación:

Como se puede observar, la tarjeta cuenta con varios pines hembra para poder conectar entradas y salidas
tanto analógicas como digitales, así como pines con la alimentación y GROUND. Además cuenta con un puerto
USB que permite conectar la placa con el PC. La placa toma su alimentación del conector USB (5 V), aunque
también se puede alimentar con una tensión de 7 a 12 V a través de un conector, ya que la placa incorpora un
regulador de 5 V. La tarjeta tiene las siguientes características:

• Conexión USB que permite la comunicación con un PC


• 14 pines de entrada/salida digital,
• 6 pines de salida PWM (compartidos con los 14 digitales, configurables).
• 6 pines de entrada analógica de 10 bits.
• Frecuencia de reloj de 16MHz

El entorno de desarrollo de la tarjeta Arduino es el mostrado en la figura:

19
Sistemas electrónicos. Tema 10. Circuitos secuenciales

El programa se escribe en un fichero de texto, que se edita con el propio entorno de desarrollo. Una vez escrito
el programa, se puede compilar y cargar en la tarjeta de Arduino, que comienza a ejecutarlo inmediatamente
(botón con la flecha horizontal).

El código de un programa para la tarjeta de Arduino tiene una estructura muy simple:
//declaración de variables, como por ejemplo:
int velocidad;

void setup() {
// En esta función se pone lo que se ejecuta solo una vez al //
principio
}

void loop() {
// En esta función se pone lo que se ejecuta como un bucle
//infinito
}

El siguiente ejemplo de programa de Arduino produce un parpadeo en la salida digital 13 en la que hay
conectado un LED:

// se declara la variable led, como entera, y se le da el valor 13


int led = 13;

// la función se setup se ejecuta una sola vez:


void setup() {
// se inicializa el pin digital 13 como salida
pinMode(led, OUTPUT);
}

// la función loop se ejecuta sin parar (cuando termina empieza de nuevo)


void loop() {
digitalWrite(led, HIGH); // enciende el LED poniendo un 1 en el pin 13
delay(1000); // espera 1 segundo
digitalWrite(led, LOW); // apaga el LED poniendo un 0 en el pin 13
delay(1000); // espera 1 segundo
}

Se pueden definir y utilizar los siguientes tipos de variables:


• byte: entero de 8 bits, que toma valores entre -128 y 127
• int: entero de 16 bits, que toma valores entre -32768 y 32767
• long: entero de 32 bits
• float ó double: números en coma flotante de 32 bits
• boolean: variables de 1 solo bit, que valen 0 ó 1 (FALSE ó TRUE)
• char: un carácter de 1 byte
• string: una cadena o lista de caracteres

El lenguaje de programación es muy similar al C++, usándose por ejemplo para el control del flujo del
programa los comandos "if" y "else", o los bucles "for" o "while".

Programa de ejemplo:
El siguiente es un ejemplo de programa para atacar un puente en H de transistores conectado a un motor de
continua. El programa lee la entrada analógica 0 (donde se conecta un potenciómetro para dar una tensión entre
0 y 5V), y aplica una tensión media al motor que depende del valor de esa entrada analógica. Si la entrada
analógica es de 2.5 V (en ese caso el convertidor lee un valor de 512), la tensión que llega al motor será 0. Si la
entrada es de 5 V (valor leído por el convertidor de 1023), la tensión que llega al motor será máxima y positiva,
mientras que si la entrada es de 0 V (valor leído por el convertidor de 0), la tensión que llega al motor será
máxima y negativa. Como puente en H se utiliza el integrado comercial L298, que contiene dos puentes en H

20
Sistemas electrónicos. Tema 10. Circuitos secuenciales

completos (para atacar a dos motores), y que se muestra en la figura. Se utilizará la salida digital 10 para atacar
la rama 2 del puente en H de la izquierda, conectándola al pin In2. Con esa salida se pondrá a conducir el
transistor de abajo (salida a 0) o el de arriba (salida a 1), según se quiera tensión positiva o negativa en el
motor. La salida digital 9 se utilizará como salida PWM, y atacará la rama 1 del puente en H, conectándola al
pin In1, produciendo la conmutación en PWM de los dos transistores de esa rama. El motor se conectaría entre
los pines OUT1 y OUT2. La salida PWM produce un ciclo de trabajo de 0 si se escribe un 0, un ciclo de
trabajo de 0.5 si se escribe 127, y un ciclo de trabajo de 1 si se escribe 255 (el valor más alto en 8 bits). La
entrada analógica del Arduino lee un valor de 0 si la tensión de entrada es 0 V, lee 512 si hay 2.5V y 1023
(valor máximo en 10 bits) si hay 5 V.

int potenciometro; // define una variable tipo int


const int In1=9;
const int In2=10;
void setup() {
}

void loop() {
potenciometro = analogRead(A0); //lee la entrada analógica
if (potenciometro>512) { // tensión positiva en el motor
analogWrite(In1, (potenciometro-512)/2);// escribe la salida PWM
del pin 9
digitalWrite(In2,LOW); //conduce el trans.de abajo de la rama 2
}
if (potenciometro<512) { // tensión negativa en el motor
analogWrite(In1, potenciometro/2);// escribe la salida PWM del
pin 9
digitalWrite(In2,HIGH); //conduce el trans.de arriba de la rama 2
}
}

21

También podría gustarte