Hoe MCU het LCD-scherm en ontwerpoverwegingen aanstuurt
Classificatie en toepassing van microcomputers met één chip
Afhankelijk van het geheugentype kan MCU worden onderverdeeld in twee typen zonder ROM op de chip en met ROM op de chip. Voor chips zonder ROM op de chip moeten ze worden verbonden met een externe EPROM (meestal 8031); chips met on-chip ROM zijn verder onderverdeeld in on-chip EPROM (typisch 87C51), MASK on-chip mask ROM (typisch 87C51) Chip is 8051), on-chip Flash-type (typisch chip is 89C51) en andere typen.
Afhankelijk van het doel kan het worden onderverdeeld in algemeen en speciaal doel; afhankelijk van de breedte van de databus en de lengte van databytes die in één keer kunnen worden verwerkt, kan deze worden verdeeld in 8, 16 en 32-bits MCU's.
Momenteel wordt de binnenlandse markt voor MCU-toepassingen het meest gebruikt op het gebied van consumentenelektronica, gevolgd door de industriële sector en de markt voor auto-elektronica. Consumentenelektronica omvat onder meer huishoudelijke apparaten, televisies, gameconsoles en audio- en videosystemen. Industriële velden omvatten smart home, automatisering, medische toepassingen en de opwekking en distributie van nieuwe energie. Het automobielgebied omvat aandrijflijnen en veiligheidscontrolesystemen voor auto's, enz.
Shenzhen Hongjia Technology Co., Ltd. is gespecialiseerd in R&D, productie en verkoop van 1,14-inch-10,1-inch LCD-schermen en aanraakschermen, die kunnen worden aangepast en ondersteunende MCU-displays bieden, waaronder SPI-interface, MCU-interface, RGB-interface, MIPI-interface, enz. Er zijn vele maten en modellen. Er kunnen ook bijpassende resistieve touchscreens en capacitieve touchscreens worden geleverd.
De basisfunctie van een microcomputer met één chip
Voor de meeste MCU's zijn de volgende functies de meest voorkomende en elementaire. Voor verschillende MCU's kan de beschrijving anders zijn, maar in wezen zijn ze hetzelfde:
1. TIMEr (timer): Hoewel er veel soorten TIMER zijn, kunnen ze in twee categorieën worden ingedeeld: de ene is TIMEr met een vast tijdsinterval, dat wil zeggen dat de timing door het systeem wordt ingesteld en dat het gebruikersprogramma niet kan worden bestuurd. Er zijn slechts enkele vaste tijdsintervallen beschikbaar waaruit gebruikersprogramma's kunnen kiezen, zoals 32 Hz, 16 Hz, 8 Hz, enz. Dit soort TIMER komt vaker voor in 4-bit MCU's, dus het kan worden gebruikt om gerelateerde functies zoals klok en timing te implementeren .
Het andere type is Programmable Timer (programmeerbare timer). Zoals de naam al doet vermoeden, kan de timing van dit type timer worden geregeld door het gebruikersprogramma. De besturingsmethoden omvatten: selectie van de klokbron, selectie van frequentieverdeling (Prescale) en geprefabriceerde nummerinstelling, enz. Sommige MCU's hebben ze alle drie tegelijkertijd, terwijl andere er misschien een of twee hebben. Dit soort Timer-applicatie is zeer flexibel en het daadwerkelijke gebruik verandert ook voortdurend. Een van de meest voorkomende toepassingen is om het te gebruiken om PWM-uitvoer te realiseren.
Omdat de klokbron vrij kan worden gekozen, worden dergelijke timers doorgaans gecombineerd met gebeurtenistellers.
2. IO-poorten: Elke MCU heeft een bepaald aantal IO-poorten. Zonder IO-poorten verliest de MCU het communicatiekanaal met de buitenwereld. Afhankelijk van de configuratie van de IO-poort kan deze worden onderverdeeld in de volgende typen:
Pure invoer- of pure uitvoerpoort: Dit type IO-poort wordt bepaald door het MCU-hardwareontwerp. Het kan alleen invoer of uitvoer zijn en kan niet in realtime door software worden ingesteld.
Direct lezen en schrijven van IO-poorten: De IO-poorten van MCS-51 behoren bijvoorbeeld tot dit type IO-poorten. Bij het uitvoeren van de lees-IO-poortinstructie is het een invoerpoort; bij het uitvoeren van een schrijf-IO-poortinstructie is dit automatisch een uitvoerpoort.
Programmaprogrammering om de invoer- en uitvoerrichting in te stellen: de invoer of uitvoer van dit type IO-poort wordt door het programma ingesteld op basis van de werkelijke behoeften, de toepassing is relatief flexibel en sommige toepassingen op busniveau kunnen worden gerealiseerd, zoals I2C bus, diverse LCD's, LED-stuurprogramma's besturingsbus, enz.
Bij het gebruik van de IO-poort moet het belangrijke punt in gedachten worden gehouden: voor de ingangspoort moet er een duidelijk niveausignaal zijn om ervoor te zorgen dat deze niet kan zweven (dit kan worden bereikt door een pull-up of pull-up toe te voegen). neerwaartse weerstand); voor de uitgangspoort, de uitvoer ervan. Het statusniveau moet rekening houden met de externe verbinding en er moet voor worden gezorgd dat er geen stroombron of -sink in de standby- of statische status is.
3. Externe interrupt: Externe interrupt is ook een basisfunctie van de meeste MCU's. Het wordt over het algemeen gebruikt voor het realtime triggeren van signalen, databemonstering en statusdetectie. Er zijn verschillende soorten interrupts: stijgende flank, dalende flanktrigger en niveautrigger. Externe interrupts worden over het algemeen geïmplementeerd via invoerpoorten. Als het een IO-poort is, wordt de interruptfunctie alleen ingeschakeld als deze op invoer is ingesteld; als het een uitgangspoort is, wordt de externe interruptfunctie automatisch uitgeschakeld (er zijn enkele uitzonderingen in de ATiny-serie van ATMEL, de uitgangspoort kan ook de interruptfunctie activeren). De toepassing van externe interrupt is als volgt:
Detectie van externe triggersignalen: de ene is gebaseerd op real-time vereisten, zoals de besturing van siliciumgestuurde gelijkrichters, detectie van burst-signalen, enz., en de andere is de behoefte aan energiebesparing.
Meting van signaalfrequentie: Om ervoor te zorgen dat het signaal niet wordt gemist, is een externe interrupt de ideale keuze.
Gegevensdecodering: Op het gebied van afstandsbedieningstoepassingen is het, om de ontwerpkosten te verlagen, vaak nodig om software te gebruiken voor het decoderen van verschillende gecodeerde gegevens, zoals het decoderen van Manchester- en PWM-codering.
Sleuteldetectie en ontwaken van het systeem: Voor een MCU die in de slaapstand gaat, moet deze doorgaans worden gewekt via een externe interrupt. De meest basale vorm is een sleutel, en de niveauverandering wordt gegenereerd door de actie van de sleutel.
4. Communicatie-interface: De door MCU geleverde communicatie-interface omvat over het algemeen een SPI-interface, UART, I2C-interface, enz., die als volgt worden beschreven:
SPI-interface: Dit type interface is de meest elementaire communicatiemethode die door de meeste MCU's wordt geboden. De datatransmissie wordt gecontroleerd door een synchrone klok. De signalen omvatten: SDI (seriële data-invoer), SDO (seriële data-uitvoer), SCLK (seriële klok) en Ready-signaal; in sommige gevallen is er mogelijk geen gereedsignaal; dit type interface kan werken in Master-modus of Slave-modus, het populaire gezegde is om te zien wie het kloksignaal levert, de partij die de klok levert is de Master en de andere partij is dan Slaver.
UART (Universal Asynchronous Receiver Transmit): Het is de meest elementaire asynchrone transmissie-interface. De signaallijnen zijn alleen Rx en Tx. Het basisgegevensformaat is: Startbit + Databit (7-bits/8-bits) + Pariteitsbit (Even, Oneven of Geen) + Stopbit (1~2Bit). De tijd die één bit aan gegevens nodig heeft, wordt Baud Rate (baudsnelheid) genoemd.
Voor de meeste MCU's kunnen de lengte van de databits, de datacontrolemethode (oneven controle, even controle of geen controle), de lengte van de stopbit (stopbit) en de baudsnelheid flexibel worden ingesteld via programmering. Zeker. De meest gebruikte manier van dit type interface is om te communiceren met de seriële poort van de pc.
I2C-interface: I2C is een door Philips ontwikkeld datatransmissieprotocol dat ook wordt geïmplementeerd door twee signalen: SDAT (seriële data-invoer en -uitvoer) en SCLK (seriële klok). Het grootste voordeel is dat er meerdere apparaten op deze bus kunnen worden aangesloten, die via adressen kunnen worden geïdentificeerd en benaderd; een van de grootste voordelen van de I2C-bus is dat het erg handig is om software te gebruiken om dit via de IO-poort te realiseren, en dat de transmissiesnelheid volledig wordt gecontroleerd door SCLK. De besturing kan snel of langzaam zijn, in tegenstelling tot de UART-interface , dat strenge snelheidseisen stelt.
5. Watchdog (watchdog-timer): Watchdog is ook een basisconfiguratie van de meeste MCU's (sommige 4-bit MCU's hebben deze functie mogelijk niet), en de meeste MCU Watchdogs kunnen alleen toestaan dat programma's ze resetten en kunnen ze niet resetten. Het is gesloten (sommige worden ingesteld wanneer het programma wordt ingebrand, zoals de MCU van de Microchip PIC-serie), en sommige MCU's bepalen of ze het op een specifieke manier moeten openen, zoals de KS57-serie van Samsung, zolang het programma toegang heeft tot het Watchdog-register , wordt automatisch ingeschakeld en kan niet meer worden uitgeschakeld. Over het algemeen kan de resettijd van de watchdog per programma worden ingesteld. De meest elementaire toepassing van Watchdog is het bieden van zelfherstelmogelijkheden zodat de MCU crasht als gevolg van onverwachte storingen.
Programmeren van microcontrollers
Er is een groot verschil tussen het programmeren van MCU-programma's en het programmeren van pc-programma's. Hoewel op C gebaseerde MCU-ontwikkeltools steeds populairder worden, is assembleertaal voor een efficiënte programmacode en een ontwerper die graag assembler gebruikt nog steeds de meest beknopte en efficiënte programmeertaal.
Voor MCU-programmering kan worden gezegd dat het basisframework ongeveer hetzelfde is, over het algemeen verdeeld in drie delen: initialisatiegedeelte (dit is het grootste verschil tussen MCU-programmering en pc-programmering), hoofdprogramma-looplichaam en interruptverwerkingsprogramma, die respectievelijk als volgt uitgelegd:
1. Initialisatie: Voor het ontwerp van alle MCU-programma's is initialisatie de meest fundamentele en belangrijkste stap, die doorgaans het volgende omvat:
Masker alle interrupts en initialiseer de stackpointer: het initialisatiegedeelte wil over het algemeen niet dat er interrupts optreden.
Maak het RAM-gebied van het systeem leeg en geef geheugen weer: Hoewel het soms niet helemaal nodig is, wordt het vanuit het perspectief van betrouwbaarheid en consistentie, vooral om onbedoelde fouten te voorkomen, aanbevolen om goede programmeergewoonten te ontwikkelen.
Initialisatie van de IO-poort: Stel, afhankelijk van de toepassingsvereisten van het project, de invoer- en uitvoermodus van de relevante IO-poort in. Voor de ingangspoort moet u de pull-up- of pull-down-weerstand instellen; voor de uitgangspoort moet u het uitgangsniveau output instellen om onnodige fouten te voorkomen.
Interrupt-instellingen: Voor alle interruptbronnen die in het project moeten worden gebruikt, moeten ze zijn ingeschakeld en moeten de triggervoorwaarden voor interrupts worden ingesteld, terwijl voor redundante interrupts die niet worden gebruikt, ze moeten worden uitgeschakeld.
Initialisatie van andere functionele modules: voor alle perifere functionele modules van de MCU die moeten worden gebruikt, moeten overeenkomstige instellingen worden gemaakt volgens de applicatievereisten van het project, zoals UART-communicatie, baudsnelheid, datalengte, verificatiemethode en stop Bit moet worden ingesteld. De lengte, enz., en voor de Programmer Timer moet u de klokbron, frequentieverdeling en herlaadgegevens instellen, enz.
Parameterinitialisatie: Nadat de initialisatie van MCU-hardware en -bronnen is voltooid, is de volgende stap het initialiseren van enkele variabelen en gegevens die in het programma worden gebruikt. De initialisatie van dit onderdeel moet worden ontworpen volgens het specifieke project en de algehele opzet van het programma. Voor sommige toepassingen die EEPROM gebruiken om geprefabriceerde projectgegevens op te slaan, wordt aanbevolen om tijdens de initialisatie de relevante gegevens naar het RAM van de MCU te kopiëren om de toegangssnelheid van het programma tot de gegevens te verbeteren en het stroomverbruik van het systeem te verminderen (in principe , toegang tot de externe EEPROM zal het stroomverbruik van de voeding verhogen).
2. De lusbody van het hoofdprogramma: De meeste MCU's draaien lange tijd continu, dus de hoofdprogrammabody is in principe op een cyclische manier ontworpen. Voor toepassingen met meerdere werkmodi kunnen er meerdere A-luslichamen tussen elkaar worden geconverteerd via de statusvlag. Voor de hoofdinhoud van het programma zijn over het algemeen de volgende modules gerangschikt:
Rekenprogramma: Het rekenprogramma is over het algemeen tijdrovend en is daarom resoluut gekant tegen elke interruptverwerking, vooral vermenigvuldigings- en delingsbewerkingen.
Verwerkingsprogramma's met lage real-time vereisten of geen real-time vereisten;
Displaytransmissieprogramma: voornamelijk voor toepassingen met externe LED- en LCD-driver.
3. Interrupt-verwerkingsprogramma: het interrupt-programma wordt voornamelijk gebruikt voor het verwerken van taken en gebeurtenissen met hoge real-time vereisten, zoals detectie van externe plotselinge signalen, detectie en verwerking van sleutels, timingtelling, scannen van LED-displays, enz.
Over het algemeen moet het interruptprogramma de code zo beknopt en kort mogelijk houden. Voor functies die niet in realtime hoeven te worden verwerkt, kunt u de triggervlag in de interrupt instellen, waarna het hoofdprogramma de specifieke transactie zal uitvoeren – dit is erg belangrijk. Vooral voor MCU's met laag vermogen en lage snelheid is het noodzakelijk om te zorgen voor een tijdige reactie op alle interrupts.
4. Voor de indeling van verschillende taakorganen hebben verschillende MCU's verschillende verwerkingsmethoden:
Voor MCU-toepassingen met lage snelheid en laag vermogen (Fosc=32768Hz) bijvoorbeeld, waarbij dergelijke projecten allemaal draagbare apparaten zijn en gewone LCD-schermen gebruiken, vereist de reactie op knoppen en schermen hoge real-time prestaties, dus over het algemeen zijn getimede interrupts nodig. worden gebruikt om knopacties en gegevensweergave te verwerken; en voor snelle MCU's, zoals Fosc>1MHz-toepassingen, kan de MCU, aangezien hij op dit moment voldoende tijd heeft om de hoofdtekst van de programmalus uit te voeren, alleen worden onderbroken in de overeenkomstige set. Stel verschillende triggervlaggen in en plaats alle taken in de hoofdtekst van het programma om uit te voeren.
5. Bij het programmeerontwerp van MCU is er nog een punt dat speciale aandacht behoeft:
Om gelijktijdige toegang of instelling van dezelfde variabele of gegevens in de interrupt en de hoofdtekst van het programma te voorkomen. Een effectieve preventieve methode is om de verwerking van dergelijke gegevens in een module te regelen en te bepalen of de relevante bewerking van de gegevens moet worden uitgevoerd door de triggervlag te beoordelen; terwijl in andere programma-onderdelen (voornamelijk interrupts) de gegevens die moeten worden verwerkt, de verwerkingsplaats alleen de geactiveerde vlag instelt. - Dit zorgt ervoor dat de uitvoering van de gegevens voorspelbaar en uniek is.
Ontwikkelingsvaardigheden voor microcontrollers
1. Hoe u bugs in het programma kunt verminderen
Om programmafouten te verminderen, moet u eerst de volgende beheerparameters voor buiten het bereik overwegen waarmee u rekening moet houden tijdens de werking van het systeem.
Fysieke parameters: Deze parameters zijn voornamelijk de invoerparameters van het systeem, inclusief excitatieparameters, bedrijfsparameters tijdens acquisitie en verwerking, en resultaatparameters aan het einde van de verwerking.
Bronparameters: Deze parameters zijn voornamelijk de bronnen van circuits, apparaten en functionele eenheden in het systeem, zoals geheugencapaciteit, lengte van opslageenheid en stapeldiepte.
Toepassingsparameters: Deze toepassingsparameters vertegenwoordigen vaak de toepassingsomstandigheden van sommige microcomputers en functionele eenheden met één chip. Procesparameters: Verwijst naar de parameters die op een ordelijke manier veranderen tijdens de werking van het systeem.
2. Hoe u de efficiëntie van programmeercode in de C-taal kunt verbeteren
Het is een onvermijdelijke trend in de ontwikkeling en toepassing van microcomputers met één chip om C-taal te gebruiken om het microcomputerprogramma met één chip te ontwerpen. Als u de hoogste efficiëntie wilt bereiken bij het programmeren in C, kunt u het beste bekend zijn met de C-compiler die u gebruikt. Test eerst het aantal instructieregels in assembleertaal dat overeenkomt met elke gecompileerde C-taal, zodat u duidelijk de efficiëntie kunt kennen. Gebruik bij het programmeren in de toekomst de instructie met de hoogste compilatie-efficiëntie. Elke C-compiler zal bepaalde verschillen hebben, dus de compilatie-efficiëntie zal ook anders zijn. De codelengte en uitvoeringstijd van een uitstekende embedded systeem C-compiler zijn slechts 5-20% langer dan hetzelfde functieniveau geschreven in assembleertaal.
Voor complexe projecten met een korte ontwikkeltijd kan de C-taal worden gebruikt, maar het uitgangspunt is dat u zeer bekend bent met de C-taal en de C-compiler van het MCU-systeem, en speciale aandacht besteedt aan de gegevenstypen en algoritmen die het C-compilersysteem gebruikt. kan ondersteunen. Hoewel C-taal de meest voorkomende taal op hoog niveau is, zijn de C-taalcompilatiesystemen van verschillende MCU-fabrikanten verschillend, vooral wat betreft de werking van enkele speciale functiemodules. Dus als u deze functies niet begrijpt, zullen er veel problemen optreden bij het debuggen, wat zal leiden tot een lagere uitvoeringsefficiëntie dan bij assembleertaal.
3. Hoe het anti-interferentieprobleem van de single-chip microcomputer op te lossen De meest effectieve manier om interferentie te voorkomen is het verwijderen van de interferentiebron en het afsnijden van het interferentiepad, maar dit is vaak moeilijk om dit te doen, dus het hangt alleen af van of het anti-interferentievermogen van de microcomputer met één chip sterk genoeg is. Terwijl het anti-jammingvermogen van het hardwaresysteem wordt verbeterd, wordt de software-anti-jamming gekenmerkt door zijn flexibele ontwerp,