Manipulatie van de microcontroller Register (5 / 6 stap)

Stap 5: Dus wat is het punt dan?

Het moet vrij duidelijk dat schrijven rechtstreeks naar de registers ruimte in uw geheugen chip besparen kunt. De verkorte schets ook kost minder tijd om uit te voeren, gewoon omdat er geen bibliotheken voor elke functie-aanroep opzoeken. Voor de overgrote meerderheid van de toepassingen hoeft dit niet echt gebruik omdat veel ruimte of tijd elimineren van een functie zoals pinMode() zullen niet opslaan in een complexe schets. In sommige toepassingen verwerkingstijd is echter een grote zorg, en inkorten van de hoeveelheid verspilde tijd in de bibliotheekbestanden zorgt voor meer klokcycli beschikbaar te zijn voor andere dingen. Wat ik bedoel met dat is dat zelfs als u moet een bibliotheekfunctie opnemen, en nemen daarom minder ruimte in het geheugen mee, als je het niet noemen het zeer vaak en in plaats daarvan rechtstreeks gebruik van de registers, ten minste besparen u tijd (maar niet ruimte) door niet opzoeken.

Een andere optie is de mogelijkheid om te pinnen gebruiken op manieren die ze kunnen niet oorspronkelijk de bedoeling zijn geweest, maar zonder de bijwerkingen. Bijvoorbeeld vergelijken de pinnen op de chipKIT Uno32 beschikken over een extra register gekoppeld die banden in de uitvoer vergelijk module (OCMP) genaamd de output met PWM gekoppeld register (OCxR). De OCMP heeft sommige meer registers die te maken hebben met de timing van het PWM-signaal, maar de OCxR is het werkelijke signaal uitgang register, vergelijkbaar met de LATx (PIC32) of PORTx (ATMEL) registers. Het PWM-periode wordt berekend door vermenigvuldiging van... (makkelijk maar verwarrend math stuff hier)... en dat de waarde wordt ingevoerd in de periode registreren (wrikken). Wrikken vertelt het timer-register (TMRy) die zorgt voor de specifieke OCMP wanneer opnieuw terug naar 0, maar je moet een extra er 1 bij optellen. De taakcyclus wordt dan weggeschreven naar het secundaire Vergelijk register (OCxRS), die in feite een buffer omdat deze waarde bijna onmiddellijk wordt overgedragen aan de vergelijken (OCxR), maar u kunt niet het rechtstreeks schrijven omdat OCxR is alleen-lezen.

Voorbeeld: als PRy een waarde van 5 heeft en OCxRS is geladen met een waarde van 2, OCxR is voor het eerst geladen met 2 ook. TMRy start tellen bij 0. Op 1, OCx uitgangen van een hoge waarde en blijft daar. Op tijdstip 2, verandert er niets, OCx hoog voor 1 telling is geweest. Tegelijkertijd 3 druppels OCx laag sinds het hoog voor 2 graven. Tijde 3, 4 en 5 verandert er niets maar TMRy = loeren, zodat het wordt opnieuw ingesteld en terug op 0 op de volgende tellen start. 1 kloktik passeert, die is telling 0 opnieuw, en tellen 1, OCx uitgangen weer hoog. Hier is figuur 16-18 uit sectie 16: Output vergelijk van het PIC32 familie handleiding:


PRy instelt op 5 en OCxRS naar 2 geeft eigenlijk een duty-cycle van 33% (2/6) en niet 40% (2/5). Dat is waar die extra 1 komt. Het wordt toegevoegd aan de waarde van de Koevoet. Dit is slechts een eenvoudig voorbeeld, en als wrikken en OCxRS veel groter waren, het verschil in %'s zou veel, veel kleinere.

Nou, dat simpel was het niet was? Ja, no. hoorde ik de versnellingen slijpen tot stilstand op "Bijvoorbeeld..." Je moet hebben gezien de blik op de gezichten van mijn klasgenoten toen de professor ons dit de eerste keer toonde. Maar dit is de reden waarom we bibliotheken hebben. Al deze spullen wordt afgehandeld door de bibliotheken wanneer we vertellen de servo te schakelen met een bepaalde snelheid of we willen spelen van een melodie met verschillende tonen. Maar 1) we zijn beperkt tot uitsluitend zijnde kundig voor gebruik van de PWM-pinnen, en 2) bibliotheken ruimte in het geheugen in beslag nemen. Wat doen we als we meer PWM-opties nodig? Gebruik de registers.

