Wie die MCU den LCD-Bildschirm steuert und Überlegungen zum Design

2023-07-17

Klassifizierung und Anwendung von Einzelchip-Mikrocomputern
Je nach Speichertyp können MCUs in zwei Typen ohne On-Chip-ROM und mit On-Chip-ROM unterteilt werden. Chips ohne On-Chip-ROM müssen mit einem externen EPROM (typischerweise 8031) verbunden werden; Chips mit On-Chip-ROM werden weiter unterteilt in On-Chip-EPROM (typischerweise 87C51), MASK, On-Chip-Mask-ROM (typischerweise 87C51 (Chip ist 8051), On-Chip-Flash-Typ (typischer Chip ist 89C51) und andere Typen.
Je nach Zweck kann es in Allzweck- und Spezialzwecke unterteilt werden; Je nach Breite des Datenbusses und der Länge der Datenbytes, die gleichzeitig verarbeitet werden können, kann er in 8-, 16- und 32-Bit-MCUs unterteilt werden.
Derzeit ist der inländische MCU-Anwendungsmarkt im Bereich der Unterhaltungselektronik am weitesten verbreitet, gefolgt vom Industriebereich und dem Automobilelektronikmarkt. Zur Unterhaltungselektronik gehören unter anderem Haushaltsgeräte, Fernseher, Spielekonsolen sowie Audio- und Videosysteme. Zu den Industriefeldern gehören Smart Home, Automatisierung, medizinische Anwendungen sowie neue Energieerzeugung und -verteilung. Der Automobilbereich umfasst Antriebsstrang- und Sicherheitssteuerungssysteme für Kraftfahrzeuge usw.
Shenzhen Hongjia Technology Co., Ltd. ist auf Forschung und Entwicklung, Produktion und Vertrieb von 1,14-Zoll-10,1-Zoll-LCD-Bildschirmen und Touchscreens spezialisiert, die individuell angepasst werden können und unterstützende MCU-Displays bereitstellen, einschließlich SPI-Schnittstelle, MCU-Schnittstelle, RGB-Schnittstelle. MIPI-Schnittstelle usw. Es gibt viele Größen und Modelle. Passende resistive Touchscreens und kapazitive Touchscreens können ebenfalls bereitgestellt werden.
Die Grundfunktion eines Einzelchip-Mikrocomputers

Bei den meisten MCUs sind die folgenden Funktionen die gebräuchlichsten und grundlegendsten. Für verschiedene MCUs kann die Beschreibung unterschiedlich sein, aber im Wesentlichen sind sie im Wesentlichen gleich:

1. TImer (Timer): Obwohl es viele Arten von TImern gibt, können sie in zwei Kategorien eingeteilt werden: Die eine ist der TImer mit festem Zeitintervall, dh der Zeitpunkt wird vom System festgelegt und das Benutzerprogramm kann nicht gesteuert werden. Den Benutzerprogrammen stehen nur mehrere feste Zeitintervalle zur Auswahl zur Verfügung, z. B. 32 Hz, 16 Hz, 8 Hz usw. Diese Art von TImer kommt häufiger in 4-Bit-MCUs vor und kann daher zur Implementierung verwandter Funktionen wie Takt und Timing verwendet werden .
Der andere Typ ist der programmierbare Timer (programmierbarer Timer). Wie der Name schon sagt, kann die Zeit dieses Timertyps durch das Programm des Benutzers gesteuert werden. Zu den Steuerungsmethoden gehören: Auswahl der Taktquelle, Auswahl der Frequenzteilung (Prescale) und vorgefertigte Zahleneinstellung usw. Einige MCUs verfügen über alle drei gleichzeitig, während andere möglicherweise über ein oder zwei davon verfügen. Diese Art von Timer-Anwendung ist sehr flexibel und auch die tatsächliche Verwendung ändert sich ständig. Eine der häufigsten Anwendungen ist die Realisierung einer PWM-Ausgabe.
Da die Taktquelle frei wählbar ist, werden solche Timer in der Regel mit Event Countern kombiniert.
2. IO-Ports: Jede MCU verfügt über eine bestimmte Anzahl von IO-Ports. Ohne IO-Ports verliert die MCU den Kommunikationskanal mit der Außenwelt. Je nach Konfiguration des IO-Ports kann dieser in folgende Typen unterteilt werden:
Reiner Eingangs- oder reiner Ausgangsport: Diese Art von IO-Port wird durch das MCU-Hardwaredesign bestimmt. Es kann nur ein- oder ausgegeben werden und kann nicht per Software in Echtzeit eingestellt werden.
IO-Ports direkt lesen und schreiben: Zu dieser Art von IO-Ports gehören beispielsweise die IO-Ports des MCS-51. Beim Ausführen der Anweisung zum Lesen des E/A-Ports handelt es sich um einen Eingabeport. Beim Ausführen einer Anweisung zum Schreiben eines E/A-Ports handelt es sich automatisch um einen Ausgabeport.
Programmprogrammierung zum Festlegen der Eingabe- und Ausgaberichtung: Der Ein- oder Ausgang dieses E/A-Porttyps wird vom Programm entsprechend den tatsächlichen Anforderungen eingestellt, die Anwendung ist relativ flexibel und einige Anwendungen auf Busebene können realisiert werden, z. B. I2C Bus, verschiedene LCDs, LED-Treiber-Steuerbus usw.
Bei der Verwendung des IO-Ports muss der wichtige Punkt beachtet werden: Für den Eingangsport muss ein klares Pegelsignal vorhanden sein, um sicherzustellen, dass er nicht schwebend sein kann (dies kann durch Hinzufügen eines Pull-Up- oder Pull-Up-Ports erreicht werden). Abwärtswiderstand); Für den Ausgangsport muss sein Ausgang auf der Zustandsebene seine externe Verbindung berücksichtigen und sicherstellen, dass im Standby- oder statischen Zustand keine Stromquelle oder -senke vorhanden ist.
3. Externer Interrupt: Externer Interrupt ist ebenfalls eine Grundfunktion der meisten MCUs. Es wird im Allgemeinen zur Echtzeitauslösung von Signalen, zur Datenabtastung und zur Statuserkennung verwendet. Es gibt verschiedene Arten von Interrupts: Anstiegsflanken-, Abfallflanken-Trigger und Pegel-Trigger. Externe Interrupts werden im Allgemeinen über Eingangsports implementiert. Wenn es sich um einen E/A-Port handelt, wird die Interrupt-Funktion nur aktiviert, wenn er auf Eingang eingestellt ist. Wenn es sich um einen Ausgangsport handelt, wird die externe Interrupt-Funktion automatisch ausgeschaltet (es gibt einige Ausnahmen in der ATiny-Serie von ATMEL, der Ausgangsport kann auch die Interrupt-Funktion auslösen). Die Anwendung eines externen Interrupts ist wie folgt:
Erkennung externer Triggersignale: Das eine basiert auf Echtzeitanforderungen, wie z. B. die Steuerung von siliziumgesteuerten Gleichrichtern, die Erkennung von Burst-Signalen usw., und das andere basiert auf der Notwendigkeit, Strom zu sparen.
Messung der Signalfrequenz: Um sicherzustellen, dass das Signal nicht verpasst wird, ist ein externer Interrupt die ideale Wahl.
Datendekodierung: Im Bereich der Fernsteuerungsanwendungen ist es zur Reduzierung der Designkosten häufig erforderlich, Software zum Dekodieren verschiedener kodierter Daten zu verwenden, beispielsweise die Dekodierung von Manchester und die PWM-Kodierung.
Tastenerkennung und Systemaktivierung: Wenn eine MCU in den Ruhezustand wechselt, muss sie im Allgemeinen durch einen externen Interrupt aktiviert werden. Die einfachste Form ist ein Schlüssel, und der Ebenenwechsel wird durch die Aktion des Schlüssels erzeugt.
4. Kommunikationsschnittstelle: Die von der MCU bereitgestellte Kommunikationsschnittstelle umfasst im Allgemeinen die SPI-Schnittstelle, UART, I2C-Schnittstelle usw., die wie folgt beschrieben werden:
SPI-Schnittstelle: Dieser Schnittstellentyp ist die grundlegendste Kommunikationsmethode, die von den meisten MCUs bereitgestellt wird. Seine Datenübertragung wird von einem synchronen Takt gesteuert. Zu den Signalen gehören: SDI (serielle Dateneingabe), SDO (serielle Datenausgabe), SCLK (serielle Uhr) und Bereitsignal; In einigen Fällen kann es sein, dass kein Bereitschaftssignal vorhanden ist. Diese Art von Schnittstelle kann im Master-Modus oder im Slave-Modus arbeiten. Ein beliebtes Sprichwort lautet: Sehen Sie, wer das Taktsignal bereitstellt. Die Partei, die die Uhr bereitstellt, ist der Master, und die Gegenpartei ist dann der Slaver.
UART (Universal Asynchronous Receive Transmit): Es handelt sich um die grundlegendste asynchrone Übertragungsschnittstelle. Seine Signalleitungen sind nur Rx und Tx. Das grundlegende Datenformat ist: Startbit + Datenbit (7 Bits/8 Bits) + Paritätsbit (gerade, ungerade oder keine) + Stoppbit (1–2 Bit). Die Zeit, die ein Datenbit benötigt, wird als Baudrate (Baudrate) bezeichnet.
Bei den meisten MCUs können die Länge der Datenbits, die Datenprüfmethode (ungerade Prüfung, gerade Prüfung oder keine Prüfung), die Länge des Stoppbits (Stoppbit) und die Baudrate flexibel durch Programmierung eingestellt werden. Sicherlich. Die am häufigsten verwendete Art von Schnittstelle ist die Kommunikation mit der seriellen Schnittstelle des PCs.
I2C-Schnittstelle: I2C ist ein von Philips entwickeltes Datenübertragungsprotokoll, das auch durch zwei Signale implementiert wird: SDAT (serielle Dateneingabe und -ausgabe) und SCLK (serielle Uhr). Sein größter Vorteil besteht darin, dass mehrere Geräte an diesen Bus angeschlossen werden können, die über Adressen identifiziert und angesprochen werden können; Einer der größten Vorteile des I2C-Busses besteht darin, dass er sehr bequem per Software über den E/A-Port realisiert werden kann und seine Übertragungsdatenrate vollständig von SCLK gesteuert wird. Zur Steuerung kann er im Gegensatz zur UART-Schnittstelle schnell oder langsam sein , das strenge Geschwindigkeitsanforderungen hat.
5. Watchdog (Watchdog-Timer): Watchdog ist auch eine Grundkonfiguration der meisten MCUs (einige 4-Bit-MCUs verfügen möglicherweise nicht über diese Funktion), und die meisten MCU-Watchdogs können nur zulassen, dass Programme sie zurücksetzen, können sie jedoch nicht zurücksetzen. Es ist geschlossen (einige werden beim Einbrennen des Programms festgelegt, z. B. die MCU der PIC-Serie von Microchip), und einige MCUs bestimmen, ob es auf eine bestimmte Weise geöffnet werden soll, z. B. die KS57-Serie von Samsung, solange das Programm auf das Watchdog-Register zugreift , wird automatisch eingeschaltet und kann nicht wieder ausgeschaltet werden. Im Allgemeinen kann die Rücksetzzeit des Watchdogs per Programm eingestellt werden. Die grundlegendste Anwendung von Watchdog besteht darin, eine Selbstwiederherstellungsfunktion bereitzustellen, damit die MCU aufgrund unerwarteter Fehler abstürzt.

