Nachrichten
Nachrichten
Die besten populärwissenschaftlichen Zusammenfassungen des MCU [empfohlene Sammlung] (2)
2022-03-17 230

6

Mikrocontroller-Programmierung


 

Es besteht ein großer Unterschied zwischen der Programmierung von Mikrocontrollern und PCs. Obwohl C-basierte Entwicklungswerkzeuge für Mikrocontroller immer beliebter werden, ist Assembler für Entwickler, die effizienten Programmcode schreiben und Assembler bevorzugen, nach wie vor die prägnanteste und effektivste Programmiersprache.


For MCU programming, the basic framework can be said to be roughly the same, which is generally divided into three parts: the initialization part (this is the biggest difference between MCU programming and PC), the main program loop body and the interrupt handler, which are explained as follows:
  1. Initialisierung:Bei der Entwicklung aller MCU-Programme ist die Initialisierung der grundlegendste und wichtigste Schritt, der im Allgemeinen Folgendes umfasst:
  Alle Interrupts maskieren und den Stackpointer initialisieren:Im Initialisierungsprozess sollen im Allgemeinen keine Interrupts auftreten.  
  Löschen Sie den RAM-Bereich des Systems und zeigen Sie „Speicher“ an:Although sometimes it may not be completely necessary, from the perspective of reliability and consistency, especially to prevent unexpected errors, it is recommended to develop good programming habits.  
  Initialisierung des E/A-Ports:Gemäß den Projektanforderungen ist der Eingangs- und Ausgangsmodus des jeweiligen E/A-Ports festzulegen. Für den Eingangsport muss der Pull-up- oder Pull-down-Widerstand eingestellt werden; für den Ausgangsport muss der Anfangspegel festgelegt werden, um unnötige Fehler zu vermeiden.  
  Interrupt settings:Alle im Projekt benötigten Interruptquellen müssen aktiviert und die Auslösebedingungen für den Interrupt festgelegt werden, während redundante, nicht verwendete Interrupts deaktiviert werden müssen.  
  Initialization of other functional modules:Für alle zu verwendenden Peripheriefunktionsmodule des Mikrocontrollers müssen die entsprechenden Einstellungen gemäß den Anforderungen der Projektanwendung vorgenommen werden. Beispielsweise müssen für die UART-Kommunikation Baudrate, Datenlänge, Verifizierungsmethode und Stoppbitlänge festgelegt werden. Für den Programmiertimer müssen Taktquelle, Frequenzteilung und Reload-Daten konfiguriert werden.  
  Initialisierung der Parameter:Nach der Initialisierung der MCU-Hardware und -Ressourcen werden im nächsten Schritt einige im Programm verwendete Variablen und Daten initialisiert. Die Initialisierung dieses Teils muss projektspezifisch und unter Berücksichtigung der Gesamtprogrammstruktur erfolgen. Bei Anwendungen, die vordefinierte Projektdaten im EEPROM speichern, empfiehlt es sich, die relevanten Daten während der Initialisierung in den RAM der MCU zu kopieren. Dies verbessert die Zugriffsgeschwindigkeit des Programms und reduziert den Stromverbrauch des Systems (prinzipiell erhöht der Zugriff auf externes EEPROM den Stromverbrauch des Netzteils).  
  2. Hauptprogrammschleife:Die meisten Mikrocontroller laufen über einen langen Zeitraum kontinuierlich, daher sind ihre Hauptprogramme im Wesentlichen als Schleife aufgebaut. Bei Anwendungen mit mehreren Betriebsmodi können mehrere Schleifen existieren, zwischen denen über Statusflags umgeschaltet wird. Das Hauptprogramm ist üblicherweise in folgende Module unterteilt:
  Berechnungsverfahren:Da Berechnungsprogramme im Allgemeinen zeitaufwändig sind, lehnen wir deren Verarbeitung in Interrupts entschieden ab, insbesondere Multiplikations- und Divisionsoperationen.  