Het volgende schema is een eenvoudige toongenerator. Ik ga niet te doen omdat ik niet aanbevelen met behulp van servos zonder de servo.h-bibliotheek, een servo-voorbeeld al met wat werk is het zeker mogelijk. Het is veel te gemakkelijk om uit te breiden over de servo buiten het interne stopt. Als u wilt om het te doen, hebt u al te schrijven van de spullen van de achtergrond dat servo.h in uw schets verwerkt, maar langer schetsen in verschillende perioden van de PWM resulteren zal omdat elke regel een beetje tijd neemt.

Voordat we de schets, sommige snelle eenvoudige wiskunde zien. Eerst bepaalt de uitvoerfrequentie die u wilt. 1 Verdeel door uw frequentie te krijgen van uw periode, en dat vervolgens delen in de helft. Zorg ervoor dat waarde in microseconden, zet dan die waarde in zowel van de delayMicroseconds() functie implementaties. Als we willen voor het genereren van een duty-cycle dan 50%, vermenigvuldigt uw periode met de gewenste hoge percentage van de plicht-cyclus. Die nieuwe waarde invoeren in de delayMicroseconds() functie binnen de if() -instructie. Voer de rest in de delayMicroseconds() functie binnen de instructie else .

Voorbeeld: U wilt een vermogen van 1kHz. 1/1000 Hz = 1 milliseconde = 1000 microseconden = periode. 1000μs/2 = 500 µs ⇒ delayMicroseconds(). Als u wilt dat de taakcyclus van 60%: 1000μs * 60% = 600 µs ⇒ als() verklaring delayMicroseconds() waarde. 1000μs - 600μs = 400μs ⇒ anders verklaring delayMicroseconds() waarde. Leuk en gemakkelijk.

Hier is de toon generator code:

 // Simple tone generator not using preset PWM // pins but using register manipulation bool state = true; void setup() { // chipKIT only // set register E, bit 0 as an output (0) // pin 26 Uno32/uC32; pin 37 Max32 TRISE = TRISE & 0xFFFE; // 0b1111 1111 1111 1110 // Arduino only // set register B, bit 0 as an output (1) // pin 8 UNO // DDRB = DDRB | 0x01; // 0b0000 0001 } void loop() { if (state) { // chipKIT only LATE = 0x0001; // Arduino only // PORTB = 0x01; state = false; delayMicroseconds(500); } else { // chipKIT only LATE = 0x0000; // Arduino only // PORTB = 0x00; state = true; delayMicroseconds(500); } } 

Hieronder vindt u een o-scope beelden van de output, eerst van de chipKIT Uno32...

.. .en dan uit de Arduino UNO.

Gek genoeg, deze beelden werden gegenereerd met behulp van de register-manipulatie-schets zoals hierboven, en toen ik de standaardfunctie schets testte, de exacte dezelfde afbeelding popped opwaarts. Raar, right? Dus ik dacht dat ik zou besparen u hoeft te verspillen tijd op zoek op een duplicaat. Ik ook heb geen idee waarom de Arduino UNO vrij onstabiel op piek productie is, dus als iemand heeft enige legitieme uitleg, gelieve te verduidelijken in de commentaren.

Gerelateerde Artikelen

Begin Microcontrollers deel 11: Timers, tellers, en de klok van de Microcontroller

Begin Microcontrollers deel 11: Timers, tellers, en de klok van de Microcontroller

Timers en tellers zijn zo integraal dat ziet u de talrijke voorbeelden hen te betrekken in deze serie. Zoals de naam al zegt, worden timers gebruikt voor de tijd en tellen. Counting en timing kunt u sommige zeer nette dingen zoals controlerende LED b
Exploitatie van een Shift Register

Exploitatie van een Shift Register

In afwachting voor de 8 x 8 x 8 LED kubus Instructable (ik heb een 3 x 3 x 3 versie hier), 'm I gonna verklaren een belangrijk onderdeel van de exploitatie van de kubus die ik voel me niet zo mooi als het zou kunnen worden (maar aarzel niet om mij te
Zuivere sinus omvormer met behulp van pic-microcontroller

Zuivere sinus omvormer met behulp van pic-microcontroller

Zuivere sinus omvormer met behulp van pic microcontroller is gemaakt in dit project. Ferrietkern of chopper gebaseerd zuivere sinus omvormer is ontworpen in dit project. Er zijn twee voornaamste onderdelen van dit project1.push pull topolgy met behul
GSM gebaseerd veelzijdige Robotic voertuig met behulp van PIC Microcontroller

