Stap 4: Andere opdrachten
CPU kloksnelheid frequentie-instellingen
U kunt nagaan wat uw firmware is geconfigureerd als de instellingen van de klok CPU met het fcpu commando gebruiken:
root fcpuCPU Freq: 16000000
Dat is 16 miljoen, of 16 miljoen herz, beter bekend als 16 MHz. U kunt dit op de vlieg, voor welke reden dan ook, met de klok -opdracht. Deze opdracht neemt één argument: de prescaler moet worden gebruikt bij het verdelen van de kloksnelheid van uw. De klok -opdracht begrijpt deze prescaler waarden:
- ckdiv2
- ckdiv4
- ckdiv8
- ckdiv16
- ckdiv32
- ckdiv64
- ckdiv128
- ckdiv256
Met behulp van de opdracht:
clock ckdiv2
Wanneer uw cpu-snelheid 16MHz is zou resulteren in uw worden veranderd tot 8 MHz. een prescaler van ckdiv64 met een initiële kloksnelheid van 16MHz kloksnelheid zal resulteren in een definitieve kloksnelheid van 250 KHz. Waarom op aarde zou u wilt uw MCU langzamer maken? Nou, voor een, een lagere kloksnelheid verbruikt minder stroom en hebt u uw MCU uitgevoerd off van een accu in de behuizing van een project u kan niet nodig hebt om uit te voeren op topsnelheid, en kon daarom lager de snelheid en vermindering van het energieverbruik, verhogen de levensduur van de batterij. Ook, als u de klok voor elk soort timing problemen met een ander MCU, zeggen, uitvoering van een software UART of zoiets, kan u wilt instellen op een bepaalde waarde, dat is makkelijk te krijgen van een aardige zelfs baud-rate met lagere foutenpercentages.
Omhoog het aandrijven en stroomvoorziening naar perifere sub-systemen
Op dezelfde notitie voor het verminderen van machtsconsumptie eerder vermeld, kan u wilt verder verminderen door het afsluiten van enkele van de on-board randapparatuur die u niet gebruikt. De opdracht-interpreter en shell kunnen momenteel macht omhoog en de volgende randapparatuur uitgeschakeld:
- Analoog-digitaalomzetter (ADC). Dit randapparaat wordt gebruikt wanneer u hebt een analoge sensor verstrekken van gegevens (zoals temperatuur, licht, versnelling, enz) en wilt converteren naar een digitale waarde.
- Serial Peripheral Interface (SPI). De SPI-bus is gebruikt om te communiceren met andere SPI-compatibele apparaten, zoals externe herinneringen, LED drivers, de externe ADC, enz. Delen van de SPI worden gebruikt voor ISP programmeren, of op minste de pinnen zijn, dus wees voorzichtig wanneer dit afsluiten als u via Internet-provider programmeert.
- Twee-draads Interface. Sommige externe apparaten gebruiken de I2C-bus om te communiceren, hoewel deze snel door SPI-compatibele apparaten vervangen worden zoals SPI een groter debiet heeft.
- USART. Dit is uw seriële interface. U wilt waarschijnlijk niet dit uitschakelen als u met de AVR via de seriële verbinding verbonden bent! Echter, ik nog dit hier als een skelet voor porten naar apparaten die meerdere USART zoals de ATmega162 of ATmega644P hebben.
- alle. Dit argument aan de commando powerup of powerdown draait op alle van de genoemde randapparatuur of uitgeschakeld hen allemaal met één opdracht. Nogmaals, gebruik dit commando verstandig.
root powerdown twiPowerdown of twi complete.root powerup twiPowerup of twi complete.
Starten en stoppen van Timers
De shell heeft een ingebouwde 16-bits timer die beschikbaar is voor gebruik. U start de timer met de timer-opdracht:
timer start
en stoppen van de timer met de stop-argument:
timer stop
Deze timer zal niet strijdig zijn met de interne USART timer. Zie de code voor details over de implementatie van de timer USART, als dat soort bloederige detail u interesseert.
root timer startStarted timer.root timer stopElapsed time: ~ 157 seconds
Verificatie
De shell kan een wachtwoord van 8 tekens worden opgeslagen in EEPROM. Dit wachtwoord mechanisme is gemaakt ter ondersteuning van het aanmeldmogelijkheden telnet, maar zou kunnen worden uitgebreid ter bescherming van andere dingen. Bijvoorbeeld, kon u bepaalde opdrachten, zoals het veranderen van register waarden, via het verificatiemechanisme vereisen.
Het wachtwoord met de opdracht wachtwoord instellen:
root passwd blahWrote root password to EEPROM
Tegen hij wachtwoord toestaan (of vergunning via programmacode door de code vereist) met de opdracht auth.. Let op, dat als u probeert te wijzigen van de root-wachtwoord, maar er is al een root wachtwoord set, moet u machtigen zelf tegen het oude wachtwoord alvorens wordt toegestaan om het te veranderen naar een nieuw wachtwoord.
root passwd blinkyYou must authorize yourself first.root auth blahAuthorized.root passwd blinkyWrote NEW root password to EEPROM
Natuurlijk, moet u het bestand avrsh.eep wordt geladen als u wissen de firmware als u wilt dat uw oude waarden en variabelen hersteld. De Makefile zal het EEPROM bestand voor u aanmaken.
Variabelen
De shell begrijpt de notie van gebruiker gedefinieerde variabelen. De code beperkt dit tot 20, maar je kunt dat veranderen als u door het veranderen van het vastleggen van MAX_VARIABLES in script.h. U kunt 16-bits waarde (dat wil zeggen een getal tot 65.536) aan een variabele aan later herinnerd. De syntaxis is vergelijkbaar met registers behalve een dollarteken ($) wordt gebruikt ter aanduiding van variabelen naar de shell. Een lijst van alle uw variabelen met de opdracht Afdrukken variabelen.
print variablesUser-defined variables:Index Name -> Value(01): $FREE$ -> 0(02): $FREE$ -> 0(03): $FREE$ -> 0(04): $FREE$ -> 0(05): $FREE$ -> 0(06): $FREE$ -> 0(07): $FREE$ -> 0(08): $FREE$ -> 0(09): $FREE$ -> 0(10): $FREE$ -> 0(11): $FREE$ -> 0(12): $FREE$ -> 0(13): $FREE$ -> 0(14): $FREE$ -> 0(15): $FREE$ -> 0(16): $FREE$ -> 0(17): $FREE$ -> 0(18): $FREE$ -> 0(19): $FREE$ -> 0(20): $FREE$ -> 0Complete.
Set een variabele:
$newvar = 25$timeout = 23245
De waarde van een gegeven variabele te krijgen:
root echo $newvar$ newvar --> 25
U kunt zien wat alle variabelen die u momenteel hebt geïnstantieerd met de opdracht print die u al kent.
User-defined variables:Index Name -> Value(01): newvar -> 25(02): timeout -> 23245(03): $FREE$ -> 0(04): $FREE$ -> 0(05): $FREE$ -> 0(06): $FREE$ -> 0(07): $FREE$ -> 0(08): $FREE$ -> 0(09): $FREE$ -> 0(10): $FREE$ -> 0(11): $FREE$ -> 0(12): $FREE$ -> 0(13): $FREE$ -> 0(14): $FREE$ -> 0(15): $FREE$ -> 0(16): $FREE$ -> 0(17): $FREE$ -> 0(18): $FREE$ -> 0(19): $FREE$ -> 0(20): $FREE$ -> 0Complete.
De $FREE$ naam geeft gewoon aan dat die variabele locatie gratis is en niet is toegewezen een variabelenaam nog.