You are on page 1of 49

El bus I2C Microcontroladores

EL BUS INTER-INTEGRATED CIRCUITS


I2C

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

EL BUS I2C
• Para simplificar la interconexión de dispositivos al microprocesador, Philips
desarrolló un sencillo bus bidireccional basado en dos hilos por el que se
trasmiten los datos vía serie y lo llamó El Bus I2C.

• EL Bus I2C (Inter- Integrated Circuits) fue desarrollado al principio de los 80’s.
Su propósito original fue el de proporcionar una manera fácil de conectar un
CPU a los chips periféricos en un equipo de TV.

EL PROBLEMA A RESOLVER:
• Los dispositivos periféricos en sistemas embebidos se conectan al
mControlador como dispositivos de E/S mapeados en memoria usando las
líneas paralelas del bus de dirección y de datos. Esto produce una gran
cantidad de pistas en el PCB para enrutar las líneas de direcciones y de
datos, sin mencionar un número de decodificadores de direcciones y lógica
adicional para conectar todo.
• Muchas líneas de control implican que el sistema sea más susceptible a
perturbaciones por Interferencia Electromagnética (EMI) y Descarga
Electrostática (ESD).

M.C. Carlos E. Canto Quintal


El Bus I2C Microcontroladores

Las características más importantes del bus I2C son:


Comunicación serial, utilizando un conductor para manejar el timming (SCL) (pulsos de
reloj) y otro para intercambiar datos (SDA), que transportan información entre los
dispositivos conectados al bus.

Las líneas SDA (Serial Data) y SCL (Serial Clock) etán conectadas a la fuente de alimentación a
través de las resistencias de pull-up. Cuando el bus está libre, ambas líneas están en nivel alto.

Los dispositivo puede ser considerado como Mastero (Master) o esclavo (Slave).

El Maestro es el dispositivo que inicia la transferencia en el bus y genera la señal de Clock.

El Slave (esclavo) es el dispositivo direccionado.

SDA
Maestro
SCL

Esclavo1 Esclavo2 Esclavo3

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Transmisión de bits
– Los bits de datos van por SDA
– Por cada bit de información es necesario un pulso de SCL
– Los datos sólo pueden cambiar cuando SCL está a nivel bajo

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

• Los datos transitan en la bajada del reloj


• El dato es recibido en el borde de bajada del reloj
• El bit más significativo se envía primero
• El nodo que recibe debe manejar un acknowledge (bajo en SDA)
después de completado el byte
• El nodo maestro siempre genera el reloj

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Las características más importantes del bus I2C son:

Cada dispositivo es reconocido por una única dirección (si es un


microcontrolador, LCD, memoria o teclado) y cualquiera puede operar como
transmisor o receptor de datos, dependiendo de la función del dispositivo.

Un display es solo un receptor de datos mientras que una memoria recibe y


transmite datos.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Las características más importantes del bus I2C son:

Trasferencia de datos:

Los datos y direcciones que se transmiten


por SDA son de 8 bits.

.
Tras cada bloque debe recibirse una señal
de reconocimiento.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Las características más importantes del bus I2C son:

La cantidad de dispositivos que se pueden conectar al


bus está limitada, solamente, por la máxima capacidad
permitida de 400 pF.

El bus permite la conexión de varios Masters, ya que


incluye un detector de colisiones.

El protocolo de transferencia de datos y direcciones


posibilita diseñar sistemas completamente definidos por
software.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Las características más importantes del bus I2C son:

• La especificación original, o modo de estandar, fue para


transferencia de datos hasta 100 Kbps.

• El bus serial I2C ha sido extendido para soportar


velocidades de hasta 3.4 Mbits/s. Combinado con una
función de desplazamiento del nivel de voltaje, en modo
High-speed (Hs-mode) ofrece una solución ideal para
los sistemas de tecnología mezclada, donde las altas
velocidades y la variedad de voltajes (5 V, 3 V o menor)
son comúnmente usados.

• El reloj determina la velocidad de transmisión de los


datos.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Las características más importantes del bus I2C son:

Los modos de transferencia de datos del bus I2C

– Modo Estándar (S-mode) aproximadamente a 100


kBits/Seg.
– Modo Rápido (F-mode) aproximadamente a
400kbits/Seg.
– Modo Alta velocidad (Hs-mode) mas de 3,4
Mbits/Seg.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Definiciones o términos utilizados en relación con las


funciones del bus I2C

• Maestro (Master): Dispositivo que determina la temporización y la dirección del