Verarbeitungsprogramme mit geringen oder keinen Echtzeitanforderungen;
 
  Übertragungsvorgang anzeigen:Hauptsächlich für Anwendungen mit externen LED- und LCD-Treibern konzipiert.  
  3. Interrupt-Handler:Interrupt-Programme werden hauptsächlich zur Bearbeitung von Aufgaben und Ereignissen mit hohen Echtzeitanforderungen eingesetzt, wie z. B. die Erkennung externer plötzlicher Signale, die Erkennung und Verarbeitung von Tastendrücken, das Zählen von Zeitabläufen, das Scannen von LED-Anzeigen usw.  
Under normal circumstances, the interrupt program should keep the code as concise and short as possible. For functions that do not need to be processed in real time, the trigger flag can be set in the interrupt, and then the main program will perform specific transactions. This is very important, especially for low-power, low-speed MCUs, which must ensure timely response to all interrupts.  
  4. Für die Anordnung der verschiedenen Aufgabenkörper verwenden unterschiedliche Mikrocontroller unterschiedliche Verarbeitungsmethoden:  
 Beispielsweise erfordern Anwendungen mit langsamen und stromsparenden Mikrocontrollern (Fosc = 32768 Hz), wie z. B. Handheld-Geräte mit herkömmlichen LCD-Displays, eine hohe Echtzeitfähigkeit bei der Reaktion auf Tastendrücke und der Anzeige. Daher werden in der Regel zeitgesteuerte Interrupts zur Verarbeitung von Tastendrücken, Aktionen und Datenanzeige verwendet. Bei schnellen Mikrocontrollern (Fosc > 1 MHz) hingegen, da diese genügend Zeit haben, den Hauptprogrammcode auszuführen, können sie lediglich verschiedene Trigger-Flags in den entsprechenden Interrupts setzen und alle Aufgaben im Hauptprogrammcode ausführen.  
  5. Bei der MCU-Programmierung muss man einem Punkt besondere Aufmerksamkeit widmen:

Es ist notwendig zu verhindern, dass dieselbe Variable oder dieselben Daten gleichzeitig im Interrupt- und Hauptprogramm verwendet oder gesetzt werden. Eine effektive Methode hierfür ist, die Verarbeitung solcher Daten in einem Modul zu organisieren und anhand des Trigger-Flags zu entscheiden, ob zugehörige Operationen an den Daten durchgeführt werden sollen. In anderen Programmteilen (hauptsächlich Interrupts) werden die Trigger-Flags nur dort gesetzt, wo die Daten verarbeitet werden müssen. – Dadurch wird eine vorhersehbare und eindeutige Datenausführung gewährleistet.

7

Zusammenfassung der Mikrocontroller-Programmierung für Ingenieure



 

1. Entwickeln Sie die gute Gewohnheit, Zusammenfassungen zu erstellen. Eine Zusammenfassung dient nicht nur der Darstellung Ihres Lernfortschritts, sondern auch der Wiederholung und Vertiefung des Gelernten. Sie hilft außerdem, Fehler beim zweiten Mal zu vermeiden.


  2. Bevor Sie mit dem Programmieren beginnen, sollten Sie sich zunächst mit dem Projekt vertraut machen, es verstehen und einen allgemeinen Rahmen skizzieren. Es ist sehr wichtig, die Struktur sorgfältig zu überdenken und die sinnvollste Vorgehensweise zu finden. Analysieren Sie, welches Modul zuerst implementiert werden soll, welche Schritte in diesem Modul vorgesehen sind, wie die einzelnen Funktionen benannt werden, wie die Verbindungen zu anderen Modulen aussehen usw. Es empfiehlt sich, wichtige Prozesse auf einem Blatt Papier zu notieren.  
  3. Bei der modularen Programmierung in C müssen Sie zunächst jedes Modul in ein eigenes Modul unterteilen, es Modul für Modul programmieren, eine Reihenfolge festlegen, diese einhalten und erst dann das nächste Modul schreiben, wenn das vorherige erfolgreich abgeschlossen wurde. Header-Dateien werden jeweils erst nach Abschluss des Moduls erstellt.  
  4. Ignorieren Sie Warnungen nicht. Sie deuten darauf hin, dass etwas mit dem Programm nicht stimmt. Es ist wichtig, den Quellcode zu verstehen und eine Lösung zu finden. Gehen Sie bei der Fehlersuche gezielt vor. Sie können im Internet recherchieren oder andere um Rat fragen. Beispielsweise könnte die Hauptfunktion eines anderen Projekts in dieses Projekt übernommen worden sein. Es könnten auch doppelte Funktionsnamen vorliegen. Analysieren Sie die experimentellen Ergebnisse und gehen Sie Schritt für Schritt vor. Möglicherweise wurde auch die falsche Schnittstelle für die Portdefinition ausgewählt. Wenn Sie ein Problem nicht lösen können, ist es ratsam, eine Pause einzulegen und darüber nachzudenken. Achten Sie auf jedes noch so einfache Problem, da sich Fehler eingeschlichen haben könnten.   