Mikrocontroller-Programmierung
Es gibt einen großen Unterschied zwischen der Programmierung von MCU-Programmen und der Programmierung von PC-Programmen. Obwohl C-basierte MCU-Entwicklungstools immer beliebter werden, ist die Assemblersprache für einen effizienten Programmcode und einen Designer, der gerne Assembler verwendet, immer noch die prägnanteste und effizienteste Programmiersprache.

Für die MCU-Programmierung kann gesagt werden, dass das Grundgerüst ungefähr gleich ist und im Allgemeinen in drei Teile unterteilt ist: den Initialisierungsteil (dies ist der größte Unterschied zwischen der MCU-Programmierung und der PC-Programmierung), den Hauptprogrammschleifenkörper und das Interrupt-Verarbeitungsprogramm wie folgt erklärt:
1. Initialisierung: Für den Entwurf aller MCU-Programme ist die Initialisierung der grundlegendste und wichtigste Schritt und umfasst im Allgemeinen Folgendes:
Maskieren Sie alle Interrupts und initialisieren Sie den Stapelzeiger: Der Initialisierungsteil möchte im Allgemeinen nicht, dass Interrupts auftreten.
Löschen Sie den RAM-Bereich des Systems und zeigen Sie den Speicher an: Obwohl dies manchmal nicht unbedingt erforderlich ist, wird aus Sicht der Zuverlässigkeit und Konsistenz, insbesondere zur Vermeidung versehentlicher Fehler, empfohlen, gute Programmiergewohnheiten zu entwickeln.
Initialisierung des E/A-Ports: Stellen Sie entsprechend den Anwendungsanforderungen des Projekts den Eingabe- und Ausgabemodus des relevanten E/A-Ports ein. Für den Eingangsport müssen Sie dessen Pull-Up- oder Pull-Down-Widerstand einstellen; Für den Ausgabeport müssen Sie dessen anfängliche Ausgabeebene festlegen, um unnötige Fehler zu vermeiden.
Interrupt-Einstellungen: Für alle Interrupt-Quellen, die im Projekt verwendet werden müssen, sollten diese aktiviert und die Triggerbedingungen für Interrupts festgelegt werden, während sie für redundante Interrupts, die nicht verwendet werden, ausgeschaltet werden müssen.
Initialisierung anderer Funktionsmodule: Für alle peripheren Funktionsmodule der MCU, die verwendet werden müssen, müssen entsprechende Einstellungen gemäß den Anwendungsanforderungen des Projekts vorgenommen werden, z. B. UART-Kommunikation, Baudrate, Datenlänge, Überprüfungsmethode und Stopp Das Bit muss eingestellt werden. Die Länge usw. und für den Programmier-Timer müssen Sie seine Taktquelle, die Frequenzteilung und die Neuladedaten usw. festlegen.
Parameterinitialisierung: Nach Abschluss der Initialisierung der MCU-Hardware und -Ressourcen besteht der nächste Schritt darin, einige im Programm verwendete Variablen und Daten zu initialisieren. Die Initialisierung dieses Teils muss entsprechend dem spezifischen Projekt und der Gesamtanordnung des Programms gestaltet werden. Für einige Anwendungen, die EEPROM zum Speichern vorgefertigter Projektdaten verwenden, wird empfohlen, die relevanten Daten während der Initialisierung in den RAM der MCU zu kopieren, um die Zugriffsgeschwindigkeit des Programms auf die Daten zu verbessern und den Stromverbrauch des Systems (im Prinzip) zu reduzieren , erhöht der Zugriff auf das externe EEPROM den Stromverbrauch des Netzteils).
2. Der Schleifenkörper des Hauptprogramms: Die meisten MCUs laufen kontinuierlich über einen langen Zeitraum, sodass der Hauptprogrammkörper grundsätzlich zyklisch gestaltet ist. Bei Anwendungen mit mehreren Arbeitsmodi kann es mehrere geben. Ein Schleifenkörper wird über das Statusflag untereinander konvertiert. Für den Hauptstudiengang sind grundsätzlich folgende Module vorgesehen:
Berechnungsprogramm: Das Berechnungsprogramm ist im Allgemeinen zeitaufwändig und lehnt daher jede Interrupt-Verarbeitung, insbesondere Multiplikations- und Divisionsoperationen, entschieden ab.
Verarbeitung von Programmen mit geringen oder keinen Echtzeitanforderungen;