tráfico de datos en el bus. Es el único que aplica los pulsos de reloj en la línea SCL.
Cuando se conectan varios dispositivos maestros a un mismo bus la configuración
obtenida se denomina "multi-maestro".

• Esclavo (Slave): Cualquier dispositivo conectado al bus incapaz de generar pulsos


de reloj. Reciben señales de comando y de reloj proveniente del dispositivo maestro.

• Bus Desocupado (Bus Free): Estado en el cual ambas líneas (SDA y SCL) están
inactivas, presentando un estado lógico alto. Unicamente en este momento es
cuando un dispositivo maestro puede comenzar a hacer uso del bus.

• Comienzo (Start): Sucede cuando un dispositivo maestro hace ocupación del bus,
generando esta condición. La línea de datos (SDA) toma un estado bajo mientras
que la línea de reloj (SCL) permanece alta.

• Parada (Stop): Un dispositivo maestro puede generar esta condición dejando libre el
bus. La línea de datos toma un estado lógico alto mientras que la de reloj permanece
también en ese estado.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Definiciones o términos utilizados en relación con las


funciones del bus I2C
• Dato Válido (Valid Data): Sucede cuando un dato presente en la línea SDA es estable
mientras la línea SCL está a nivel lógico alto.

• Formato de Datos (Data Format): La transmisión de datos a través de este bus consta
de 8 bits de datos (ó 1 byte). A cada byte le sigue un noveno pulso de reloj durante el
cual el dispositivo receptor del byte debe generar un pulso de reconocimiento, conocido
como ACK (del inglés Acknowledge). Esto se logra situando la línea de datos a un nivel
lógico bajo mientras transcurre el noveno pulso de reloj.

• Dirección (Address): Cada dispositivo diseñado para funcionar en este bus dispone
de su propia y única dirección de acceso, que viene pre-establecida por el fabricante.
Hay dispositivos que permiten establecer externamente parte de la dirección de acceso.
Esto permite que una serie del mismo tipo de dispositivos se puedan conectar en un
mismo bus sin problemas de identificación. La dirección 00 es la denominada "de
acceso general", por la cual responden todos los dispositivos conectados al bus.

• Lectura/Escritura (Bit R/W): Cada dispositivo dispone de una dirección de 7 bits. El


octavo bit (el menos significativo ó LSB) enviado durante la operación de
direccionamiento corresponde al bit que indica el tipo de operación a realizar. Si este bit
es alto el dispositivo maestro lee información proveniente de un dispositivo esclavo. En
cambio, si este bit fuese bajo el dispositivo maestro escribe información en un
dispositivo esclavo.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Terminología básica del Bus I2C

Términos Descripción
Transmisor El dispositivo que envía datos al Bus
Receptor El dispositivo que recibe datos desde el Bus

Master El dispositivo que inicia una transferencia, genera las señales del reloj y termina un envío
(Maestro) de datos
Slave
El dispositivo direccionado por un master
(Esclavo)

Multi-Master Mas de un master puede controlar el bus al mismo tiempo sin corrupción de los mensajes

Procedimiento que asegura que si uno o mas master simultáneamente deciden controlar
Arbitraje
el Bus solo uno es permitido a controlarlo y el mensaje saliente no es deteriorado

Sincronización Procedimiento para sincronizar las señales del reloj de dos o mas dispositivos

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Respaldo Tecnológico:
• Tanto Philips como como otros fabricantes de dispositivos
compatibles con I2C disponen de una amplia gama de circuitos
integrados, incluyendo memorias RAM y EEPROM,
microcontroladores, puertos de E/S, codificadores DTMF,
tranceptores IR, conversores A/D y D/A, relojes de tiempo real,
calendarios, etc

• Dado que no siempre se requiere alta velocidad de transferencia de


datos este bus es ideal para sistemas donde es necesario manejar
información entre muchos dispositivos y, al mismo tiempo, se
requiere poco espacio y líneas de circuito impreso. Por ello es
común ver dispositivos I2C en video grabadoras, sistemas de
seguridad, electrónica automotriz, televisores, equipos de sonido y
muchas otras aplicaciones más.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Respaldo Tecnológico:
• Incluso, y gracias a que el protocolo es lo suficientemente simple,
usualmente se ven dispositivos I2C insertados en sistemas
microcontrolados que no fueron diseñados con puertos I2C, siendo
el protocolo generado por el firmware.

• También hay dispositivos de adaptación que permiten conectar


buses originalmente paralelos a sistemas I2C. Tal es el caso del
chip PCD 8584 de Philips el cual incorpora en el chip todo lo
necesario para efectuar dicha tarea.

