Interrupciones
Introducción al concepto de interrupción
Pregunta sencilla: ¿Qué hace un microcontrolador mientras espera a que ocurra
algo?
Introducción al concepto de interrupción
Generalmente, ejecuta un bucle continuo revisando si algo cambió, por ejemplo:
● ¿El botón fue presionado?
● ¿Llegó un dato por el puerto serie?
● ¿El sensor terminó de medir?
A esto se lo llama polling o consulta continua, y tiene un problema evidente: consume
tiempo del procesador, incluso cuando no está ocurriendo nada.
Definición
Una interrupción es un evento que detiene momentáneamente la ejecución normal del programa para
que el microcontrolador atienda una tarea urgente, y luego retome su actividad anterior.
Podemos pensarlo con una analogía cotidiana:
● Estás cocinando y suena el timbre.
● Dejas lo que estás haciendo, vas a abrir la puerta (atiendes el evento), y vuelves a la cocina.
● No necesitas revisar cada segundo si alguien tocará el timbre: simplemente vas cuando ocurre.
De la misma manera, un microcontrolador interrumpe su flujo normal y ejecuta una rutina de servicio (ISR,
Interrupt Service Routine), que se encarga de responder al evento.
Tipos de interrupciones
2 tipos de interrupciones
a) Interrupciones internas b) Interrupciones externas
Son generadas por periféricos o eventos Son provocadas por señales que vienen del
internos del microcontrolador. Por ejemplo: exterior, normalmente desde pines configurados
● Un temporizador llega a su cuenta máxima para este fin. Ejemplo clásico: un botón
● El ADC termina de convertir una señal conectado a un pin de interrupción.
analógica.
Cuando el pin detecta un flanco ascendente o
● Ocurre un error aritmético o de acceso a
memoria. descendente, el microcontrolador genera una
interrupción externa.
Estas interrupciones permiten que el
microcontrolador realice tareas de forma periódica Estas son muy útiles para responder a eventos
o automática sin depender del código principal. físicos en tiempo real.
Arquitectura y flujo de una interrupción
Cómo ocurre internamente una interrupción.
Cada microcontrolador tiene un componente llamado controlador de interrupciones, que se encarga de recibir
las señales y decidir qué rutina ejecutar.
El flujo general es el siguiente:
1. Ocurre un evento (por ejemplo, se presiona un botón).
2. El controlador de interrupciones detecta el evento.
3. El CPU detiene la ejecución actual y guarda el contexto (program counter, registros, etc.).
4. Se salta a una dirección de memoria específica, donde está la rutina asociada (la ISR).
5. Se ejecuta la ISR: una función escrita por el programador para atender el evento.
6. Cuando termina, el CPU restaura el contexto y continúa justo donde estaba.
La tabla de vectores de interrupción contiene todas las direcciones de las ISRs. Cada tipo de interrupción tiene
su entrada en esa tabla.
¿Qué hace el NVIC?
El NVIC es el cerebro que administra todas las interrupciones del sistema. Se encarga de:
1. Recibir las señales de los periféricos o pines externos.
2. Identificar qué interrupción ocurrió.
3. Aplicar la prioridad correspondiente.
4. Guardar el contexto del CPU (registros, contador de programa, etc.).
5. Redirigir la ejecución a la rutina adecuada (ISR).
6. Restaurar el contexto cuando la ISR termina.
En otras palabras: el NVIC es quien organiza el tráfico de interrupciones dentro del
microcontrolador.
Cada interrupción tiene un número identificador llamado vector. Todos esos vectores están ordenados en una tabla de vectores,
ubicada al inicio de la memoria Flash (dirección 0x00000000).
Esa tabla contiene direcciones de memoria que apuntan a las rutinas (ISRs). El primer elemento de la tabla no es una interrupción,
sino el valor inicial del Stack Pointer, y a partir de ahí, cada posición corresponde a una fuente de interrupción.
Comunicación UART
Comunicación serial
Definition
In data transmission, serial
communication is the process of sending
data one bit at a time, sequentially, over a
communication channel
Serial communication is used in most
computer networks, where the cost of
cable and difficulty of synchronization
make parallel communication impractical.
Serial computer buses have become
more common at shorter distances, as
improved signal integrity and transmission
speeds.
Examples
● ARINC 818 Avionics Digital Video Bus
● Atari SIO (Joe Decuir credits his work on Atari SIO as the basis of USB)
● ccTalk Used in the money transaction and point -of-sale industry
● DMX512 control of theatrical lighting
● Ethernet
● Fiber Distributed Data Interface
● Fibre Channel (high-speed, for connecting computers to mass storage devices)
● FireWire
● HDMI
● HyperTransport
● InfiniBand (very high speed, broadly comparable in scope to PCI)
● I²C multidrop serial bus
● MIDI control of electronic musical instruments
● MIL-STD-1553A/B
● Morse code telegraphy
● SDI-12 industrial sensor protocol
● Shift Register with serial-in and serial-out configuration
● SONET and SDH (high speed telecommunication over optical fibers)
● S/PDIF and AES3 audio communication protocols
● SPI
● Universal Serial Bus (for connecting peripherals to computers)
● UNI/O multidrop serial bus
● 1-Wire multidrop serial bus
universal asynchronous receiver-transmitter
UART
Definition
Is a “peripheral” device for
asynchronous serial
communication in which the data
format and transmission speeds
are configurable. It sends data bits
one by one, from the least
significant to the most significant,
framed by start and stop bits so
that precise timing is handled by
the communication channel.
A UART is usually implemented in
an integrated circuit (IC) and used
for serial communications over a
computer or peripheral device
serial port.
One or more UART peripherals
are commonly integrated in
microcontroller chips.
UART is asynchronous
Asynchronous serial communication
Asynchronous serial communication is a form of serial communication in which the
communicating endpoints' interfaces are not continuously synchronized by a
common clock signal.
Synchronization (clock recovery) is done by data-embedded signal: the data
stream contains synchronization information in a form of start and stop signals set
before and after each payload transmission.
Transmitting and receiving serial data
UART es simple y utiliza solo tres cables entre el transmisor, el receptor para transmitir y ambos extremos tienen una
conexión a tierra. La comunicación en UART puede ser:
● simplex: los datos se envían en una sola dirección
● semidúplex: cada extremo se comunica, pero solo uno al mismo tiempo
● dúplex completo: ambos extremos pueden transmitir simultáneamente.
En UART, los datos se transmiten en forma de tramas.
UART funcionamiento
Cables de UART
UART tiene solo 3 cables:
● Tx: transmisor
● Rx: receptor
● GND: tierra común
El Tx de un dispositivo es
conectado en el Rx del otro.
Data
The UART interface does not use a clock signal to
synchronize the transmitter and receiver devices; it
transmits data asynchronously.
Instead of a clock signal, the transmitter generates
a bitstream based on its clock signal while the
receiver is using its internal clock signal to
sample the incoming data. The point of
synchronization is managed by having the same
baud rate on both devices.
Failure to do so may affect the timing of sending and
receiving data that can cause discrepancies during
data handling. The allowable difference of baud rate
is up to 10% before the timing of bits gets too far off.
Packets
In UART, the mode of transmission is in the form of a packet. The piece that connects the transmitter
and receiver includes the creation of serial packets and controls those physical hardware lines. A packet
consists of a start bit, data frame, a parity bit (optional), and stop bits.
Baudios
La tasa de baudios indica la velocidad a la que se transfieren los datos en un
canal de comunicación. Cuantifica el número de cambios de señal, como
desplazamientos de tensión o impulsos, por segundo, y se suele denotar como
«baudios» o «Bd». Esencialmente, mide cuántas veces la señal altera su estado
en un segundo.
Info bits
Start Bit:The UART data transmission line is normally held at a high voltage level when it’s not transmitting data.
To start the transfer of data, the transmitting UART pulls the transmission line from high to low for one (1) clock
cycle. When the receiving UART detects the high to low voltage transition, it begins reading the bits.
Data Frame: The data frame contains the actual data being transferred. It can be five (5) bits up to nine (9) bits
long.
Parity: Parity describes the evenness or oddness of a number. The parity bit is a way for the receiving UART to
tell if any data has changed during transmission.
Stop Bits: To signal the end of the data packet, the sending UART drives the data transmission line from a low
voltage to a high voltage for one (1) to two (2) bit(s) duration.
UART hardware
Hardware P1
Registers
Transmit Register: Guarda temporalmente el byte/datos que
van a ser enviados por el UART. Cuando está lleno, el
hardware lo pasa al shift register para convertirlo en una
secuencia de bits.
Receive Register: Guarda el byte que acaba de llegar del shift
register receptor.
Shift Register: Convierte datos paralelos en serie (al
transmitir) o serie en paralelos (al recibir). Es el que
realmente “manda” o “reconstruye” los bits en la línea TX o
RX.
Clock Generator: Crea los pulsos de tiempo que sincronizan
la velocidad de transmisión y recepción (baud rate). Sin él, los
bits no tendrían ritmo ni sincronía.
Registers
Preguntas simples:
● que tipo de registro, respecto a
carga y salida de datos es el
shift register de la parte
transmisora?
● ?Cómo funciona un flip flop D?
● ?que están haciendo esos
mux?
● ?por qué usar flip flops y no
latches?
Steps of UART Transmission
First: The transmitting UART receives data in parallel from
the data bus.
Second: The transmitting UART adds the start bit, parity
bit, and the stop bit(s) to the data frame.
Third: The entire packet is sent serially starting from start
bit to stop bit from the transmitting UART to the receiving
UART. The receiving UART samples the data line at the
preconfigured baud rate.
Fourth: The receiving UART discards the start bit, parity
bit, and stop bit from the data frame.
Fifth: The receiving UART converts the serial data back into
parallel and transfers it to the data bus on the receiving end.
Conclusiones
Conclusiones
● El UART permite la comunicación serie asíncrona entre dispositivos sin necesidad de reloj
compartido.
● Sus bloques principales (transmit, receive, shift register y clock generator) trabajan juntos
para convertir datos paralelos en serie y viceversa.
● Es una interfaz simple, confiable y ampliamente usada en sistemas embebidos para
conectar microcontroladores, sensores y módulos de comunicación.
● Comprender su funcionamiento es clave para diseñar y depurar enlaces de datos en
proyectos mecatrónicos.
● Se usa principalmente cuando tenemos 2 dispositivos cercanos o uno al lado del otro.
SPI
Un poco de historia
El protocolo SPI fue desarrollado por Motorola a comienzos de los años 80, casi al mismo tiempo que Philips
lanzaba I²C.
SPI nació con el objetivo de ofrecer una comunicación sencilla, rápida y full-duplex entre un
microcontrolador maestro y uno o varios periféricos esclavos.
¿Qué es SPI?
SPI (Serial Peripheral Interface) es un protocolo de comunicación serial y síncrono que utiliza cuatro líneas
principales para intercambiar datos entre un maestro y uno o varios esclavos.
SPI pines
● SCK (Serial Clock): Línea de señal de reloj. El dispositivo maestro
genera esta señal para sincronizar la transferencia de datos
entre todos los dispositivos en el bus.
● MOSI (Master Out Slave In): Línea de salida de datos del maestro
y entrada de datos para el esclavo (periférico). El maestro envía
datos al esclavo a través de esta línea.
SPI pines
● MISO (Master In Slave Out): Línea de entrada de datos
para el maestro y salida de datos del esclavo. El esclavo
envía datos de vuelta al maestro a través de esta línea.
● SS (Slave Select) / CS (Chip Select): Línea de selección de
esclavo. El maestro utiliza esta línea (normalmente una por
cada esclavo) para indicar con qué dispositivo periférico
específico desea comunicarse en un momento dado,
activándolo (usualmente mediante una señal baja o low).
Un master varios slaves
Una de las principales cualidades de SPI es que el
master puede tener varios slaves, los 3 primeros
pines (SCLK, SDO y SDI) son los mismos entre el
master y el slave. El cuarto pin (CS) tiene que ser
exclusivo para cada slave que exista en el sistema.
Cómo funciona la comunicación SPI
La comunicación es síncrona y full-duplex, mientras el maestro envía bits por MOSI, el esclavo
responde simultáneamente por MISO.
1. El maestro pone CS (Chip Select) del esclavo deseado en bajo.
2. Genera pulsos de reloj por SCK.
3. En cada flanco de reloj, se transfiere un bit por MOSI y otro bit por MISO.
4. Después de enviar/recibir todos los bits (típicamente 8), el maestro pone CS en alto para
finalizar.
Es literalmente un intercambio simultáneo de bits: cada ciclo de reloj mueve un bit en ambas
direcciones.
Comunicacion con un slave
El selector de esclavo siempre esta en 1, cuando
nos queremos comunicar con un esclavo en
particular cambiamos el 1 de su pin por 0
Ademas, es un protocolo de facto (no tiene un bit
frame que divida los paquetes de datos)
Modos
1. CPOL (Clock Polarity) → Polaridad del
reloj
2. CPHA (Clock Phase) → Fase del reloj
Estos dos bits determinan en qué flanco del
reloj (rising o falling edge) se muestrean y
cambian los datos, y cuál es el nivel inactivo
del reloj (alto o bajo).
Cómo interpretar gráficamente
Imaginemos que el reloj (SCK) y la línea de datos (MOSI) trabajan así:
● CPOL = 0 → reloj en bajo cuando inactivo
● CPOL = 1 → reloj en alto cuando inactivo
● CPHA = 0 → se lee el dato en el primer flanco
● CPHA = 1 → se lee el dato en el segundo flanco
Esto define cuándo el receptor debe leer el bit que el transmisor coloca en MOSI o MISO.
Transmision y recepcion
Daisy chain architecture
Resumen de cualidades
1) es sincrono
2) es master - slave (varios slaves)
3) es full duplex
4) es un protocolo de facto (no tiene un bit frame que divida los
paquetes de datos)
Ventajas y desventajas
Aplicaciones típicas
● Sensores de alta velocidad (giroscopios, ADCs, DACs)
● Pantallas LCD/OLED
● Memorias Flash o EEPROM SPI
● Lectores de tarjetas SD
● Módulos de radio o Wi-Fi (NRF24L01, ESP8266, etc.)
I2C
Un poco de historia
● Creado por Philips Semiconductors (hoy NXP) en 1982.
● La motivación era crear un protocolo simple, económico y con pocas líneas para conectar
múltiples circuitos integrados dentro de un televisor.
● A diferencia de SPI (Motorola), que priorizaba la velocidad, I²C fue diseñado para reducir:
Cables
Pines
Costos
Complejidad de PCB
Hoy I²C es el estándar dominante para sensores en sistemas embebidos debido a su
simplicidad y estructura basada en direcciones.
¿Qué es I²C?
I²C (Inter-Integrated Circuit) es un protocolo serial, síncrono y half-duplex que permite conectar múltiples dispositivos en un
bus compartido usando solo:
● SDA – Serial Data
● SCL – Serial Clock
Los dispositivos pueden ser:
● Maestro(s): generan el reloj y controlan el bus.
● Esclavos: responden cuando se los direcciona.
Cada dispositivo tiene una dirección única, generalmente de 7 bits. Es ideal para sensores, memorias EEPROM y
componentes de baja velocidad.
Topología del bus I2C
Topología del bus I2C
Pines
El pin SCL (Serial Clock) proporciona el pulso de reloj para sincronizar la
comunicación, mientras que el pin SDA (Serial Data) es el canal a través del cual se
envían y reciben los datos.
● SCL (Reloj): Es la línea de reloj que genera pulsos a intervalos regulares para
sincronizar la transferencia de datos entre los dispositivos conectados al bus.
● SDA (Datos): Es la línea de datos que se utiliza para enviar y recibir información
entre los dispositivos. Cada dispositivo en el bus tiene una dirección única, y los
datos se envían a una dirección específica.
Características eléctricas
Dos líneas abiertas con resistencias pull-up a Vcc.
● Resistencias típicas: 4.7 kΩ – 10 kΩ
● Velocidades:
○ Standard Mode: 100 kHz
○ Fast Mode: 400 kHz
○ Fast Mode Plus: 1 MHz
○ High-Speed Mode: 3.4 MHz
● Comunicación half-duplex (se envía o se recibe, no ambos a la vez).
El bus puede tener varios maestros (multi-master), aunque normalmente se usa uno.
Funcionamiento
I2C slave address
Una dirección de esclavo (slave
address) es un identificador único
asignado a un dispositivo secundario
(esclavo o dispositivo) en una red o
bus de comunicación que utiliza una
arquitectura maestro/esclavo. Esta
dirección permite al dispositivo
principal (maestro o controlador)
seleccionar y comunicarse con un
dispositivo específico entre varios que
están conectados al mismo bus de
comunicación.
I2C slave address
El número de dispositivos esclavos que se pueden conectar a
un bus I2C depende del esquema de direccionamiento
utilizado y de las limitaciones físicas del hardware.
Límites teóricos
El estándar I2C define dos esquemas de direccionamiento:
Direcciones de 7 bits: Este es el método más común. Permite
teóricamente 128 direcciones posibles (de 0 a 127). Sin
embargo, algunas de estas direcciones están reservadas para
fines especiales (como la llamada general o modos de alta
velocidad), lo que deja aproximadamente 112 direcciones
disponibles para dispositivos esclavos.
Direcciones de 10 bits: Este esquema es menos común pero se
define para sistemas más grandes. Proporciona hasta 1024
direcciones posibles para dispositivos.
I2C slave address - Límites prácticos
En la práctica, el número real de dispositivos suele ser mucho menor
debido a limitaciones físicas:
● Capacitancia del bus: El factor limitante más importante es la
capacitancia total del bus. El estándar I2C especifica una
capacitancia máxima total de 400 pF (picofaradios) para el bus,
tanto en modo estándar como rápido.
● Direcciones fijas de los dispositivos: Muchos chips comerciales
solo permiten seleccionar unas pocas direcciones (a menudo 2, 4 u
8) mediante pines de hardware.
● Longitud del cable: Cuanto más largo sea el cable, mayor será la
capacitancia, lo que reduce el número de dispositivos que se
pueden conectar y limita la velocidad de comunicación.
En resumen, aunque teóricamente puedes tener más de cien dispositivos,
en un entorno real y sin hardware adicional (como repetidores o
multiplexores), es más realista esperar conectar entre 20 y 30 dispositivos
o menos, dependiendo de los factores mencionados anteriormente.
Data frames
Bitframes
Los bitframes de I2C se refieren a la estructura o el formato de los datos que se
transmiten bit a bit a lo largo del bus durante una comunicación. Cada mensaje I2C
está compuesto por una secuencia de estas tramas (frames), que garantizan que los
datos se dirijan correctamente y se reciban sin errores.
La comunicación I2C es orientada a bytes (8 bits), pero cada byte va seguido de un
bit adicional de reconocimiento, lo que hace que cada "paquete" de comunicación
tenga 9 bits de longitud.
Bitframes
● Condición de Inicio (START Condition): La comunicación comienza cuando el dispositivo
maestro genera una condición de inicio para reclamar el control del bus. Esto se define por una
transición del nivel alto a bajo en la línea de datos (SDA) mientras la línea de reloj (SCL)
permanece en nivel alto.
● Trama de Dirección (Address Frame): Después de la condición de inicio, el maestro envía la
dirección del dispositivo esclavo con el que quiere comunicarse. 7 u 10 bits de dirección: Los
primeros bits (comúnmente 7) contienen la dirección única del esclavo objetivo.
● 1 bit de Lectura/Escritura (R/W): El bit inmediatamente después de la dirección indica si el
maestro desea escribir datos en el esclavo (R/W = 0) o leer datos del esclavo (R/W = 1).
Bitframes
● Bit de Reconocimiento (ACK/NACK Bit): Después de que el maestro envía la
trama de dirección (y el bit R/W), libera la línea SDA. El esclavo cuya dirección
coincide con la enviada debe responder con un bit de reconocimiento (ACK).
○ ACK (Acknowledge): El esclavo jala la línea SDA a bajo durante este pulso de reloj, indicando que
ha recibido la dirección correctamente y está listo para comunicarse.
○ NACK (No Acknowledge): Si la línea permanece en alto, significa que no hay un esclavo con esa
dirección, o que el esclavo está ocupado o no puede comunicarse, y la comunicación se
interrumpe.
● Trama(s) de Datos (Data Frame(s)): Una vez establecido el enlace, el maestro (o
el esclavo, si es una operación de lectura) comienza a enviar o recibir datos en
bloques de 8 bits (un byte).
○ Cada byte de datos es seguido por su propio bit de ACK/NACK por parte del receptor para
confirmar una recepción exitosa antes de que se envíe el siguiente byte.
Bitframes
● Condición de Parada (STOP Condition) :La comunicación finaliza cuando el
maestro genera una condición de parada. Esto ocurre cuando la línea SDA pasa
de bajo a alto mientras la línea SCL está en nivel alto, revirtiendo la condición de
inicio. Esto libera el bus para que otros dispositivos maestros puedan usarlo.
Funcionamiento del protocolo I²C
La comunicación se divide en etapas muy 3. ACK/NACK
específicas:
El esclavo baja SDA en el siguiente pulso de reloj → ACK
Si no responde → NACK
1. START Condition
4. Transferencia de datos
El maestro baja SDA mientras SCL está en alto →
esto indica inicio. Se envían bytes uno a uno.
Cada byte es seguido por un ACK/NACK.
2. Dirección + bit R/W
5. STOP Condition
Se envía la dirección (7 bits) + 1 bit que indica:
El maestro sube SDA mientras SCL está en alto → fin de
● 0 → escritura comunicación.
● 1 → lectura
Modos de I2C
Modo eléctrico: líneas abiertas y resistencias pull-up
En I²C, ningún dispositivo “empuja” el nivel alto.
Las líneas SDA (datos) y SCL (reloj) están configuradas como open-drain (salida a
tierra).Esto significa:
● Los dispositivos solo pueden poner el bus en nivel bajo (0).
● Para tener un nivel alto (1), se necesitan resistencias pull-up conectadas a
Vcc.
Así, cuando nadie habla, las líneas están en “1” gracias a las pull-up, y cuando
alguien transmite un “0”, baja la línea a tierra.
Si usas resistencias muy altas → la subida del pulso es lenta → errores a altas
velocidades.
Si usas resistencias muy bajas → aumenta el consumo de corriente → riesgo de dañar
dispositivos.
Todo esto tiene que ver tambien con el valor de impedancia y capacitancia del sistema
I2C - hardware level
I2C - drenaje abierto
Un MOSFET con drenaje abierto significa que su
terminal de drenaje (D) no está conectado
internamente a ninguna fuente de voltaje dentro
del chip. Solo está conectado hacia el bus (SDA o
SCL), y el voltaje alto lo aporta una resistencia
externa pull-up.
En otras palabras: El transistor solo puede
conducir hacia tierra (nivel 0), pero no puede
generar un nivel alto (1) por sí mismo. Cuando el
MOSFET se apaga, deja la línea “flotante”, y es la
resistencia pull-up la que la lleva a nivel alto.
I2C y capacitancia - drenaje abierto
Cuando nadie transmite (todos los
MOSFET están apagados):
→ la resistencia tira la línea hacia Vcc →
nivel lógico alto (1).
Si cualquiera de los dispositivos “pone”
un 0 (enciende su MOSFET):
→ la línea se conecta a GND → nivel
bajo (0).
Rol de la resistencia pull-up
El “tirón hacia arriba” (pull-up) hace posible el nivel alto. Sin ella, la línea quedaría
flotando: ni 0 ni 1, y los dispositivos no podrían sincronizarse. Por eso:
● El MOSFET baja la línea (0) → “ON”.
● La resistencia sube la línea (1) → cuando el MOSFET está “OFF”.
Capacitancia
Toda línea física (un cable, una pista en PCB, un pin, incluso el encapsulado) tiene
una pequeña capacitancia parasitaria.
Cuando conectas varios dispositivos I²C en paralelo sobre las mismas líneas SDA y
SCL, cada uno aporta un poco de capacitancia.
La capacitancia total del bus (Cbus) es la suma de todas esas pequeñas
capacitancias.
Cómo afecta esto al funcionamiento del bus
En I²C las líneas SDA y SCL son open-drain, y que las resistencias pull-up son las
encargadas de hacer subir el nivel lógico de la señal (de 0 → 1).
Aquí entra la circuitos I:
La combinación resistencia pull-up (R) + capacitancia del bus (Cbus) forma un
circuito RC,
que tiene una constante de tiempo τ = R × C. Esto determina qué tan rápido puede
“subir” la señal cuando el transistor deja de tirar a tierra.
La forma del pulso (subida lenta por RC)
Cuando el MOSFET suelta la línea (pasa de 0 → 1), el voltaje no sube instantáneamente, sino de forma
exponencial:
● Si C es grande (muchos dispositivos o cables largos) → la subida es más lenta.
● Si R es grande (resistencias altas) → la subida también es más lenta.
Resultado:
● El flanco ascendente se deforma (pierde su forma cuadrada),
● y puede que el micro lea el nivel alto tarde o incorrectamente, provocando errores o “clock
stretching”.
Cómo se compensa
Se puede jugar con dos parámetros: R y C
● Reducir R (resistencia pull-up más baja) → más corriente, pero subida más
rápida. Ejemplo: pasar de 10 kΩ → 2.2 kΩ acelera el flanco.
● Reducir C (menos capacitancia) → usar cables más cortos o menos dispositivos
● Usar drivers o buffers de bus I²C → chips como el P82B96 o PCA9600 permiten
extender el bus y manejar más capacitancia.
Ejemplo práctico - ejem
Supongamos:
● R = 4.7 kΩ
● C = 200 pF
El bus necesita al menos 3–5 τ (~5 μs) para subir completamente a Vcc.
A 100 kHz (periodo 10 μs) todavía alcanza.
Pero a 400 kHz (periodo 2.5 μs) ya no le da tiempo, la señal es distorsionada, lectura
errónea.
I2C vs SPI
I2C vs SPI
Cómo se comunica los
microcontroladores
EC2
Comunicación: cuando los
circuitos aprenden a hablar
¿Qué pasa si dos microcontroladores quieren trabajar juntos, pero
hablan idiomas distintos?
buscar: protocolo de comunicación
Comunicar datos entre dispositivos es tan esencial como que un
robot pueda coordinar sus sensores, motores y cerebros. Sin
comunicación, no hay inteligencia distribuida.
¿Qué es la comunicación digital?
Definición simple:
“Comunicar digitalmente es transferir información entre dos dispositivos usando señales eléctricas que
representan 1s y 0s.”
Explicación conceptual:
● Transmisor: quien envía los datos.
● Receptor: quien los recibe.
● Medio físico: el cable o línea de comunicación (puede ser un solo cable o varios).
● Protocolo: el conjunto de reglas que define cómo se envían esos bits (orden, velocidad, sincronización).
Tipos de comunicación: el “idioma”
entre los chips
🔹 a) Comunicación Serial
● Los bits se envían uno detrás de otro, por un mismo cable o línea.
● Ventajas: menos cables, simple, muy usada.
● Ejemplo: UART, I²C, SPI.
● Analogía: una persona hablando por teléfono (uno habla, el otro escucha).
🔹 b) Comunicación Paralela
● Se envían varios bits al mismo tiempo (varios cables).
● Ventajas: más rápida en teoría, pero más costosa.
● Analogía: varias personas hablando al mismo tiempo en canales distintos.
● Ejemplo: antiguos buses de datos en microprocesadores o pantallas LCD grandes.
Protocolo Tipo Nº de cables Características Ejemplo
UART (Serial Serial 2 (TX, RX) Comunicación punto Comunicación entre
Asíncrona) a punto, sin reloj PC y STM32 (puerto
compartido. Simple serie).
y universal.
I²C Serial 2 (SDA, SCL) Bus compartido Sensores de
(Inter-Integrated maestro–esclavo. temperatura,
Circuit) Permite conectar acelerómetros,
varios sensores con EEPROM.
solo dos cables.
SPI (Serial Serial 4+ Comunicación rápida Memorias Flash,
Peripheral maestro–esclavo, pantallas TFT.
Interface) con líneas separadas
para reloj y datos.
USB (Universal Serial 4 Estándar de Programación del
Serial Bus) comunicación con STM32 desde la
PC, alimenta y compu.
comunica.
CAN (Controller Serial 2 Diseñado para Redes de sensores
Area Network) ambientes en robots o autos.
industriales o
automotrices. Alta
fiabilidad.