Bei der Entwicklung von Mikrocontroller-Anwendungen stellen Probleme wie die Effizienz der Codenutzung, die Störfestigkeit und die Zuverlässigkeit von Mikrocontrollern weiterhin eine Herausforderung dar. Im Folgenden fassen wir einige grundlegende Fähigkeiten zusammen, die für die Mikrocontroller-Entwicklung unerlässlich sind.        
         

8

Kenntnisse in der Mikrocontroller-Entwicklung


   
       

1.Wie man Fehler in Programmen reduziert

Was die Reduzierung von Programmfehlern betrifft, sollten Sie zunächst die folgenden Parameter für die Verwaltung von Werten außerhalb des zulässigen Bereichs berücksichtigen, die während des Systembetriebs beachtet werden sollten.


  • Physikalische Parameter: Bei diesen Parametern handelt es sich hauptsächlich um Eingangsparameter des Systems. Dazu gehören Anregungsparameter, Betriebsparameter während der Datenerfassung und Ergebnisparameter am Ende der Datenverarbeitung.

  • 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, Speichereinheitenlänge und Stapeltiefe.

  • Anwendungsparameter: Diese Anwendungsparameter treten häufig als Anwendungsbedingungen bestimmter Mikrocontroller und Funktionseinheiten auf. Prozessparameter: Bezeichnet Parameter, die sich während des Systembetriebs systematisch ändern.


2.Wie man die Effizienz von C-Programmiercode verbessern kann

Die Verwendung der Programmiersprache C für Mikrocontroller ist ein unaufhaltsamer Trend in der Entwicklung und Anwendung von Mikrocontrollern. Um maximale Effizienz beim Programmieren in C zu erzielen, ist es ratsam, sich mit dem verwendeten C-Compiler vertraut zu machen. Testen Sie zunächst die Anzahl der Zeilen der Assembler-Anweisungen, die den verschiedenen C-Kompilierungen entsprechen, um die Effizienz zu ermitteln. Verwenden Sie beim Programmieren anschließend die Anweisung mit der höchsten Kompilierungseffizienz. Da sich die einzelnen C-Compiler unterscheiden, variiert auch die Kompilierungseffizienz. Die Codelänge und Ausführungszeit eines leistungsstarken C-Compilers für eingebettete Systeme sind nur 5–20 % länger als die derselben Funktion in Assemblersprache.


Für komplexe Projekte mit knappen Entwicklungszeiten kann C verwendet werden. Voraussetzung dafür ist jedoch, dass Sie mit der Programmiersprache C und dem C-Compiler des jeweiligen Mikrocontrollersystems sehr vertraut sind. Achten Sie besonders auf die vom C-Compiler unterstützten Datentypen und Algorithmen. Obwohl C die am weitesten verbreitete höhere Programmiersprache ist, verwenden verschiedene Mikrocontrollerhersteller unterschiedliche C-Compiler, insbesondere für die Ausführung bestimmter Funktionsbausteine. Wenn Sie diese Besonderheiten nicht verstehen, kann dies beim Debuggen zu zahlreichen Problemen führen und die Ausführungseffizienz im Vergleich zu Assembler deutlich verringern.


       3.Wie lässt sich das Störungsproblem von Mikrocontrollern lösen?Die effektivste Methode zur Vermeidung von Störungen besteht darin, die Störquelle zu entfernen und den Störpfad zu blockieren. Da dies jedoch oft schwierig ist, bleibt uns nur die Frage, ob die Störfestigkeit des Mikrocontrollers ausreichend ist. Neben der Verbesserung der Störfestigkeit von Hardwaresystemen gewinnt die softwarebasierte Störfestigkeit aufgrund ihrer flexiblen Gestaltung, der Einsparung von Hardwareressourcen und der hohen Zuverlässigkeit zunehmend an Bedeutung.  
