Zurück


17.04.2016
21.01.2019


Umgearbeitet, da einfach viel veraltet ist, z.B. keine Parallel oder Seriell Programmer mer üblich sind. Diese Schnittstellen sterben aus. Leider.
Sprungmarken:
Worst-Case Trick, Fuse_ATMega16


ACHTUNG: benötigt wird ein brauchbarer, ISP basierter Programmer:
Irgend ein Rumgemurkse via Bootloader ist da nicht drin...

Also USBasp mit ISP Schnmittstelle
oder analoges. ( wie auch ein Serieller ISP )  ist auch noch drin.
Da wirdvia AVRDude die Fuses gesettzt
oder
"Extreme Burner AVR" oder
"Burn-O-Mat"


Thema:
Fuse Bits im AVR Controller verstehen und richtig setzten.

Wichtige Hintegrundinformation und Methoden zum sezten der Fuses.
MERKE: Einstellungen der FUSE Bits haben Konsequenzen:

Hier ist das Manual PDF zum  µController unbedingt zu lesen.

Externe Quellen:
Beste Seite:
http://www.mikrocontroller.net/articles/AVR_Fuses
 
http://www.mikrocontroller.net/articles/AVR_Fuses#Taktquellen_Fuse_Einstellung


ONLINE Fuse Calculator  : http://www.engbedded.com/fusecalc    Mit diesem Werkzeug kommt man auch ohne Handbücher weiter



Wichtig !!!

*Wenn in der PDF von 0 (programmed) die Rede ist, dann ist gemeint dass ein Häcken in PonyProg gesetzt ist, aber repräsentiert eine logical 0(Null).
*Wenn in der PDF von 1 (unprogrammend) die Rede ist, dann ist gemeint das das Feld in PonyProg leer ist, aber repräsentiert eine logical 1(Eins)

Wie sind die Häcken zu lesen?? ( gemeint sind die Einstellungshäcken in PonyProg und ähnliche ISP-Programme)
V(häckchen) = 0 ( Sprich: "Häcken ist NULL"  )
Keiner weis warum..! Aber so ist es.... ( wahrscheinlich weil eine 1 im Flash 0 Bedeutet....
(ich habs auch nicht ganz verstanden!...... )
In der PDF steht "wörtlich":
Note: 1. For all fuses "1" means unprogrammed while "0" means programmed.

MERKE:
Bedeutung:  V= Häckchen  -->  Bit=0. Kein Häcken ist Bit=1



Zurerst wird ein Programmer zum setzen und löschen der Fusebits benötigt.
Es gibt sogenante InSystemProgrammer ( ISP )

Diese sind heute meist als USB Programmer für billiges Geld in EBAY zu haben
Suche: "Fischl"  oder "USBasp"

ISP_Adapter/ISP_Adapter.html
  oder
http://homepages.uni-regensburg.de/~erc24492/AVR_Dude/AVR_Dude.html ).
Dieser stellt die ISP( In SystemProgrammer) Signale bereit.


Jetzt noch den verwenden Processor Typ einstellen, oben rechts in PonyProg.
So sieht z.B. ein AVR ATtiny2313 aus..
Zuerst mal ! mit dem linkesten Knopf ( schawrzes Chipsysmbl)  wird der Flash gelesen: Es sind nur FF im Flash-Speicher.
Dann kann mit dem Knopf, wo das Vorhängeschloss zu sehen ist auf die Fuses zugegriffen werden.
Configuration and Security bits:
Betätige Read..
!!! VORSICHT !!! Tue nichst, was du nicht verstehst....Also 1.* = erstmal NIX VERSTELLEN...
Du kannst Dich selbst aussperren, damit demn Processor unbrauchbar machen...(Lock-Bits, Quarzumstellung etc..)
oder mit anderne Worten:
Read your fucking manuals
FIRST.
Und zwar die zum Prozessor gehörenden PDFs.

AT Tiny3113 Fuses



oder eine andere Ansicht mit PonyPorg  ebenfalll ATtiny2313   . Man erkennt interner RC Osc mit /8 = 1MHz
    Hinweis "PonyProg" ist leider veraltet weil Parralelport





Der Reihe nach.
Zuerst ein WORST-CASE-TRICK.
Sollte der interne RC-Oszilator "aus versehen" deaktiviert sein, und der Quarz nicht richtig aktiviert sein, so dass er nicht schwingt ( mir Oszi prüfen!).
so kann man trickreich mit wenigen Teilen auf einem Steckbrett etc., einen Not-Oszilator bauen:
Dieser dient als temporärer externer Ozillator.
So wird einfach mit einem Draht und GND an den  XTAL1 Pin des Prozessors gelegt. Das geht alles recht robust, aber geht.
Meist/Oft kann man dann mit dem ISP dann doch wieder in den Chip "Reinsehen" und die Fuses richtig setzten..
    Wenn nicht.. bleibt nur noch ein tiefergehendes Prog-Modul wie  "ICE", ParallelProg etc.

NACHTRAG: ACHTUNG  , doch lieber höhere Frequenz wählen ~1MHZ
~  < 1nF  udn  4K7   
Ich würde heute eher 10K und 10nF empfehlen.  Also etwas schneller


Auslieferungszustand  ATMega 8
default  ATMega8  
RC Osc 1MHz
, 6CK+64ms ; ( CKSEL=0001 SUT=10 ) default

                                        CKSEL 3..0
In PonyProg ( Häkchen ) V    V    V    []
bedeutet nach Tabelel 9    0    0    0    1
                                         SUT 1..0
In PonyProg ( Häkchen )     []     1
bedeutet nach Tabelel 9        1    0

Modifiziert mit Watchdog on = WFTON &   & BODEN




FUSES DES ATMEGA16

Auslieferungszustand  ATMega 16, gelesen mit AVR STudio und STK500 Board
Signature Byte: 0x1E 0x94 0x03
Das bedeutet:
 JTAG ist gesetzt
Boot flash Size = 1024  ( viel zu goß )
kein! CKOPT ( quarz )
Damit RC Osczillator mit 1 MHZ und 6CK + 64ms delay




Auslieferungszustand:  RC-Ozillator, langsm und mit JTAG


und so wird der Quarz aktiviert und JTAG abgeschaltet.
useSettings für Quarz:  Das wird auch manchmal  als direkte Schreibparamter geschrieben, und kann so direkt in das Makefile integriert werden
COPT, BODEn, BODLEVEL  für ATMega16
LowFuse 0x3F,
High Fuse, 0xCF,
Lockbits 0xFF
neuerdings aktiviere ich díe BrownOut Dedektion.
Dazu auch den BodLevel auf 4.0 Volt = Häckchen auch auf BodLevel, und sonst alles "aus", ausser CKOPT  = Quarz An.
ATMEGA 16





Dies ist z.B der Auslieferungszustand des ATTyni2313.
Was bedeutet das?

 Auslieferungszustand aus PDF:
The device ist shiped with CKSEL = "0100", SUT= "10" CKDIV8 = programmed (meint 0)
Bedeutung :      Bit     Häkchen in PonyProg
--------------------------------------------------              
CKSEL    = 0100  = V [] V V
SUT         = 10
CKDIV   = 0
Das Bedeutet:               Internal Clock 8MHz mit CDIV / 8 = 1MHz

Nochmals zur Verdeutlichung
gesetzt sind default(vom Werk) also:  
CKSEL3..0 = V0VV
Folge = 0100
SUT1..0 =  0V Folge = 10
CKDIV8 = V = 0

CKOUT =   Bit1( kein Häckchen )
DWEN
Bit1( kein Häckchen )
EESAVE = Bit1( kein Häckchen )
WDTON Bit1( kein Häckchen )
BODLEVEL2..0 = Bit1( kein Häckchen ))
SPEM=  Bit1( kein Häckchen )
LOCK2..1  Bit1( kein Häckchen )
sind ebenfalls alle Bit1( kein Häckchen )   