GSM gebaseerd veelzijdige Robotic voertuig met behulp van PIC Microcontroller

dit project is ontworpen als een robot voertuig dat kan worden gecontroleerd door een mobiele telefoons te ontwikkelen. DTMF opdrachten vanaf een telefoon verzenden naar een andere mobiele telefoon die is gemonteerd op de robotic voertuig. Deze opdra
De wereld aan de kant van de Microcontroller

De wereld aan de kant van de Microcontroller

Toekomstige elektronica heeft een breed scala van microcontrollers. Het is ontworpen om voor ingebedde toepassingen worden gebruikt. Microcontrollers (soms afgekort μc, uc of MCU ) zijn toegewijd een kleine en goedkope computers in de elektronica die
Hoe te rijden een heleboel LEDs uit een paar pennen van de microcontroller.

Hoe te rijden een heleboel LEDs uit een paar pennen van de microcontroller.

Met behulp van het feit dat vele pennen van de microcontroller drie staten hebben (+ V, GND, of"hoge impedence", je kunt rijden N*(N-1) LEDs van N pins. Dus het weinig 8PIN microcontroller zoals een PIC12Fxxx of een ATtiny11 kan rijden 20 LEDs o
Draadloze Radio frequentie Module met behulp van PIC Microcontroller.

Draadloze Radio frequentie Module met behulp van PIC Microcontroller.

Het is een Microcontroller gebaseerde elektronica DIY Project. Met de naam draadloze RF-Module met behulp van PIC Microcontroller. De RF-module is een kleine elektronische schakeling gebruikt voor het doorsturen, ontvangen of transceive radiogolven o
Sinusgolf frequentie meting met behulp van pic-microcontroller

Sinusgolf frequentie meting met behulp van pic-microcontroller

Sinusgolf frequentie meting project is ontworpen met behulp van pic microcontroller. Dit project meet de frequentie van de sinus. Nul kruising detectie-techniek wordt gebruikt voor het meten van de frequentie van sinus. Nul kruising detectie met behu
Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Hoe gemakkelijk het testen van een Microcontroller met een Logic Analyzer

Enkele van mijn projecten in het verleden hebben problemen als gevolg van een slechte digitale pin. Als dit ooit aan u gebeurde heeft, dan weet je hoe frustrerend het kan zijn. De meeste mensen de eerste reactie is dat er iets mis is met de code. Als
RegisterWrite - verlenging van de uitgangen van Arduino/Microcontroller met shift registers

RegisterWrite - verlenging van de uitgangen van Arduino/Microcontroller met shift registers

Register schrijven is een voorbeeld van het programma uit te breiden van de uitgangen van de Arduino met behulp van een shift register.Ik schreef een eenvoudige schets die 3 uitgangen van de Arduino zal gebruiken om te rijden het shift register.Ik sc
Het gebruik van een Shift Register - Arduino tutorial Arduino Tutorial

Het gebruik van een Shift Register - Arduino tutorial Arduino Tutorial

In deze tutorial leert u hoe u een shift register (of serieel naar paralled controller). Het shift register zal geven je Arduino een extra 8 digitale uitgangen, met behulp van slechts 3 pinnen op je boardIn deze tutorial zal je de praktijk door bestu
Lange prestatiemetingsprogramma's met behulp van de Microcontroller

Lange prestatiemetingsprogramma's met behulp van de Microcontroller

Lang prestatiemetingsprogramma's kunt worden maken met behulp van de microcontroller. Hier maak ik een apparaat dat afstand tussen twee punten meten kan. Het concept van de raaklijn meting gebruikt. om de waarde van de hoek die gebruik ik potentiomet
Elementaire Robotics deel 2 - het toevoegen van de Microcontroller en de Motor Driver

Elementaire Robotics deel 2 - het toevoegen van de Microcontroller en de Motor Driver

Deze week onze studenten op lange Ridge School (http://www.longridgeschool.org) aangesloten de elektronica op de robot chassis dat werd voltooid in deel 1:.We vonden dat we vervangen de afstandhouders op de robot moesten omdat ze te kort waren voor h
Een zeer kosteneffectief ROBOT met behulp van de microcontroller 89c 51.

Een zeer kosteneffectief ROBOT met behulp van de microcontroller 89c 51.

Hey kerels dit is mijn eerste hardnekkig, dus neem Ga gemakkelijk op mij...Wat ik heb gebouwd in dit hardnekkige is een Robot. Ik noem het een spion Robot (cos als gebouwd klein en als een camera is toegevoegd het als een spion fungeren zal). Elke ma