Das häufigste Phänomen von Mikrocontroller-Interferenzen ist der Reset. Um zu verhindern, dass das Programm außer Kontrolle gerät, können Software-Traps und Watchdogs eingesetzt werden, um es in den Reset-Zustand zurückzusetzen. Daher ist die wichtigste Maßnahme der Mikrocontroller-Software zur Störungsresistenz die korrekte Behandlung des Reset-Zustands.  
Mikrocontroller verfügen üblicherweise über Flag-Register, mit denen sich die Ursache eines Resets ermitteln lässt. Zusätzlich können Sie auch eigene Flags im RAM speichern. Bei jedem Programmreset lassen sich durch die Auswertung dieser Flags verschiedene Reset-Ursachen bestimmen. Basierend auf den jeweiligen Flags können Sie direkt zum entsprechenden Programmabschnitt springen. Dadurch kann das Programm kontinuierlich ausgeführt werden, ohne dass der Benutzer den Reset während der Nutzung bemerkt.  
       4.How to test the reliability of microcontroller systemWenn ein Mikrocontroller-Systemdesign abgeschlossen ist, gibt es unterschiedliche Testpunkte und -methoden für verschiedene Mikrocontroller-Systemprodukte, aber einige müssen getestet werden:
 
  • Überprüfen Sie die Vollständigkeit der Mikrocontroller-Softwarefunktion
  • Ein- und Ausschalttest
  • Alterungstest
  • Tests wie ESD und EFT

Manchmal können wir auch Schäden simulieren, die bei der Benutzung durch den Menschen auftreten können. Beispielsweise können wir die Kontaktanschlüsse des Mikrocontrollersystems absichtlich mit dem menschlichen Körper oder einem Kleidungsstück reiben, um die antistatische Wirkung zu testen. Oder wir verwenden eine leistungsstarke Bohrmaschine in der Nähe des Mikrocontrollersystems, um dessen Unempfindlichkeit gegenüber elektromagnetischen Störungen zu prüfen.  
Zusammenfassend lässt sich sagen, dass Ein-Chip-Mikrocomputer zu einem wichtigen Aspekt der Computerentwicklung und -anwendung geworden sind. Ihre Bedeutung liegt darin, dass sie die traditionellen Konzepte und Methoden der Steuerungstechnik grundlegend verändern.  
Die meisten Funktionen, die früher durch analoge oder digitale Schaltungen realisiert werden mussten, lassen sich heute mithilfe von Mikrocontrollern softwareseitig umsetzen. Diese Steuerungstechnik, bei der Software Hardware ersetzt, wird auch als Mikrosteuerungstechnik bezeichnet und stellt eine Revolution in der traditionellen Steuerungstechnik dar.  
Darüber hinaus müssen wir während des Entwicklungs- und Anwendungsprozesses Fähigkeiten erlernen und die Effizienz steigern, damit es für ein breiteres Spektrum an Zwecken eingesetzt werden kann.  
         

9

Zusammenfassung der Chip-Funktion


 
 

Die Operationen auf dem Chip sind hauptsächlich Operationen auf den Registern des Chips. Die Register haben jeweils eindeutige Adressen im Speicher, die der entsprechenden Adresse zugeordnet sind. Bei der Betrachtung des Chips sollte man zunächst das Timing-Diagramm analysieren, dann die zugehörigen Register und ihre Funktionsweise verstehen, die benötigten Ports definieren (die vom Programm identifiziert werden können) und schließlich Schreib- und Leseprozeduren schreiben.


Wie man Daten in den Chip schreibt, wie man Daten liest und über welchen Port man Daten eingibt oder ausliest (das Wichtigste).  
Beim Verbinden von Chips über einen Bus muss man zunächst das Busprotokoll verstehen. Der an den I2C-Bus angeschlossene Chip steuert hauptsächlich andere Chips über diesen Bus.  
  1. Eine 74hc595 im Gitter dient zur Spaltenauswahl, die beiden anderen zur Farbauswahl. Das Gitter entspricht einer Anordnung von Dioden.
