Stap 2: Beperkingen van het Platform
De Arduino Uno (ATMega328P of niet "P") en de inherente beperking
De Arduino zijn leuk, maar ze zijn native eenvoudig zoveel rekenkracht. Uw computer is waarschijnlijk een 64-bits machine, wat betekent dat u rekenen op binaire getallen 64 bits lang kunt. De Uno heeft alleen 8 bits die eenachtste de bandbreedte plus een grote frequentie kloof (~ 2Ghz tot 16mhz) en niet te vergeten cores en bla bla bla...
Betekenis, die met behulp van een Uno rekenkundig is in het nadeel. Eenvoudige poort manipulatie voor led van en kleine motoren zijn goed genoeg voor dat doel, maar algoritmen die wilt crunch een heleboel nummers met behoud van de juiste tijd is heel moeilijk om voldoende snel en accuraat.
Een heleboel de onder overweging zijn grenzen die specifiek voor de Arduino Uno zijn en ik ben het analyseren van hen als een oefening in de techniek van beginselen. Als een toekomstige ingenieur (ik ben nog steeds op de Universiteit, yahoo), ik had om alle aspecten van het probleem te analyseren. Voor mijn doeleinden, had ik al begrepen dat 8 bits niet voldoende, dus kocht ik een Arduino Due zodat ik kan blijven binnen de native 32-bits precisie van een integer gegevenstype (in de mail op de weg). Met een wiskundige gereedschap zoals Matlab was ik in staat om dat te bepalen voordat ik zelfs gecodeerd op de Arduino Uno. In sommige golfvormen in de volgende stap kunt u beelden van de tests die ik deed. Maar ik bleef over met de 8 bit aanpak alleen voor *** en giechelt.
8 bit limiet
Geteld vanaf 0 tot 255 soort zuigt. Vooral wanneer je doet een rekenkundige operator die nodig heeft om binnen deze limiet te blijven. Zo daalt uw werkelijke precision voor dat soort operatie eigenlijk van 8 bits tot 7 bits toevoegen te blijven binnen dat venster van binaire getallen.
Als het niet duidelijk aan u, is de reden overloop. Overloop optreedt in een elektronisch apparaat wanneer u probeert te doen een wiskundige bewerking die out of bounds van de grenzen verder gaat. Dus, bijvoorbeeld, af te trekken-128 van 128 geeft u (128 + 128) = 256. Boom... wiskundig algoritme gebroken.
Gecodeerde Datatypes boven 8 Bits
Het toevoegen van twee getallen van 8 bits neemt één instructiecyclus native, terwijl het toevoegen van een 16-bits geheel getal zal genomen maar liefst drie cycli van de instructie. Dit kan niet als veel klinken aangezien één cyclus de inverse van de crystal-frequentie is (16Mhz ^ -1) die is over 63ns. Hier ligt in het probleem met te vermenigvuldigen met de instructie cycli door 3; Op minimum, wanneer u hoeft te doen 400 aftrekken, 400 toevoegingen (in een grotere datatype dus 800 instructie cycli), dan een divisie (die duurt van 200 + instructie cycli) die slechts een herhaling van ongeveer 200 meer iteraties is... uw relatief langzame kloksnelheid zeer duidelijk aan u wordt.
ADC 10 bits precisie
De ADC op een Uno heeft 10 bits precisie, maar gebaseerd op de voorgaande beperking van 7 of 8 bits, u weet kunt u niet alles; Het is gewoon een verspilling van rekenkracht om de volledige breedte te gebruiken. Ook, met behulp van de analogRead() is gewoon een verspilling uitgave van tijd. Kijken naar de directe haven manipulatie!