AVRSH: Ett kommando tolken skal för Arduino/AVR. (3 / 6 steg)
Steg 3: Läsa och skriva säkringar
I en tidigare instructable, visade jag hur du kan läsa och ställa in din säkringar med programmerare och avrdude. Här, ska jag visa dig hur man läser tillbaka dina säkringar vid körning att se hur din MCU ställt dem faktiskt. Observera att detta inte är inställningen för kompileringen som du får från definitionerna i < avr/io*.h > men de faktiska säkringarna som MCU läser dem vid körning.
Från tabell 27-9 i ATmega328P datablad (databook, mer som det) är bitar av låg Byte säkring följande:
CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
En intressant sak att notera är att med säkringar, 0 betyder programmerad och en 1 innebär att det vissa lite är unprogrammed. Något kontraproduktivt intuitivt, men när du vet det du vet.
- CKDIV8 anger din CPU klocka delas av 8. ATmega328P kommer från fabriken programmerad att använda dess inre oscillator på 8MHz med CKDIV8 programmerad (dvs värdet 0) ger dig en sista F_CPU eller CPU frekvens av 1MHz. På Arduino, detta ändras eftersom de har konfigurerats för att använda en extern oscillator på 16MHz.
- CKOUT när programmerad kommer ut din CPU klocka på PB0, som är digital stift 8 på Arduinos.
- SUT [1..0] anger starttiden för din AVR.
- CKSEL [3..0] ställer in klockan källan, som inre RC-oscillator, externa oscillator, etc.
När du läser din säkringar, returneras det till dig i hexadecimal form. Detta är det format som du behöver om du vill skriva säkringarna via avrdude. På min arduino är här vad jag får när jag läser den lägre säkring byten:
roten läsa lfuseLower säkring: 0xff
Så, alla bitar har angetts till 1. Jag gjorde samma procedur på en Arduino klon och fick samma värde. Kontrollera en av min fristående AVR system, jag fick 0xDA vilket är det värde jag hade satt några tid tillbaka när du konfigurerar chip.
Samma procedur används för att kontrollera den höga säkring byten, utökad Byte säkring, och låset säkringar. Kalibrering och signatur fuse byte har inaktiverats i koden med ett #if 0 förprocessordirektiv, som du kan ändra om du känner dig scrappy.