Tiny2313

Aufgabe ist es, die Fuses von der Werksauslieferung auf externen Crystal-Quarz mit 8Mhz umzustellen


Selektiert ist also default vom Werk  CKSEL3..0 = bit3,2,1,0  --> 1011(Häckchen)   Folge = 0100 =
Calibrated internal RC Oscillator 8Mhz

um also umzustellen auf den Quarz 8Mhz müssen noch anderHäckchen gesetz twerdenund  und  CKSEL an den verwendeten Quarz angepasst werden
External Crystal/Ceramic Resonator  = 1000 -- 1111. was bedeutet?

Je nach QuarzFrq werden verschiedene Quarzkondesatoren verwendet
und so werden die CKLSels ( 3..1 ) NICHT 0! eingestellt

DELAUT = ja 010  =
folge =
also CKSEL 3..1 für 8MHz, = 111 (X) X= BCKSEL0


Schaut man die Funktion deCKSEL Bitan so kann man einiges erkennen
CKSEL

 3 2 1 0
0= Ceramic Osc. oder interner RC Osc.oder  Externe Clock
1 = Quarz
Osc. Modes Osc. Modes with SUT1..0 select Start-Up times --> Table 5
0=Ceramic
1= Quarz

Was ist also zu tun?
wir wollen (Quarz 8Mhz), also Crystal OSC + besser BOD= Brown Out Detektion enabled
default SUT1..0 ( Häckchen 0V = 10 = Ceramic resonator + BOD enabled ).
jetzt :  CKSEL0=1 + SUT1..0 =  01 = Häckchen V0
und weil 8MHz Quarz wird noch CKSEL3..1 = 111 gesetzt.
So wird jetzt die Fuses umgeschrieben.
CKSEL3..0 = also Bits 1111  = 0000 ( keine Häcken )
SUT1.0 = Bits 11   =  00 ( keine Häcken ) Sehr lange Startzeit ist gesetzt.. 65mS
CKDIV =  1( kein Häcken )        /// KEIN Vorteiler / 8


Tiny2313   Nur Watchdog ist aktiviert.


jetzt Write, und der Quarz läuft.


Tiny2313 Und so wäre es mit  interne Oszilator aber auf 8 MHZ gesetzt