Die Diode leuchtet nur, wenn an einem Ende ein hoher und am anderen ein niedriger Pegel anliegt. Je nachdem, welches Ende angesteuert wird, leuchten unterschiedliche Farben.  
Auswahl des Timer-Betriebsmodus: Die oberen vier Bits legen den Timer T1 fest, die unteren vier Bits den Timer T0. Die letzten beiden Bits jedes Modus bestimmen den Betriebsmodus. Bei der Konfiguration zweier Timer ist auf die Verwendung des Operators „oder“ (|) zu achten. Bei Verwendung von Interrupts ist darauf zu achten, dass die zu löschenden Timer nach dem Eintritt in den Interrupt zurückgesetzt werden.  
  2. Serielle Schnittstelle: Die Baudrate wird üblicherweise auf Modus 2 (automatisches Zurücksetzen auf den Anfangswert) eingestellt. Da verschiedene Geräte unterschiedliche Datenverarbeitungskapazitäten besitzen, dient die Baudrateneinstellung hauptsächlich der Kompatibilität mit Geräten mit niedriger Geschwindigkeit und der Kommunikation zwischen ihnen. Das Interrupt-Flag muss per Software gelöscht werden. Beim Einrichten eines seriellen Interrupts kann dieser unabhängig davon, ob er beim Senden oder Empfangen ausgelöst wird, die Interruptfunktion aktivieren. Achten Sie daher auf die korrekte Konfiguration der Interruptfunktion. (Die Konfiguration erfolgt in der Regel intuitiv, je nachdem, ob es sich um einen Host- oder einen Slave-Computer handelt.)  
Wenn Sie einen Interrupt zum Senden verwenden, müssen Sie zunächst herausfinden, wie Sie den Interrupt beim ersten Mal auslösen. Dazu müssen Sie das Byte einmal senden, bevor Sie den Interrupt auslösen können. Es kann jeweils nur ein Byte gesendet werden, und das nächste Bit kann erst gesendet werden, nachdem TI gesetzt wurde.  
  3. Pcf8591ad conversion has four channels of input. When reading pcf8591, which channel is selected, the voltage input by that channel is read. The converted data is stored in the chip and then read out. When reading, first write the address of the chip, then write the sub-address of the device (0x40|channel number), and then the read data.  
  4. Die Da-Konvertierung erfolgt durch Schreiben der Geräteadresse in den Chip, anschließend der Subadresse (0x40) und schließlich des zu konvertierenden digitalen Werts. Informationen zum Geräteadresschip werden erläutert.  
  5. Auf dem LCD-Display werden die einmal geschriebenen und angezeigten Daten dauerhaft ohne ständige Aktualisierung angezeigt. Um die Daten zu ändern, müssen Sie sie erneut eingeben.  
  6. Beim DS1302-Taktgeber werden beim Lesen von Daten die ersten Daten mit der fallenden Flanke des achten Taktimpulses gelesen, beim Schreiben die nächsten Ausgaben vorbereitet. Beachten Sie die Schreibmethode des Programms und die Position des Rückgabewerts.  
  7. Beim DS1302 wird zuerst das Register angegeben, bevor Daten hineingeschrieben werden. Das Register auf dem Chip gibt die Adresse an. (Ich verstehe das Schreibschutzprogramm noch nicht ganz. Findet nicht ständig ein Schreibvorgang statt? Warum ist der Schreibschutz trotzdem aktiviert?)
