Forum: Mikrocontroller und Digitale Elektronik Atmega8 16Mhz Quarz Fusebits setzen


von florian (Gast)


Lesenswert?

Hallo,
ich hab für meinen Atmega8 und einen 16Mhz Quarz folgende "fusebits" mit 
dem
"calculator" von hier http://www.engbedded.com/fusecalc/ (ich hab 
startup auf 4ms und 16k ck gesetzt)

-U lfuse:w:0xef:m -U hfuse:w:0xd9:m

Ich benutze aber eigentlich das Makefile von mikrocontrollerspielewiese. 
Da gibt es den Befehl "make wrfusecrystal". Meine Frage ist jetzt ob 
damit die richtigen Fusebits wie die berechneten gesetzt werden.

MfG flo

von Franz (Gast)


Lesenswert?

push

das interessiert mich jetzt aber auch, wie man einen atmega8 dazu 
bekommt mit 16mhz zu laufen.

von holger (Gast)


Lesenswert?

>das interessiert mich jetzt aber auch, wie man einen atmega8 dazu
>bekommt mit 16mhz zu laufen.

TLC555 als Taktgenerator und auf externen Takt fusen. Brauchst dann aber 
schon
ziemlich große Widerstände und Kondensatoren.

Bei Beachtung von Groß- und Kleinschreibung wäre dir diese
Antwort erspart geblieben.

von Lehrmann M. (ubimbo)


Lesenswert?

Franz schrieb:
> das interessiert mich jetzt aber auch, wie man einen atmega8 dazu
> bekommt mit 16mhz zu laufen.

Datenblatt lesen, dann labern! Gegen 16 MHz spricht rein garnichts...

holger schrieb:
> TLC555 als Taktgenerator und auf externen Takt fusen. Brauchst dann aber
> schon
> ziemlich große Widerstände und Kondensatoren.

genau - ab in die erste Klasse. PS: der 555 geht nur bis 2 MHz.

holger schrieb:
> Bei Beachtung von Groß- und Kleinschreibung wäre dir diese
> Antwort erspart geblieben.

Wenn du mal dein Hirn einschalten würdest, keine bescheuerten Kommentare 
posten würdest, dann würde hier vielleicht mal was produktives 
rauskommen und das ganze wird kein Off-Topic!

von spess53 (Gast)


Lesenswert?

Hi

>genau - ab in die erste Klasse. PS: der 555 geht nur bis 2 MHz.

Es geht um 16mhz. In Worten: 16 MilliHertz

Den Rest von  Holger nun auch verstanden?

MfG Spess

von Lehrmann M. (ubimbo)


Lesenswert?

toll und meint ihr jetzt, dass ihr irgendwas sinnvolles zur 
Problemlösung beigetragen habt? PS: Die Frage war rein rethorisch und 
die Antwort lautete NEIN. Also lasst den Schrott und gebt euren Senf 
dazu wenn's was sinnvolles ist.

Nachdem ich nicht weiterhelfen kann, will ich Vorbild sein und bin darum 
jetzt auch still.

von spess53 (Gast)


Lesenswert?

HI

>toll und meint ihr jetzt, dass ihr irgendwas sinnvolles zur...

"Satiren, die der Zensor versteht, werden mit Recht verboten."

Karl Kraus

MfG Spess

von Florian (Gast)


Lesenswert?

Also laut Datenblatt müsste es gehen, hat noch jemand eine Antwort auf 
meinen ersten Beitrag?
MfG flo

von Karl H. (kbuchegg)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR_Fuses#Taktquellen_Fuse_Einstellung

Aber was es mit dieser mikrocontrollerspielewiese und ihrem 'make' auf 
sich hat, weiß ich auch nicht.

von Florian (Gast)


Lesenswert?

Also in dem Makefile wird dieser Befehl ausgeführt:
./prg_fusebit_uc -w 0

kennt denn einer? von der spielewiese hab ich bis jetzt keine antwort

mfg flo

von Florian (Gast)


Lesenswert?

