Stap 6: Samengevat.
De vorige stap ziet er misschien verwarrend en buiten de orde, maar deze stap zal geven een duidelijk beeld van het hele proces.Wat willen we eigenlijk te doen?
We hebben een microcontroller (hier Atmega-8). Het draait op de standaard frequentie die het werd verscheept met. Wij willen draaien op 16Mhz externe kristal.
Zodoende welke voor verrichten precies? Alleen zien en wijzigen van de fuse-bits waarden. We mogen ook niet vergeten dat 1 middel unprogrammed en 0 geprogrammeerd.
De chip zit nu, met de standaardconfiguratie van de fuse-byte.
Allereerst moeten wij om te beslissen, hoe de microcontroller uitgevoerd? Laat nemen alleen hebben wij drie opties-externe kristal, externe resonator of interne oscillator om redenen van eenvoud.
We ontdekten dat kristal oscillator is een betrouwbare tijd houden SOURCEen we het niet erg uitgaven een beetje voor twee 22pf condensatoren. Onze keuze is nu duidelijk, willen we het uitvoeren van de avr-chip met een externe kristal.
Maar waar vind je de opties voor het maken van de keuze van externe kristal oscillator?
De opties zijn beschikbaar op CKSEL3 op CKSEL0 in de lage fuse-byte.
We keek op de tabel waarin de datasheet van de microcontroller en kwam erachter dat er een optie genaamd cermaic resonator of crytal oscillator is. Wij willen dit, zeker dus we de waarden van de bits van CKSEL3-CKSEL0 gekoppeld noteren.
Hmm, maar er is een bereik van waarden, 1111-1010. Welke een specifiek nemen? En hoe om de frequentie van het kristal oscillator te geven? Uiteraard zijn er veel frequenties beschikbaar voor kristallen, we willen draaien alleen op 16Mhz.
Hiervoor kijken we omhoog een andere tabel, met de frequentie en het aanbevolen bereik van condensatoren worden gebruikt met hen.
In deze tabel, vinden we dat 16Mhz groter is dat 1 Mhz zodat wij die optie kiezen. De bitwaarde dat gekoppeld aan de CKOPT voor onze keuze was is 0 en samen met dat, kozen we 111 voor de waarden van CKSEL3-CKSEL1.
Nu wij zijn ervan overtuigd dat we de avr-chip met een externe crytal van 16Mhz worden uitgevoerd.
We lezen net een instructable over fuse-bits en het sprak van sommige start-up tijd dingen die de crytal moet opwarmen en beginnen met het geven van relaible signalen.
Hoe vinden we het?
Wij vinden het weer in een tabel waarin hetzelfde instructable. Deze tabel bevat nu CKSEL0 waarde en de waarde van SUT1 en SUT0. We kiezen de optie voor voorsprong opwaarts tijd van 65 milliseconden en zijn dus onze tegenwaarde van bits CKSEL0 -1, SUT1 - 1, SUT0 - 1.
We dus met succes afgerond de set van lage fuse byte kiezen.
Aanvankelijk was de instelling van de byte hoge zekering-
7) RSTDISBL-1
6) WDTON - 1
5) SPIEN-0
4) CKOPT -1
3) EESAVE -1
2) BOOTSZ1-0
1) BOOTSZ0-0
0) BOOTRST -1
Nu we hebben om hen te veranderen-
7) RSTDISBL -1
6) WDTON -1
5) SPIEN-0
4) CKOPT-0
3) EESAVE -1
2) BOOTSZ1-0
1) BOOTSZ0-0
0) BOOTRST -1
Dat is 11001001 in binaire of C9 in de hexadecimale notatie. We wijzigt alleen de CKOPT van 1 naar 0, waardoor alle anderen onaangeroerd.
Nu voor de lage fuse byte, aanvankelijk was-
7) BODLEVEL -1
6) BODEN -1
5) SUT1 -1
4) SUT0-0
3) CKSEL3-0
2) CKSEL2-0
1) CKSEL1-0
0) CKSEL0 -1
We veranderen het aan-
7) BODLEVEL -1
6) BODEN -1
5) SUT1 -1
4) SUT0 -1
3) CKSEL3 -1
2) CKSEL2 -1
1) CKSEL1 -1
0) CKSEL0 -1
Dat is 11111111 in binaire of FF in de hexadecimale notatie.
Nu aangezien we klaar bent doen evrything, we gewoon moeten branden van deze nieuwe instellingen in de microcontroller.
Avrdude syntaxis gebruikt, moet het-
avrdude - c usbasp -p m8 - U lfuse:w:0b11111111:m - U hfuse:w:0b11001001:m
Maar het is beter om dit te schrijven in hexadecimale, als-
avrdude - c usbasp -p m8 - U lfuse:w:0xff:m - U hfuse:w:0xC9:m
De standaardwaarden voor Atmega8 interne 1Mhz oscillator was-
avrdude -p atmega8 - c usbasp - U lfuse:w:0xE1:m - U hfuse:w:0xD9:m
Tot slot, de totale procedure eindigt hier. Maar dit niet volledig over zekeringen en hoe ze programmeren verklaart, geeft dit zeker een ruw idee voor beginners op wat zekeringen zijn en hoe ze worden behandeld.
Gelukkig DIY-ing :)