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:
Bá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
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.
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. :)
,
Señor don nadie
joeforker