(Laut dem vorherigen Beitrag kann man nach der Initialisierungszeit ein Flag setzen. Existiert dieses Flag, ist keine weitere Initialisierung nötig. Wird das Gerät jedoch ausgeschaltet, kann der RAM des Mikrocontrollers dieses Flag nicht speichern. Daher kann man den RAM des DS1302 nutzen, um das Flag zu speichern und es nach dem Einschalten wieder auszulesen. Ich bin selbst noch Anfänger und plane, den DS1302 demnächst einzusetzen. Ich bin mir nicht sicher, ob das so korrekt ist und habe es noch nicht implementiert. Könnten Sie mir bitte weitere Informationen geben?)
  8. Es empfiehlt sich, die Initialisierung zu notieren, falls Sie sie später vergessen. Achten Sie beim Lesen oder Schreiben darauf, ob zuerst das niedrigstwertige oder das höchstwertige Bit verarbeitet wird; dies lässt sich anhand des Zeitdiagramms erkennen.  
  9. Bei einem Infrarot-Transceiver wird beim Empfang anhand der Zeit zwischen zwei fallenden Flanken ermittelt, ob es sich um ein High- oder Low-Signal handelt. Beim Programmieren sollte man zunächst einen Timer verwenden, um die Zeit zu messen, sie zu speichern und anschließend in Binärdaten umzuwandeln (weitere Informationen dazu finden Sie in der Dokumentation – sehr empfehlenswert).  
  10. Schrittmotor: Hauptsächlich zum Schalten eingesetzt. Das Drehmoment des Schrittmotors nimmt mit steigender Drehzahl ab. Er wird vorwiegend für die automatische Zuführung von Werkstücken an Werkzeugmaschinen verwendet. Darüber hinaus findet er Anwendung in Steuerungsbereichen mit hohen Präzisionsanforderungen.  
Ein Schrittmotor ist ein Steuerungselement mit offenem Regelkreis, das elektrische Impulssignale in Winkel- oder Linearbewegungen umwandelt. Im Normalbetrieb hängen Drehzahl und Stoppposition des Motors ausschließlich von Frequenz und Anzahl der Impulse ab und werden nicht durch Laständerungen beeinflusst. Empfängt der Schrittmotortreiber ein Impulssignal, steuert er den Motor an und versetzt ihn in die vorgegebene Richtung um einen festen Winkel, den sogenannten Schrittwinkel. Die Drehung erfolgt schrittweise um diesen Winkel. Die Winkelbewegung lässt sich durch die Anzahl der Impulse präzise steuern, um eine genaue Positionierung zu erreichen. Gleichzeitig können Drehzahl und Beschleunigung durch die Impulsfrequenz geregelt werden.  
  11. Servomotor: Ein Servomotor ist der Antrieb, der die mechanischen Komponenten eines Servosystems steuert. Er ist ein indirektes Getriebe, das den Motor unterstützt. Servomotoren ermöglichen eine sehr genaue Drehzahl- und Positionsregelung und wandeln Spannungssignale in Drehmoment und Drehzahl um, um Steuerobjekte anzutreiben. Die Rotordrehzahl des Servomotors wird durch das Eingangssignal gesteuert und reagiert schnell. In automatischen Steuerungssystemen wird er als Aktor eingesetzt und zeichnet sich durch eine geringe elektromechanische Zeitkonstante, hohe Linearität und niedrige Anlaufspannung aus. Er wandelt das empfangene elektrische Signal in eine Winkelverschiebung oder Winkelgeschwindigkeit an der Motorwelle um. Man unterscheidet zwischen Gleichstrom- (DC) und Wechselstrom-Servomotoren (AC). Ihr Hauptmerkmal ist, dass sie bei einer Eingangsspannung von null keine Rotation aufweisen und die Drehzahl mit steigendem Drehmoment konstant abnimmt. Gleichstrommotoren (DC) sind weit verbreitet und werden häufig in Kleinwagen eingesetzt.


Haftungsausschluss: Dieser Artikel stammt aus „International Electronic Business Information“. Er gibt ausschließlich die persönliche Meinung des Autors wieder und spiegelt nicht die Ansichten von Sacco Micro oder der Branche wider. Er dient lediglich dem Nachdruck und der Weitergabe und unterstützt den Schutz von Urheberrechten. Bitte geben Sie bei einem Nachdruck die Originalquelle und den Autor an. Sollten Urheberrechte verletzt werden, kontaktieren Sie uns bitte, damit wir den entsprechenden Text entfernen können.

Firmentelefonnummer: +86-0755-83044319
Fax: +86-0755-83975897
E-Mail: 1615456225@qq.com
QQ: 3518641314 Manager Li

QQ: 332496225 Manager Qiu

Adresse: Raum 809, Gebäude C, Zhantao Technology Building, Minzhi Avenue 1079, Longhua New District, Shenzhen

whatsapp

Service-Hotline

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950