Service Hotline
6
Microcontroller-programmering
Er is een groot verschil tussen het schrijven van programma's voor microcontrollers en het schrijven van programma's voor pc's. Hoewel C-gebaseerde ontwikkeltools voor microcontrollers steeds populairder worden, blijft assembler de meest beknopte en effectieve programmeertaal voor ontwerpers die efficiënte programmacode willen schrijven en graag met assembler werken.
Voor MCU-programmering is het basisraamwerk grofweg hetzelfde en is het over het algemeen onderverdeeld in drie delen: het initialisatiegedeelte (dit is het grootste verschil tussen MCU-programmering en pc-programmering), de hoofdprogrammalus en de interruptafhandeling, die hieronder worden uitgelegd:
1. Initialisatie:Bij het ontwerpen van alle MCU-programma's is initialisatie de meest fundamentele en belangrijke stap, die over het algemeen het volgende omvat:
Maskeer alle interrupties en initialiseer de stackpointer:Het initialisatiegedeelte wil doorgaans geen onderbrekingen laten optreden.
Wis het RAM-geheugen van het systeem en toon het geheugen:Hoewel het soms niet absoluut noodzakelijk is, is het vanuit het oogpunt van betrouwbaarheid en consistentie, met name om onverwachte fouten te voorkomen, aan te raden goede programmeergewoonten te ontwikkelen.
Initialisatie van de IO-poort:Stel de invoer- en uitvoermodus van de betreffende I/O-poort in op basis van de toepassingsvereisten van het project. Voor de invoerpoort moet u de pull-up- of pull-down-weerstand instellen; voor de uitvoerpoort moet u het initiële uitgangsniveau instellen om onnodige fouten te voorkomen.
Onderbrekingsinstellingen:Alle interruptbronnen die in het project gebruikt moeten worden, moeten ingeschakeld zijn en de triggercondities voor de interrupt moeten ingesteld zijn. Redundante interrupts die niet gebruikt worden, moeten uitgeschakeld zijn.
Initialisatie van andere functionele modules:Voor alle perifere functiemodules van de microcontroller die gebruikt moeten worden, moeten de bijbehorende instellingen worden gemaakt volgens de eisen van de projecttoepassing. Zo moeten bijvoorbeeld voor UART-communicatie de baudrate, de datalengte, de verificatiemethode en de stopbitlengte worden ingesteld. Voor de programmeertimer moeten de klokbron, het aantal frequentiedelingen en de herlaaddata worden ingesteld.
Initialisatie van parameters:Na de initialisatie van de MCU-hardware en -bronnen 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 op basis van het specifieke project en de algehele structuur van het programma. Voor sommige toepassingen die EEPROM gebruiken om vooraf gedefinieerde projectgegevens op te slaan, is het aan te raden de relevante gegevens tijdens de initialisatie naar het RAM-geheugen van de MCU te kopiëren. Dit verbetert de toegangssnelheid van het programma tot de gegevens en vermindert het stroomverbruik van het systeem (in principe verhoogt toegang tot externe EEPROM het stroomverbruik van de voeding).
2. Hoofdprogrammalus:De meeste microcontrollers werken continu gedurende lange tijd, dus hun hoofdprogramma's zijn in principe ontworpen als een lus. Voor applicaties met meerdere werkingsmodi kunnen er meerdere lusstructuren zijn, die worden gewisseld via statusvlaggen. De hoofdprogrammastructuur is over het algemeen als volgt opgebouwd:
Berekeningsprocedure:Rekenprogramma's zijn over het algemeen tijdrovend, dus we zijn er sterk op tegen om ze in een interrupt uit te voeren, met name vermenigvuldigings- en deelbewerkingen.
Het verwerken van programma's met lage of geen realtime-vereisten;
Toon overdrachtsprocedure:Voornamelijk bedoeld voor toepassingen met externe LED- en LCD-drivers.
3. Interrupt-handler:Interruptprogramma's worden voornamelijk gebruikt voor het afhandelen van taken en gebeurtenissen met hoge realtime-eisen, zoals het detecteren van plotselinge externe signalen, het detecteren en verwerken van knoppen, het timen van tellingen, het scannen van LED-displays, enzovoort.
Onder normale omstandigheden moet het interruptprogramma de code zo beknopt en kort mogelijk houden. Voor functies die niet in realtime hoeven te worden verwerkt, kan de trigger-vlag in de interrupt worden ingesteld, waarna het hoofdprogramma specifieke transacties uitvoert. Dit is vooral belangrijk voor energiezuinige en trage microcontrollers, die een tijdige reactie op alle interrupts moeten garanderen.
4. Voor de rangschikking van verschillende taaklichamen hebben verschillende microcontrollers verschillende verwerkingsmethoden:
Bijvoorbeeld, voor toepassingen met een microcontroller met lage snelheid en laag stroomverbruik (Fosc=32768Hz), waarbij het vaak gaat om handheld-apparaten met gewone lcd-schermen, is een snelle reactie op toetsaanslagen en de weergave ervan essentieel. Daarom worden getimede interrupts doorgaans gebruikt om toetsaanslagen te verwerken en gegevens weer te geven. Voor toepassingen met een hoge snelheid, zoals bij Fosc>1MHz, heeft de microcontroller voldoende tijd om de hoofdprogrammalus uit te voeren. In dat geval kan de microcontroller volstaan met het instellen van verschillende triggerflags in de corresponderende interrupts en het uitvoeren van alle taken in het hoofdprogramma.
5. Bij het programmeren van microcontrollers is er één ding dat speciale aandacht vereist:
Het is noodzakelijk om te voorkomen dat dezelfde variabele of data tegelijkertijd wordt benaderd of ingesteld in de interrupt- en hoofdprogramma-onderdelen. Een effectieve preventiemethode is om de verwerking van dergelijke data in een module te organiseren en te bepalen of de bijbehorende bewerkingen op de data moeten worden uitgevoerd door de trigger-vlag te controleren; in andere programmaonderdelen (vooral interrupts) worden trigger-vlaggen alleen ingesteld waar de data verwerkt moet worden. --Dit zorgt ervoor dat de data-uitvoering voorspelbaar en uniek is.
7
Samenvatting van microcontrollerprogrammering door een ingenieur
1,Ontwikkel de goede gewoonte om samen te vatten. Samenvatten is niet alleen een samenvatting van je eigen leerproces, maar ook een manier om het te herhalen en te verdiepen. Bovendien kun je zo voorkomen dat je dezelfde fouten de volgende keer maakt.
2,Voordat je een programma schrijft, moet je eerst een goed begrip hebben van het project, het doorgronden en een algemeen raamwerk schetsen. Het is erg belangrijk om zorgvuldig na te denken over de structuur en wat de meest logische indeling is. Je moet analyseren welke module je als eerste wilt aanpakken, de specifieke stappen van elke module, hoe je elke functie benoemt, de verbinding met andere modules, enzovoort. Het is een goed idee om een stuk papier te pakken en belangrijke stappen op te schrijven.
3,Voor modulair programmeren in de C-taal moet je eerst elke module opsplitsen, module voor module programmeren, een volgorde bepalen, deze volgorde volgen en pas de volgende module schrijven nadat de vorige module succesvol is afgerond. Voor headerbestanden geldt dat je het headerbestand van de module schrijft nadat de module is geschreven.
4,Negeer waarschuwingen niet wanneer ze verschijnen. Dit betekent dat er iets mis is met het programma. Het is noodzakelijk om de bron te achterhalen en een oplossing te vinden. Wees specifiek bij het zoeken naar bronnen. Je kunt op internet zoeken naar informatie hierover, of anderen om advies vragen. Bijvoorbeeld: de hoofdfunctie van een ander project is eigenlijk aan dit project toegevoegd. Er zijn dubbele functienamen. Er zijn ook redenen om de experimentele verschijnselen te analyseren en stap voor stap te werk te gaan. Er is mogelijk ook een verkeerde interface geselecteerd bij het definiëren van de poort. Soms is het goed om even pauze te nemen en erover na te denken als je er echt niet uitkomt. Hoe simpel het ook lijkt, je moet er aandacht aan besteden, want er kunnen fouten in zitten.
Bij de ontwikkeling van microcontroller-applicaties blijven problemen zoals code-efficiëntie, storingsbestendigheid en betrouwbaarheid van microcontrollers een aandachtspunt. Hieronder vatten we een aantal basisvaardigheden samen die men moet beheersen bij de ontwikkeling van microcontrollers.
8
Microcontroller-ontwikkelingsvaardigheden
1.Hoe verminder je het aantal bugs in programma's?
Om programmafouten te verminderen, moet u allereerst rekening houden met de volgende beheerparameters die buiten het normale bereik vallen en die tijdens de werking van het systeem in acht moeten worden genomen.
-
Fysieke parameters: Deze parameters zijn hoofdzakelijk invoerparameters van het systeem, waaronder excitatieparameters, operationele parameters tijdens de acquisitieverwerking en resultaatparameters aan het einde van de verwerking.
-
Resourceparameters: Deze parameters hebben voornamelijk betrekking op de resources van circuits, apparaten en functionele eenheden in het systeem, zoals geheugencapaciteit, lengte van de opslageenheid en stapeldiepte.
-
Toepassingsparameters: Deze toepassingsparameters verschijnen vaak als toepassingsvoorwaarden van bepaalde microcontrollers en functionele eenheden. Procesparameters: verwijzen naar de parameters die op een ordelijke manier veranderen tijdens de werking van het systeem.
2.Hoe verbeter je de efficiëntie van C-programmeercode?
Het gebruik van de programmeertaal C voor microcontrollers is een onvermijdelijke trend in de ontwikkeling en toepassing van microcontrollers. Om maximale efficiëntie te bereiken bij het programmeren in C, is het belangrijk om vertrouwd te raken met de C-compiler die u gebruikt. Test eerst het aantal regels assembly-code dat overeenkomt met elke C-compilatie, zodat u de efficiëntie duidelijk kunt inschatten. Gebruik bij toekomstig programmeren de code met de hoogste compilatie-efficiëntie. Elke C-compiler heeft bepaalde verschillen, waardoor de compilatie-efficiëntie ook verschilt. De codelengte en uitvoeringstijd van een uitstekende C-compiler voor embedded systemen zijn slechts 5-20% langer dan dezelfde functie geschreven in assembly-taal.
Voor complexe projecten met een strakke ontwikkeltijd kan de C-taal worden gebruikt, maar de voorwaarde is dat u zeer vertrouwd bent met de C-taal en de C-compiler van het MCU-systeem. Besteed speciale aandacht aan de gegevenstypen en algoritmen die door het C-compilatiesysteem worden ondersteund. Hoewel C de meest gebruikte programmeertaal op hoog niveau is, hanteren verschillende MCU-fabrikanten verschillende C-compilatiesystemen, met name voor de werking van bepaalde specifieke functiemodules. Als u deze aspecten niet begrijpt, zult u tijdens het debuggen veel problemen ondervinden, wat zal leiden tot een lagere uitvoeringsefficiëntie dan bij assemblytaal.
3.Hoe los je het anti-interferentieprobleem van een microcontroller op?De meest effectieve manier om interferentie te voorkomen is door de interferentiebron te verwijderen en het interferentiepad te blokkeren, maar dit is vaak moeilijk. Daarom kunnen we alleen beoordelen of het anti-interferentievermogen van de microcontroller voldoende sterk is. Terwijl het anti-interferentievermogen van hardwaresystemen wordt verbeterd, krijgt softwarematige anti-interferentie steeds meer aandacht vanwege het flexibele ontwerp, de besparing van hardwarebronnen en de goede betrouwbaarheid.
Het meest voorkomende verschijnsel van interferentie met microcontrollers is het resetten van het programma. Wanneer een programma echter onbeheersbaar wordt, kunnen softwaretraps en watchdogs worden gebruikt om het programma terug te brengen naar de resettoestand. Daarom is het voor microcontrollersoftware van cruciaal belang om interferentie te weerstaan door de resettoestand correct af te handelen.
Microcontrollers beschikken doorgaans over een aantal vlagregisters waarmee de oorzaak van een reset kan worden vastgesteld. Daarnaast kunnen er ook zelf vlaggen in het RAM-geheugen worden opgeslagen. Telkens wanneer het programma wordt gereset, kunnen verschillende resetoorzaken worden bepaald aan de hand van deze vlaggen. Op basis van de verschillende vlaggen kan er ook direct naar het betreffende programma worden gesprongen. Hierdoor kan het programma continu blijven draaien en merkt de gebruiker tijdens het gebruik niet dat het programma is gereset.
4.Hoe test je de betrouwbaarheid van een microcontrollersysteem?Wanneer het ontwerp van een microcontrollersysteem is voltooid, zullen er verschillende testonderdelen en -methoden zijn voor verschillende microcontrollersysteemproducten, maar sommige moeten wel getest worden:
- Test de volledigheid van de softwarefunctionaliteit van de microcontroller.
- Testen van inschakelen en uitschakelen
- Verouderings test
- Tests zoals ESD en EFT
Soms kunnen we ook de schade simuleren die tijdens menselijk gebruik kan ontstaan. We kunnen bijvoorbeeld de contactpoort van de microcontroller opzettelijk tegen het menselijk lichaam of kleding wrijven om de antistatische eigenschappen te testen. Of we kunnen een krachtige boormachine in de buurt van de microcontroller gebruiken om het vermogen tegen elektromagnetische interferentie te testen.
Samenvattend is de microcomputer op één chip een belangrijk aspect geworden van computerontwikkeling en -toepassingen. Het grote belang van de toepassing van microcomputers op één chip ligt in het feit dat ze de traditionele ideeën en methoden voor het ontwerpen van besturingssystemen fundamenteel veranderen.
De meeste functies die voorheen met analoge of digitale circuits moesten worden uitgevoerd, kunnen nu via software met behulp van microcontrollers worden gerealiseerd. Deze vorm van besturingstechnologie, waarbij software de hardware vervangt, wordt ook wel microbesturingstechnologie genoemd en is een revolutie in de traditionele besturingstechnologie.
Bovendien moeten we tijdens het ontwikkelings- en toepassingsproces vaardigheden verwerven en de efficiëntie verbeteren, zodat het voor een breder scala aan doeleinden kan worden gebruikt.
9
Samenvatting van de chipwerking
De bewerkingen op de chip zijn voornamelijk bewerkingen op de registers van de chip. De registers op de chip hebben hun eigen unieke adressen die in het geheugen zijn opgeslagen, en de bewerkingen op de corresponderende adressen worden uitgevoerd. Bij het bestuderen van de chip is het belangrijk om eerst het timingdiagram te bekijken, vervolgens de bijbehorende registers te begrijpen, te begrijpen hoe ze werken, de benodigde poorten te definiëren (die door het programma kunnen worden herkend) en procedures voor schrijf- en leesbewerkingen te schrijven.
Hoe schrijf je data naar de chip, hoe lees je data uit, en via welke poort moet je data invoeren of uitlezen (het belangrijkste).
Bij het aansluiten van chips via een bus is het essentieel om eerst het busprotocol te begrijpen. De chip die op de I2C-bus is aangesloten, stuurt de andere chips voornamelijk via deze bus aan.
1,Eén 74hc595 in het rooster wordt gebruikt voor kolomselectie, en de andere twee voor kleurselectie. Het rooster is equivalent aan een verzameling diodes.
De diode licht alleen op als aan de ene kant een hoog niveau wordt aangelegd en aan de andere kant een laag niveau. Het verschil is dat als aan één kant een ander niveau wordt aangelegd, er verschillende kleuren oplichten.
De timer-werkmodus selecteren: De vier hoogste bits stellen timer T1 in en de vier laagste bits stellen timer T0 in. De laatste twee cijfers van elke modus bepalen vervolgens de werkmodus. Let bij het instellen van twee timers op het gebruik van 'of' (|). Let er bij het gebruik van interrupts op dat de interrupts die gewist moeten worden, na het binnenkomen van de interrupt, gewist worden.
2,Seriële poorttransceiver: De baudrate wordt over het algemeen ingesteld in modus 2 (automatisch terugzetten naar de beginwaarde). Omdat verschillende apparaten verschillende dataverwerkingscapaciteiten hebben, is het instellen van de baudrate vooral bedoeld om rekening te houden met apparaten met een lage snelheid en om met elkaar te communiceren. De interruptvlag moet softwarematig worden gewist. Bij het instellen van de seriële poortinterrupt kan deze, ongeacht of deze wordt gegenereerd door verzenden of ontvangen, de interruptfunctie activeren. Let daarom goed op bij het instellen van de interruptfunctie. (Naar eigen inzicht kunt u een functie instellen, bijvoorbeeld als hostcomputer of als slavecomputer).
Als je een interrupt gebruikt om te verzenden, moet je eerst uitzoeken hoe je de interrupt kunt activeren. Je moet de gegevens dus eerst één keer verzenden voordat je de interrupt kunt activeren. Er kan slechts één byte tegelijk worden verzonden en de volgende bit kan pas worden verzonden nadat TI is ingesteld.
3,De PCF8591AD-conversiechip heeft vier ingangskanalen. Bij het uitlezen van de PCF8591 wordt het gewenste kanaal geselecteerd en de spanning van dat kanaal afgelezen. De geconverteerde data wordt in de chip opgeslagen en vervolgens uitgelezen. Bij het uitlezen wordt eerst het adres van de chip geschreven, vervolgens het subadres van het apparaat (0x40 | kanaalnummer) en daarna de uitgelezen data.
4,Da-conversie houdt in dat eerst het apparaatadres in de chip wordt geschreven, vervolgens het subadres (0x40) en daarna de te converteren digitale waarde. De chipinformatie voor het apparaatadres wordt ingevoerd.
5,Op het lcd-scherm worden de gegevens, nadat ze zijn ingevoerd en weergegeven, permanent weergegeven zonder continue vernieuwing. Als u de gegevens wilt wijzigen, kunt u ze alleen opnieuw invoeren.
6,Bij de DS1302 klokchip wordt, wanneer data wordt gelezen, de eerste data gelezen op de dalende flank van de achtste klokpuls, waarna de volgende uitvoer wordt voorbereid. Let goed op de schrijfmethode van het programma en de locatie van de retourwaarde.
7,Bij de DS1302 moet je eerst het register specificeren en er vervolgens data naar schrijven. Het register op de chip geeft het adres aan. (Ik begrijp het schrijfbeveiligingsprogramma nog steeds niet helemaal. Wordt er niet altijd geschreven? Waarom blijft de schrijfbeveiliging dan ingeschakeld?)
(Volgens de vorige held kun je een vlag instellen na de initialisatietijd. Als deze vlag aanwezig is, hoeft de tijd niet opnieuw te worden geïnitialiseerd. Als de stroom echter wordt uitgeschakeld, kan het RAM-geheugen van de microcontroller deze vlag niet opslaan. Je kunt daarom het RAM-geheugen van de DS1302 gebruiken om de vlag op te slaan en deze na het inschakelen weer uit te lezen. Ik ben zelf ook een beginner en ben van plan om binnenkort met de DS1302 aan de slag te gaan. Ik weet niet zeker of dit klopt en heb het nog niet geïmplementeerd. Graag meer informatie.)
8,Het is verstandig om de initialisatie op te schrijven, voor het geval je het later vergeet. Let er soms op of de laagste of de hoogste bit eerst wordt verwerkt bij het lezen of schrijven; dit kun je aflezen uit het timingdiagram.
9,Bij een infraroodzender/ontvanger wordt tijdens de ontvangst bepaald of het om een hoog of laag signaal gaat op basis van de tijd tussen twee dalende flanken. Bij het schrijven van een programma gebruik je eerst een timer om de tijd te meten, deze op te slaan en vervolgens om te zetten naar binair (lees meer over hoe je dit programma schrijft, het is erg nuttig).
10,Stappenmotor: Voornamelijk gebruikt voor schakelen. Het koppel van de stappenmotor neemt af naarmate de rotatiesnelheid toeneemt. Hij wordt vooral gebruikt voor de automatische aanvoer van onderdelen die op werktuigmachines worden bewerkt. Hij kan ook worden gebruikt op plaatsen waar hogere precisie vereist is.
Een stappenmotor is een open-lus regelelement dat elektrische pulssignalen omzet in hoekverplaatsing of lineaire verplaatsing. Onder niet-overbelaste omstandigheden zijn de snelheid en de stoppositie van de motor alleen afhankelijk van de frequentie en het aantal pulsen van het pulssignaal en worden ze niet beïnvloed door veranderingen in de belasting. Wanneer de stappenmotordriver een pulssignaal ontvangt, stuurt deze de stappenmotor aan om in de ingestelde richting te draaien onder een vaste hoek, de zogenaamde "staphoek". De rotatie verloopt stapsgewijs onder een vaste hoek. De hoekverplaatsing kan worden geregeld door het aantal pulsen te regelen voor een nauwkeurige positionering; tegelijkertijd kunnen de snelheid en de acceleratie van de motorrotatie worden geregeld door de pulsfrequentie te regelen voor snelheidsregeling.
11,Servomotor: (servomotor) verwijst naar de motor die de werking van mechanische componenten in een servosysteem aanstuurt. Het is een indirecte transmissie-inrichting die de motor ondersteunt. Servomotoren kunnen snelheid en positie zeer nauwkeurig regelen en kunnen spanningssignalen omzetten in koppel en rotatiesnelheid om objecten aan te drijven. De rotorsnelheid van de servomotor wordt geregeld door het ingangssignaal en kan snel reageren. In automatische besturingssystemen wordt de servomotor gebruikt als actuator en kenmerkt zich door een kleine elektromechanische tijdconstante, hoge lineariteit en een lage startspanning. De servomotor zet het ontvangen elektrische signaal om in een hoekverplaatsing of hoeksnelheid op de motoras. Ze worden onderverdeeld in twee categorieën: DC- en AC-servomotoren. Het belangrijkste kenmerk is dat er geen rotatie plaatsvindt wanneer de signaalspanning nul is en dat de rotatiesnelheid constant afneemt naarmate het koppel toeneemt. DC-motor: Breed toepassingsgebied, voornamelijk in kleine auto's.
Disclaimer: Dit artikel is overgenomen uit "International Electronic Business Information". Dit artikel geeft uitsluitend de persoonlijke mening van de auteur weer en vertegenwoordigt niet de standpunten van Sacco Micro en de branche. Het is alleen bedoeld voor herpublicatie en verspreiding en ondersteunt de bescherming van intellectuele eigendomsrechten. Vermeld bij herpublicatie de oorspronkelijke bron en auteur. Neem bij inbreuk contact met ons op zodat we het artikel kunnen verwijderen.
Telefoonnummer van het bedrijf: +86-0755-83044319
Fax: +86-0755-83975897
E-mail: 1615456225@qq.com
Vraag: 3518641314 Manager Li
Vraag: 332496225 Manager Qiu
Adres: Kamer 809, Gebouw C, Zhantao Technologiegebouw, Minzhilaan 1079, Longhua Nieuw District, Shenzhen




粤公网安备44030002007346号