also ich hab das file pr_fusebit_uc im netz gefunden aber des wird auf 
der spielwiese nicht verwendet, da in dem Makefile mit dem dort die 
fusebits gesetzt werden direkt der Befehl für den avrdude steht. ich hab 
aber kein avrdude :-)
1
#!/bin/sh 
2
prg="adude"
3
#
4
help()
5
{
6
  echo "prg_fusebit_uc -- read and write fuse bits of the atmega8"
7
  echo ""
8
  echo "Usage: prg_fusebit_uc [-hu] -r|-w Freq"
9
  echo ""
10
  echo "OPTIONS: -h this help"
11
  echo "         -r read fuse bytes"
12
  echo "         -u use uisp instead of avrdude"
13
  echo "            avrdude can automatically detect dapa or avrusb500."
14
  echo "            uisp can only be used with the parallel port dapa."
15
  echo "         -w write fuse bytes such that a given Freq is used"
16
  echo "            a frequency of 0 means external crystal. Possible"
17
  echo "            values are 0,1,2,4,8"
18
  echo ""
19
  echo "EXAMPLE: program the fuses to 4MHz internal"
20
  echo "         prg_fusebit_uc -w 4"
21
  echo ""
22
  echo "Warning: you can not undo the setting \"external crystal\" unless"
23
  echo "         you have a crystal that works."
24
  echo "This script can be easily adapted to different programmer types"
25
  exit 0
26
}
27
while [ -n "$1" ]; do
28
case $1 in
29
    -h) help;shift 1;;
30
    -u) prg="uisp";shift 1;;
31
    -r) opt_r="1";shift 1;;
32
    -w) opt_w="1";freq="$2";shift 2;;
33
    -*) echo "error: no such option $1. -h for help";exit 1;;
34
    *)  break;;
35
esac
36
done
37
38
if [ -z "$opt_r" -a  -z "$opt_w" ];then
39
  # one of those options is mandatory
40
  help
41
fi
42
43
hf=0xd9
44
if [ "$opt_w" = "1" ]; then
45
  case $freq in
46
      0) lf=0xee;echo "Make sure you have a crystal otherwise you can not change this!";sleep 2;;
47
      1) lf=0xe1;;
48
      2) lf=0xe2;;
49
      4) lf=0xe3;;
50
      8) lf=0xe4;;
51
      *) echo "error: no such frequency, -h for help";exit 1;;
52
  esac
53
fi
54
55
56
if [ "$prg" = "uisp" ]; then
57
  if [ "$opt_r" = "1" ];then
58
    set -x
59
    uisp -dlpt=/dev/parport0 -dprog=dapa --rd_fuses
60
    set +x
61
    echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
62
    echo "             0xe4 (8MHz intern)"
63
    echo "             Fuse High Byte should be 0xd9"
64
    exit 0
65
  fi
66
  if [ "$opt_w" = "1" ]; then
67
    set -x
68
    uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_l=$lf
69
    uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_h=$hf
70
    set +x
71
    exit 0
72
  fi
73
74
fi
75
if [ "$prg" = "adude" ]; then
76
  if grep "Vendor=0403 ProdID=6001" /proc/bus/usb/devices > /dev/null ; then
77
    prg="avrusb500"
78
  else
79
    prg="dapa"
80
  fi
81
  if [ "$opt_r" = "1" ];then
82
    set -x
83
    avrdude -p m162 -c $prg -v -q
84
    set +x
85
    echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
86
    echo "             0xe4 (8MHz intern)"
87
    echo "             Fuse High Byte should be 0xd9"
88
    exit 0
89
  fi
90
  if [ "$opt_w" = "1" ]; then
91
    set -x
92
    avrdude -p m162 -c $prg -u -v -U lfuse:w:$lf:m
93
    avrdude -p m162 -c $prg -u -v -U hfuse:w:$hf:m
94
    set +x
95
    exit 0
96
  fi
97
fi

von Hc Z. (mizch)


Lesenswert?

Florian schrieb:
> Also in dem Makefile wird dieser Befehl ausgeführt:
> ./prg_fusebit_uc -w 0

Und