Display-Übertragungsprogramm: hauptsächlich für Anwendungen mit externen LED- und LCD-Treibern.
3. Interrupt-Verarbeitungsprogramm: Das Interrupt-Programm wird hauptsächlich zur Verarbeitung von Aufgaben und Ereignissen mit hohen Echtzeitanforderungen verwendet, z. B. Erkennung externer plötzlicher Signale, Erkennung und Verarbeitung von Tasten, Zeitzählung, Scannen von LED-Anzeigen usw.
Im Allgemeinen sollte das Interrupt-Programm den Code so prägnant und kurz wie möglich halten. Für Funktionen, die nicht in Echtzeit verarbeitet werden müssen, können Sie das Trigger-Flag im Interrupt setzen, und dann führt das Hauptprogramm die spezifische Transaktion aus – das ist sehr wichtig. Insbesondere bei MCUs mit geringem Stromverbrauch und niedriger Geschwindigkeit ist es notwendig, eine rechtzeitige Reaktion auf alle Interrupts sicherzustellen.
4. Für die Anordnung verschiedener Aufgabenkörper verfügen verschiedene MCUs über unterschiedliche Verarbeitungsmethoden:
Beispielsweise erfordert die Reaktion auf Tasten und Anzeigen bei MCU-Anwendungen mit niedriger Geschwindigkeit und geringem Stromverbrauch (Fosc = 32768 Hz), wenn man bedenkt, dass es sich bei solchen Projekten ausschließlich um Handgeräte handelt und gewöhnliche LCD-Anzeigen verwendet, eine hohe Echtzeitleistung, sodass im Allgemeinen zeitgesteuerte Interrupts erforderlich sind werden zur Verarbeitung von Tastenaktionen und zur Datenanzeige verwendet; Und bei Hochgeschwindigkeits-MCUs wie Fosc>1-MHz-Anwendungen kann die MCU, da sie zu diesem Zeitpunkt genügend Zeit hat, um den Hauptprogrammschleifenkörper auszuführen, nur im entsprechenden Abschnitt unterbrochen werden. Setzen Sie verschiedene Trigger-Flags und stellen Sie alle Aufgaben ein im Hauptprogrammkörper zur Ausführung.
5. Beim Programmierdesign der MCU bedarf ein weiterer Punkt besonderer Aufmerksamkeit:

Um den gleichzeitigen Zugriff oder das gleichzeitige Setzen derselben Variablen oder Daten im Interrupt und im Hauptprogrammkörper zu verhindern. Eine wirksame vorbeugende Methode besteht darin, die Verarbeitung solcher Daten in einem Modul anzuordnen und durch Beurteilung des Trigger-Flags zu bestimmen, ob die entsprechende Operation der Daten ausgeführt werden soll. Während in anderen Programmkörpern (hauptsächlich Interrupts) die zu verarbeitenden Daten an der Verarbeitungsstelle nur das ausgelöste Flag setzen. - Dadurch wird sichergestellt, dass die Ausführung der Daten vorhersehbar und eindeutig ist.

Kenntnisse in der Mikrocontroller-Entwicklung

1. So reduzieren Sie Fehler im Programm
Um Programmfehler zu reduzieren, sollten Sie zunächst die folgenden Parameter zur Bereichsüberschreitungsverwaltung berücksichtigen, die während des Systembetriebs berücksichtigt werden sollten.
Physikalische Parameter: Diese Parameter sind hauptsächlich die Eingabeparameter des Systems, einschließlich Anregungsparameter, Betriebsparameter während der Erfassung und Verarbeitung sowie Ergebnisparameter am Ende der Verarbeitung.