• Hay, además, circuitos integrados cuya única misión es adaptar los


niveles presentes en el bus I2C y TTL, permitiendo resolver fácil y
rápidamente la interconexión de dispositivos de dicha familia con el
I2C.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

El protocolo del Bus I2C

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Formato del Mensaje


• Un protocolo orientado a BIT
• Handshaking
• Bidireccional

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Maestro envía datos a un esclavo

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Transferencia de datos:
El Maestro genera la condición de Start.

Cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra transferida
contiene la dirección del Esclavo seleccionado.

Tras el envío del start o inicio, en los siguientes 7 bits se codifica la dirección del
dispositivo. Y el octavo bit indica si se hace lectura(1) o escritura(0).

Después de cada 8 bits, el master debe esperar una señal de reconocimiento como
respuesta por parte del esclavo, lee el estado de la línea SDA, si vale 0 (impuesto por
el esclavo), el proceso de transferencia continúa. Si vale 1, indica que el circuito
direccionado no valida la comunicación, entonces, el Maestro genera un bit de stop
para liberar el bus I2C.

Este acuse de recibo se denomina ACK (acknowledge) y es una parte importante


del protocolo I2C.

Al final de la transmisión, el Maestro genera la condición de Stop y libera el bus


I2C, las líneas SDA y SCL pasan a estado alto.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Inicio de transmisión
– La transmisión la inicia el maestro
– Flanco de bajada en SDA con SCL a nivel alto
– Cuando nadie accede al bus hay un nivel alto en SCL y SDA

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Condiciones de START y STOP:

START:
la línea SDA cae a cero
mientras SCL permanece
en nivel alto. A partir de
este momento comienza la
transferencia de datos.

Una vez finalizada la comunicación se debe informar de esta situación


(condición de Stop). La línea SDA pasa a nivel alto mientras SCL permanece en
estado alto.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Start y Stop

SDA baja antes que SCL SCL alta antes que SDA

• Start –SDA baja cuando el reloj (SCL) es alto


• Stop – SDA sube cuando SCL es alto
• (Normalmente no hay transición cuando el reloj es alto)
M.C. Carlos E. Canto Quintal
El bus I2C Microcontroladores

Enviando a un Esclavo

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Eventos del bus I2C : leyendo un Acknowledge de un Esclavo


• Cuando se ha transmitido al bus un byte de dirección
o de dato éste debe ser “ RECONOCIDO” por el o los
esclavos.
• En el caso de una dirección: Si la dirección
concuerda con la propia entonces ese esclavo y
solamente ese esclavo enviará un acuse de recibido
de la dirección con un ACK. También se responde
con un ACK en el caso de un byte transmitido a un
esclavo ya direccionado . El esclavo que va a dar un
ACK pone a bajo la línea SDA inmediatamente
después de la recepción del octavo bit, o, en caso de
El Bus queda disponible de nuevo para que un byte de dirección , inmediatamente después de la
el maestro continúe enviando datos o
evaluación de su dirección.
generar una condición de STOP. • Esto significa que tan pronto como el maestro baja
En caso de que un dato vaya a ser escrito SCL para completar la transmisión del bit (1), SDA
será puesto a bajo por el esclavo (2).
al esclavo, este ciclo debe completarse
antes de que se genere una condición • El maestro ahora emite un pulso de reloj en la línea
STOP. El esclavo estará bloqueando el bus
SCL (3) El esclavo liberará la línea SDA hasta la
terminación de este pulso (4) de reloj.
(la línea SDA es mantenida en bajo por el
esclavo) hasta que el maestro haya •
generado un pulso de reloj en la línea SCL.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Reconocimiento (Acknowledge) :

M.C. Carlos E. Canto Quintal


• Reconocimiento
• El bit de reconocimiento es obligatorio en la transferencia de datos. El pulso de reloj
correspondiente al bit de reconocimiento (ACK) es generado por el Master. El Transmisor
desbloquea la línea SDA ("1") durante el pulso de reconocimiento. El receptor debe poner a "0" la
línea SDA durante el pulso ACK de modo que siga siendo "0" durante el tiempo que el master
genera el pulso "1" de ACK.
• Normalmente un receptor cuando ha sido direccionado esta obligado a generar un ACK después
de que cada byte a sido recibido.
• Cuando un dispositivo esclavo no genera el bit ACK (porque esta haciendo otra cosa y no puede
atender el Bus) debe mantener el esclavo la línea SDA a nivel "1" durante el bit ACK. El Master
entonces puede generar una condición de STOP abortando la transferencia de datos o repetir la
condición de Inicio enviando una nueva transferencia de datos.
• Si un Esclavo-receptor que esta direccionado no desea recibir mas bytes, el master debe detectar
la situación y no enviar mas bytes. Esto se indica porque el esclavo no genera el bit ACK en el
primer byte que sigue. El esclavo pone la línea SDA a "1" lo que es detectado por el Master el
cual genera la condición de Stop o repite la condición de Inicio.
• Si un Master-receptor esta recibiendo datos de un Esclavo-transmisor debe generar un bit ACK
tras cada byte recibido de transmisor, para finalizar la transferencia de datos no debe generar el
ACK tras el ultimo byte enviado por el esclavo. El esclavo-transmisor debe permitir desbloquear
la línea SDA generando el master la condición de Stop o de Inicio.
El bus I2C Microcontroladores

