Conecte un microcontrolador ATmega al bus HDMI CEC

Necesito un poco de ayuda con un circuito adecuado para una conexión entre un microcontrolador y el bus HDMI CEC .

Aquí está todo el plan:

CCABásicamente, quiero usar un microcontrolador ATMega para decodificar la señal del bus CEC y comunicarme a través del bus CEC con otros dispositivos conectados (TV/BD-Player/AV).

El estado actual:

Conecté la línea CEC al pin de captura de entrada de mi microcontrolador. Y el CEC conectado a tierra del microcontrolador. El bus CEC funciona a 3.3V (max 3.63V) y mi microcontrolador a 5V. Esto no es un gran problema y funciona bien (debido al umbral de conmutación). Un programa C está haciendo el trabajo de decodificar la señal y actualmente enviarla a través de UART. Esto funciona muy bien y puedo leer cada señal de mis dispositivos compatibles con CEC.

Ahora el problema:

En el estado actual solo puedo leer señales, pero obviamente también quiero escribir algo. ¿Cómo necesito conectar mi microcontrolador para cambiar el estado entre alto/bajo en el bus?

¡¿Quizás la solución?!:

Debido a los diferentes niveles lógicos (3,3 V <-> 5 V), primero necesito un cambio de nivel. Usaría un divisor de voltaje simple (10k y 6,8k) y lo conectaría a la línea CEC desde algún pin de salida (que no sea el pin que estoy usando para leer la señal). ¿Funcionaría así? Si la línea es ALTA y también estoy aplicando un estado ALTO con mi microcontrolador, ¿provoca esto algún problema? ¿Cómo minimizaría la salida de corriente?

No quiero dañar nada aquí y mi conocimiento eléctrico es solo lo básico: D

Respuestas (3)

Dado que el bus HDMI CEC es una configuración de colector abierto con pullups compartidos como i2c, debe escribir en él alternando el estado del puerto (el registro de dirección de datos o DDR) entre entrada (no afecta al bus, un 1) a salida 0 (tirar del autobús hacia abajo) y viceversa. En lugar de escribir 1 y 0 en el registro PORT[ABCD] ya que el microcontrolador no necesita recuperar la línea.

En otros microcontroladores, puede configurar el puerto en modo de drenaje abierto o usar un periférico CEC incorporado.

Debe deshabilitar las resistencias pull-up/down integradas del microcontrolador. El autobús ya tiene pullups y el suyo no coincidirá con la especificación de voltaje/corriente requerida por el autobús. Un dispositivo comercial puede proporcionar sus propias resistencias pull-up discretas o confiar en el otro extremo según la especificación.

También sería una buena idea hacer funcionar su ATMega a 3,3 V. Funcionará a 3,3 V; muchos AVR están diseñados para funcionar hasta 1,8 V.

gracias por tu respuesta. También pensé en tirar de la línea hacia abajo (ya que alguien la está tirando hacia arriba). Así que solo usaría un pin y lo conectaría directamente a la línea CEC. Para aplicar un estado BAJO, configuraría DDRD = 0x01 (salida) con salida de PORTD = 0x00 (BAJO). Para un estado ALTO, simplemente configuraría el pin para ingresar nuevamente (DDRD = 0x00). ¿En el estado de entrada, la resistencia pull up debe desactivarse? (¿Importa?) ¿Y si aplicara un estado ALTO (PORTD = 0x01) en la pinta de salida, esto obviamente causaría algunos problemas?
Deberías deshabilitar tus pull ups. El bus ya los tiene en el voltaje correcto.

Hay mucha información en este hilo en el foro de Arduino , hay un esquema para recibir y transmitir, ver más abajo. Respuesta n.° 81, en la página 6, tener archivos completos de diseño y esquemas de Cadsoft Eagle.

Podría ser útil conectar también I2C al puerto HDMI para obtener información EDID del televisor, no se necesitan circuitos si el AVR está funcionando a 3,3 V, simplemente conecte los pines de datos y reloj directamente desde AVR a HDMI (ver el águila esquemático).

También escribieron algún tipo de biblioteca, no estoy seguro de cuán útil es ya que está escrita para Arduino, pero el código se puede encontrar en Google Code .

Comparta su biblioteca C para AVR, me encantaría tener algo para comenzar conmigo mismo. :)

CEC recibir y transmitir,

todo lo que necesitas es el siguiente circuito.

ingrese la descripción de la imagen aquí

Por favor, ¿podrías compartir tu proyecto?