Ressourcenparameter: Bei diesen Parametern handelt es sich hauptsächlich um die Ressourcen von Schaltkreisen, Geräten und Funktionseinheiten im System, wie z. B. Speicherkapazität, Länge der Speichereinheit und Stapeltiefe.
Anwendungsparameter: Diese Anwendungsparameter stellen häufig die Anwendungsbedingungen einiger Einzelchip-Mikrocomputer und Funktionseinheiten dar. Prozessparameter: Bezieht sich auf die Parameter, die sich während des Betriebs des Systems in geordneter Weise ändern.


2. So verbessern Sie die Effizienz des C-Sprachprogrammcodes
Es ist ein unvermeidlicher Trend bei der Entwicklung und Anwendung von Einzelchip-Mikrocomputern, die C-Sprache zum Entwerfen des Einzelchip-Mikrocomputerprogramms zu verwenden. Wenn Sie beim Programmieren in C höchste Effizienz erreichen möchten, sollten Sie sich am besten mit dem verwendeten C-Compiler auskennen. Testen Sie zunächst die Anzahl der Anweisungszeilen in der Assemblersprache, die jeder kompilierten C-Sprache entsprechen, damit Sie die Effizienz klar erkennen können. Verwenden Sie bei der zukünftigen Programmierung die Anweisung mit der höchsten Kompilierungseffizienz. Jeder C-Compiler weist bestimmte Unterschiede auf, sodass auch die Kompilierungseffizienz unterschiedlich ist. Die Codelänge und Ausführungszeit eines hervorragenden C-Compilers für eingebettete Systeme ist nur 5–20 % länger als die gleiche Funktionsebene, die in Assembler geschrieben ist.

Für komplexe Projekte mit kurzer Entwicklungszeit kann die C-Sprache verwendet werden. Voraussetzung ist jedoch, dass Sie mit der C-Sprache und dem C-Compiler des MCU-Systems bestens vertraut sind und den Datentypen und Algorithmen des C-Compilersystems besondere Aufmerksamkeit schenken kann unterstützen. Obwohl die C-Sprache die gebräuchlichste Hochsprache ist, unterscheiden sich die C-Sprachkompilierungssysteme verschiedener MCU-Hersteller, insbesondere im Betrieb einiger Sonderfunktionsmodule. Wenn Sie diese Funktionen nicht verstehen, treten beim Debuggen viele Probleme auf, was zu einer geringeren Ausführungseffizienz als bei der Assemblersprache führt.

3. So lösen Sie das Anti-Interferenz-Problem des Single-Chip-Mikrocomputers. Der effektivste Weg, Interferenzen zu verhindern, besteht darin, die Interferenzquelle zu entfernen und den Interferenzpfad zu unterbrechen. Dies ist jedoch häufig schwierig und hängt nur davon ab ob die Entstörungsfähigkeit des Einzelchip-Mikrocomputers stark genug ist. Während die Anti-Jamming-Fähigkeit des Hardwaresystems verbessert wird, zeichnet sich die Software-Anti-Jamming durch ihr flexibles Design aus.
X
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. By using this site, you agree to our use of cookies. Privacy Policy