Transferencia completa

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

RELACIÓN ENTRE LOS NIVELES DE SDA Y SCL

• Todos los maestros deben generar una


subida en la línea SCL (2), leer el nivel en
SDA (3) y generar una caida en la línea
SCL (4).

• El Esclavo no debe cambiar el dato


durante el tiempo que SCL es alto ( de lo
contrario podría generarse una condición
START o STOP imprevista) .

• Durante (1) y (5), el esclavo puede


cambiar el estado de la línea SDA.
• En total está secuencia debe ser
realizada 8 veces para completar el byte
dato.
•Los bytes siempre son transmitidos con el Bit Más Significativo primero.

M.C. Carlos E. Canto Quintal


Maestro lee datos de un esclavo
El bus I2C Microcontroladores

Eventos del Bus I2C : Recibiendo un byte de un Esclavo


Una vez que el esclavo ha sido direccionado y el esclavo ha reconocido ésto,
el maestro puede recibir un byte del esclavo si el bit R/W en la dirección se
puso en modo READ ( puesto a ‘1’)

La sintaxis del protocolo es la misma que cuando se transmite un byte a un esclavo,


excepto que ahora no se le permite al maestro tocar la línea SDA. Previo al envió por la
línea SCL,de los 8 pulsos de reloj necesarios para el envió del byte , el maestro libera la
línea SDA. Ahora el esclavo tomará el control de esta línea. La línea se irá a alto si se
desea transmitir un ‘1’ o si el esclavo desea mandar un ‘0’, se mantiene en bajo.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Para operar un esclavo sobre el Bus I2C solo son


necesarios seis simples códigos, suficientes para
enviar o recibir información.
– Un bit de Inicio
– 7-bit o 10-bit de direccionamiento
– Un bit R/W que define si el esclavo es transmisor o
receptor
– Un bit de reconocimiento
– Mensaje dividido en bytes
– Un bit de Stop

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Esquema básico de conexiones


•Las líneas SDA y SCL son del tipo drenador abierto, similares a las de
colector abierto pero asociadas a un transistor de efecto de campo (ó
FET)..

Se deben poner en
estado alto (conectar a
la alimentación por
medio de resistores
Pull-Up) para construir
una estructura de bus
tal que se permita
conectar en paralelo
múltiples entradas y
salidas

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Esquema básico de conexiones

Características de una conexión en colector abierto

– Permite conectar varias fuentes de datos a un mismo hilo


– Nivel alto en el bus
– Si ningún dispositivo accede al bus
– Si ningún dispositivo transmite un cero
– Nivel bajo en el bus
– Si un dispositivo pone un nivel bajo
– Si dos dispositivos escriben a la vez siempre prevalecen
los ceros
• AND cableada
– Si un dispositivo escribe un nivel alto pero lee un cero
indica que otro dispositivo está también accediendo al b

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Esquema básico de conexiones


Inconvenientes de la conexión en colector abierto

– Las capacidades de la línea se cargan a través del pull-up


– Se puede solucionar utilizando una carga activa en lugar de un resistor

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Esquema básico de conexiones

Las dos líneas de comunicación disponen de niveles lógicos altos cuando están
inactivas. De entrada el número de dispositivos que se puede conectar al bus es
ilimitado, pero las líneas tienen una especificación de capacidad de carga máxima de
400pF.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Terminación de Bus

M.C. Carlos E. Canto Quintal


El Bus I2C Microcontroladores

El bus I2C
Ejemplo de una configuración del bus I2C usando dos microcontroladores

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Configuración Multi-Maestro

