Schließen Sie einen ATmega-Mikrocontroller an den HDMI-CEC-Bus an


7

Ich brauche ein wenig Hilfe bei der richtigen Schaltung für eine Verbindung zwischen einem Mikrocontroller und dem HDMI CEC-Bus .

Hier ist der ganze Plan:

KEK Grundsätzlich möchte ich einen ATMega-Mikrocontroller verwenden, um das CEC-Bussignal zu decodieren und über den CEC-Bus mit anderen angeschlossenen Geräten (TV / BD-Player / AV) zu kommunizieren.

Der momentane Zustand:

Ich habe die CEC-Leitung an den Eingangserfassungsstift meines Mikrocontrollers angeschlossen. Und die CEC-Masse mit der Masse des Mikrocontrollers. Der CEC-Bus arbeitet mit 3,3 V (max. 3,63 V) und mein Mikrocontroller mit 5 V. Dies ist kein großes Problem und funktioniert gut (aufgrund der Schaltschwelle). Ein C-Programm dekodiert das Signal und sendet es derzeit über UART aus. Dies funktioniert hervorragend und ich kann jedes Signal meiner CEC-fähigen Geräte lesen.

Nun das Problem:

Im aktuellen Zustand kann ich nur Signale lesen, aber ich möchte natürlich auch etwas schreiben. Wie muss ich meinen Mikrocontroller anschließen, um den Status zwischen High / Low am Bus zu ändern?

Vielleicht die Lösung?!:

Aufgrund der unterschiedlichen Logikpegel (3,3 V <-> 5 V) benötige ich zunächst eine Pegelverschiebung. Ich würde einen einfachen Spannungsteiler (10k und 6,8k) verwenden und ihn von einem Ausgangspin (außer dem Pin, den ich zum Lesen des Signals verwende) an die CEC-Leitung anschließen. Würde es so funktionieren? Wenn die Leitung HIGH ist und ich mit meinem Mikrocontroller auch einen HIGH-Zustand anwende, verursacht dies Probleme? Wie würde ich den Stromausfall minimieren?

Ich möchte hier nichts beschädigen und mein elektrisches Wissen ist nur das Grundlegende: D.

Antworten:


2

Da es sich bei dem HDMI-CEC-Bus um eine Open-Collector-Konfiguration mit gemeinsam genutzten Pullups wie i2c handelt, sollten Sie darauf schreiben, indem Sie den Status des Ports (das Datenrichtungsregister oder DDR) zwischen Eingang (wirkt sich nicht auf den Bus, a 1) und Ausgang 0 umschalten (Bus runterziehen) und wieder zurück. Anstatt 1 und 0 in das PORT [ABCD] -Register zu schreiben, muss der Mikrocontroller die Leitung nicht zurückziehen.

Bei anderen Mikrocontrollern können Sie den Port im Open-Drain-Modus konfigurieren oder ein integriertes CEC-Peripheriegerät verwenden.

Sie sollten die eingebauten Pull-Up / Down-Widerstände des Mikrocontrollers deaktivieren. Der Bus hat bereits Klimmzüge und Ihr Bus entspricht nicht den vom Bus geforderten Spannungs- / Stromspezifikationen. Ein kommerzielles Gerät kann je nach Spezifikation seine eigenen diskreten Pull-up-Widerstände bereitstellen oder sich auf das andere Ende verlassen.

Es wäre auch eine gute Idee, Ihren ATMega mit 3,3 V zu betreiben. Es wird bei 3,3 V arbeiten; Viele AVRs arbeiten bis zu 1,8 V.


Danke für deine Antwort. Ich dachte auch darüber nach, nur die Leine nach unten zu ziehen (da jemand sie nach oben zieht). Also würde ich einfach einen Stift verwenden und ihn direkt an die CEC-Leitung anschließen. Um einen LOW-Status anzuwenden, würde ich DDRD = 0x01 (Ausgabe) mit dem Ausgang PORTD = 0x00 (LOW) setzen. Für einen HIGH-Zustand würde ich einfach den Pin so einstellen, dass er erneut eingeht (DDRD = 0x00). Im Eingangszustand muss der Pull-up-Widerstand deaktiviert werden? (Ist das wichtig?) Und wenn ich einen HIGH-Status (PORTD = 0x01) auf das Ausgabe-Pint anwenden würde, würde dies offensichtlich einige Probleme verursachen?
MrNobody

Sie sollten Ihre Klimmzüge deaktivieren. Der Bus hat sie bereits auf der richtigen Spannung.
Joeforker

1

Es gibt viele Informationen in diesem Thread im Arduino-Forum , es gibt einen Schaltplan für Empfangen und Senden, siehe unten. Antwort Nr. 81 auf Seite 6 enthält vollständige Cadsoft Eagle-Schaltplan- und Layoutdateien.

Es kann nützlich sein, auch I2C an den HDMI-Anschluss anzuschließen, um EDID-Informationen vom Fernsehgerät zu erhalten. Wenn der AVR mit 3,3 V betrieben wird, sind keine Schaltkreise erforderlich. Schließen Sie einfach Daten und Taktstifte direkt von AVR an HDMI an (siehe Adler) schematisch).

Sie haben auch eine Art Bibliothek geschrieben. Ich bin mir nicht sicher, wie nützlich sie ist, da sie für Arduino geschrieben wurde, aber der Code ist auf Google Code zu finden .

Bitte teilen Sie Ihre C-Bibliothek für AVR, ich würde gerne etwas haben, um mit mir selbst zu beginnen. :) :)

CEC empfangen und senden,


-1

Alles was Sie brauchen ist die Schaltung unten.

Geben Sie hier die Bildbeschreibung ein

Könnten Sie bitte Ihr Projekt teilen?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.