Florian schrieb:
> also ich hab das file pr_fusebit_uc im netz gefunden aber des wird auf
> der spielwiese nicht verwendet, da in dem Makefile [..] direkt der Befehl
> für den avrdude steht.

Ja wattenu - heißt es prg_fusebit_uc oder pr_fusebit_uc und wird es im 
Makefile verwendet oder nicht?

Florian schrieb:
> ich hab
> aber kein avrdude :-)

Das lässt sich ändern.  Google existiert.

Welches Betriebssystem verwendest Du?  Das Skript, das Du als 
pr_fusebit_uc  hereinkopiert hast, ist für Linux und dürfte selbst dort 
mit einigen aktuellen Distributionen, z.B. Ubuntu, nicht ohne 
Verrenkungen laufen (da es /proc/bus/usb verwendet).

von Karl H. (kbuchegg)


Lesenswert?

Florian schrieb:

> fusebits gesetzt werden direkt der Befehl für den avrdude steht. ich hab
> aber kein avrdude :-)
>


Womit brennst du dann?

Ich würde dieses prg_fusebit_uc ganz schnell vergessen.

Wenn du dir die Mühe machst, die ganze Fusebit Einstellerei einmal zu 
verstehen, mit deinem Brennprogramm die bestehenden Fusebits ausliest 
und mit dem Datenblatt vergleichst (oder mit dem Fusebit-Calculator 
auseinandernehmen), vorsichtig bist und lieber 3 mal überlegst ob das 
was du tust überhaupt Sinn macht, dann ist das alles keine Hexerei.

Du darfst nur nicht mit der Einstellung rann gehen: Ich hab da im Web 
irgendwo irgendwann diese Fuseeinstellung gesehen, ich weiß zwar nicht 
was die bedeutet, aber ich brenn die mal in den Chip.

An dieser Stelle willst du dich genau informieren. An dieser Stelle 
willst du die relevante Stelle im Datenblatt lieber 3 mal lesen, bis du 
alles verstanden hast. An dieser Stelle willst du die im µC vorhandenen 
Fuses auslesen und mit dem Datenblatt vergleichen und das 
Erfolgserlebnis haben, dass deine Fuse-Dekodierung tatsächlich 100% mit 
dem Datenblatt übereinstimmt. An dieser Stelle willst du dich selber so 
weit bringen, dass du dir sicher bist, dass du genau weißt was du tust, 
wenn du 1 Fuse umstellst.

Das klingt jetzt alles aufwändig. Aber nach einer halben Stunde bist du 
soweit, dass du sagen kannst: Yo, ich bin mir 100% sicher, dass die 
CKSEL Fuses so und so stehen müssen; in meinem Brennprogramm bedeutet 
das, dass ich hier und hier ein Häkchen machen muss bzw. ein Häkchen 
rausnehmen muss bzw. dass im FuseByte dieses und jenes Bit gesetzt sein 
muss.

von Florian (Gast)


Lesenswert?

Avrdude unterstüzt laut dem Artikel auf der seite 
http://www.mikrocontroller.net/articles/AVRDUDE Parallelport Programmer. 
Ich habe mir für mein Makefile folgende Befehle überlegt, kann mir 
jemand sagen ob das so funktioniert? oder wird das nichts?
1
#der Programmieradapter ist ein Parallel Programmer wie #Mikrocontrollerspielewiese:
2
PROGRAMMER = -c dapa
3
4
5
6
7
# use external crystal
8
wrfusecrystal:
9
  clear
10
  @echo "Warnung: Das Setzen des Quarz-Fusebits kann nur mit Quarz rueckgaengig gemacht werden!"
11
  @echo "         Du hast 15 Sekunden, um mit crtl-c abzubrechen."
12
  @echo
13
  @echo "Warning: The external crystal setting can not be changed back without a working crystal"
14
  @echo "         You have 15 seconds to abort this with crtl-c"
15
  @sleep 15
16
  
17
    avrdude -p m8 $(PROGRAMMER) -u -v -U lfuse:w:0xef:m
18
    avrdude -p m8 $(PROGRAMMER) -u -v -U hfuse:w:0xd9:m

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.