Cuando el MCU1 emite una condición start e enviá una dirección, todos los esclavos
escucharán ( incluyendo a MCU2 el cual en ese momento es considerado un esclavo
también) . Si la dirección no concuerda con la dirección del CPU2, este dispositivo
debe mantenerse de regreso a cualquier actividad hasta que el bus se desocupe de
nuevo después de una condición stop.
As long as the two MCU's monitor what is going on on the bus (start and stop) and as
long as they are aware that a transaction is going on because the last issued
command was not a STOP, there is no problem.
Let's assume one of the MCU's missed the START condition and still thinks the bus is
idle, or it just came out of reset and wants to start talking on the bus which could very
well happen in a real-life scenario. This could lead to problems.
M.C. Carlos E. Canto Quintal
Configuración Multi-Maestro

Protocolo multimaestro
– Con dos maestros en el bus existe posibilidad de conflicto

Arbitración: procedimiento para asegurar que sólo un maestro tiene el


control del bus en un instante
– Si un maestro está utilizando el bus no puede ser interrumpido por
otro.
• Desde START hasta STOP
– Si dos maestros intentan comenzar a utilizar el bus a la vez:
• Conexión del bus en colector abierto 􀃆 prevalecen los ceros
• A la vez que ponen datos en el bus, escuchan la línea.
• Si un maestro está intentando enviar un nivel alto y lee un nivel bajo
– Existe otro maestro utilizando el bus
– Deja de transmitir esperando que la línea quede libre (condición de
STOP)
El bus I2C Microcontroladores

Ejemplo de aplicaciones del Bus I2C

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Ejemplo de aplicaciones del Bus I2C


Conexión de una EEPROM serial y un Reloj de tiempo real, con bus I2C,
para su uso en un lector de smartcards

LECTOR DE
SMARTCARDS

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Ejemplo deEl bus I2C del Bus I2C


aplicaciones
Conexión de medidores ultrasónico de distancias a un mC Basic Stamp
2 usando el bus I2C.

El módulo SRF10 es un medidor ultrasónico de


distancias miniatura para robots que representa la
ultima generación en sistemas de medidas de
distancias por sonar.

El sensor es capaz de detectar objetos a una


distancia de 6 m con la facilidad de conectarse al
microcontrolador mediante un bus I2C, por lo que
se pueden conectar cuantos sensores sean
necesarios en el mismo bus.

Con una alimentación unica de 5V, solo requiere


15 mA, para funcionar y 3mA mientras esta en
reposo.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Ejemplo deEl bus I2C del Bus I2C


aplicaciones
Para el programador, el sensor SRF10 se comporta de la
misma manera que las EEPROM de las series 24xx, con
la excepción de que la dirección I2C es diferente. La
dirección por defecto de fábrica del sensor es 0xE0. El
usuario puede cambiar esta dirección con 16 direcciones
diferentes: E0, E2, E4, E6, E8, EA, EC, EE, F0, F2, F4,
F6, F8, FA, FC o FE, por lo que es posible utilizar hasta
16 sensores sobre un mismo bus I2C.

Además de las direcciones anteriores, todos los sonares


conectados al bus I2C responderán a la dirección 0 -al
ser la dirección de atención general. Esto significa que
escribir un comando de medición de la distancia para la
dirección 0 de I2C (0x00) iniciará las mediciones en todos
los sensores al mismo tiempo.

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Ejemplo de aplicaciones del Bus I2C


Esquema del circuito para la conexión de dos sensores
ultrasónicos SRF08 al controlador Basic Stamp 2

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

Dispositivos I2C con el PICAXE


Instrucciones en Basic del PICAXE par usar el bus I2C
I2CSLAVE WRITEI2C
Sintáxis: I2CSLAVE slave, speed, address Sintáxis: WRITEI2Clocation,(variable,...)
- Location es una variable /constante que especifica la
- Slave es la dirección i2c del esclavo dirección de un byte o palabra
- Speed es la palabra i2cfast (400kHz) o - Variable(s) contiene el byte(s) de dato que se va a
i2cslow (100kHz) a 4Mhz escribir
-Address es la palabra i2cbyte o i2cword Función:
Escribe a la localidad I2C el contenido de la variable(s).
Función:
El comando i2cslave es usado para configurar READI2C
las terminales PICAXE para usar el I2C y para
definir el tipo de dispositivo I2C a ser Sintáxis: READI2C location,(variable,...)
direccionado - Location es una variable /constante que
especifica la dirección de un byte o palabra
- Variable(s) recibe el byte(s) leido(s).
Funcción:
Lee la localidad I2C contenida en la(s) variable(s).

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

M.C. Carlos E. Canto Quintal


El bus I2C Microcontroladores

M.C. Carlos E. Canto Quintal

You might also like