Forum: Mikrocontroller und Digitale Elektronik Verdammte Fusebits


von Martin Peer (Gast)


Lesenswert?

Hallo!

Ich habe mir vor ein paar Tagen meinen eigenen ISP Programmer gebaut.
Dieser scheint ja zu funktionieren. Ich habe aber bemerkt, dass sich
nur 4 Bits auf Portc meines MEGA16 programmieren lassen. JTAG ->
Disabled und alles war in Ordnung. Aber es gibts immer noch Probs...

Manchmal schreibt er mir nach dem Brennen eine MessageBox mit dem
Inhalt: "Difference at 0000" oder "Difference at 0006"
Das Programm ist jedoch im Flash und funktioniert auch.

Was bedeutet das?

Das nächste Problem! Ich habe das Fusebit für den internen Clock
verstellt und zwar zuerst auf "intern 2MHz" und dann auf "intern
4MHz"
. Dann ist mein mega16 nicht mehr ansprechbar! "Could not identify
Chip with ID FFFFFFF"
Sind jetzt 14,50€ im A****???

Achja, ich programmieren mit Bascom AVR da die anderen Progs bei mir
nicht laufen!

Bitte um eure Hilfe
Mfg, Martin

von Markus K. (markus-)


Lesenswert?

Überprüf mal, ob Dein Programmer vielleicht einen Wackelkontakt hat.
Wenn das nicht hilft, kannst Du versuchen jemanden mit einem
High-Voltage-Programmer zu finden (der bekannteste ist das STK500), der
ihn dir wieder "entsperrt". Oder Du versuchst ihm extern einen Takt zu
geben (je nachdem, welche Fuse falsch eingestellt wurde, such mal im
Forum danach).

Wo hast du denn den Prozessor gekauft? Reichelt will für den Mega16
lediglich 4,15€.

Markus

von Martin Peer (Gast)


Lesenswert?

Ich habe ihn, bei uns in Österreich, bei Conrad gekauft, ich weiß das
ist normalerweise ein Verbrechen, aber wenn man am Sa. Nachmittag drauf
kommt dass man noch gerne was probieren möchte ist der halt noch offen!
;-)

Trotzdem danke für den Tipp!

Falls hier irgendjemand ein STK500 hat und mir vielleicht meinen Chip
entsperren könnte wäre ich ihm sehr dankbar :-)!

Mfg, Martin

von Philip Rehkop (Gast)


Lesenswert?

Moin,

wenn du "nur" an den Fuses für den Takt rumgespielt hast und nicht
auch an anderen, hast du, wenn du Glück hast, nur auf eine externe
Taktquelle umgestellt.

Hast du mal versucht, einen externen Quarzoszillator an XTAL1 zu
hängen? Ist auf jeden Fall einfacher, als HighVoltageProg.

Gruss, Philip.

von Martin Peer (Gast)


Lesenswert?

Ja, ich habe einen 3,686MHz Quarz mit 2 x 12pf zwischen XTAL1 und XTAL2
reingehängt...
Tut sich aber immer noch nix

Kurze Schematic! gg


    12pF              |
GND----||---|------- x|XTAL1
           ----      o|
           XTAL      o|   ATmega16
           ----      o|
GND----||---|------- x|XTAL2
                      |

von Hubert.G (Gast)


Lesenswert?

Philip meinte einen Quarzoszillator (gibts z.B. bei Reichelt) keinen
Quarz. Du kannst aber auch einen anderen Takt hernehmen, z.B.
Funktionsgenerator wenn er einigermassen hoch raufgeht 1MHz oder so.

von Jadeclaw (Gast)


Angehängte Dateien:

Lesenswert?

An XTAL1 einen stabilen Takt zwischen 1 und 4 MHz einspeisen, z.B. aus
einem TTL-Blechbüchsen-Oszillator.

Und sollte dir so eine Blechbüchse fehlen, guckst du in den Anhang

Gruss
Jadeclaw.

von Sssssss (Gast)


Lesenswert?

Oder du nimmst nen anderen Atmel und verbindest Clock out mit clock in
deines toten ;)
Evtl hast du auch auf ext RC Oszi umgestellt. Teste auch mal nen C und
nen R wie im Datenblatt dranzuklemmen ;)

von anm (Gast)


Lesenswert?

Na woher bist du denn aus Österreich? Ich bin aus Tirol und hätte auch
ein STK mit dem man das Ganze "entsperren" bzw richtig einstellen
könnte! aber bevor du ihn mir schickst wirds billiger kommen bei
www.elektro-nix.de einen neuen zu bestellen - hab den dort schon um
3,44€ + Versand (3,50€). Wenn man dann gleich mehrere bestellt ist das
auf jeden Fall rentabel.

mfg andi

von Martin Peer (Gast)


Lesenswert?

Hallo Andi!

Na so ein Zufall, ich bin aus der Steiermark! Danke für den Link! Aber
könnte ich dir vielleicht meine Chips trptzdem per Post senden. Was
verlangst denn für deine Dienste ;-)
Oder glaubst schaff ma des über den Nationalitätsbonus ;-))

Hier meine mail adresse:  martin.peer@gmx.net


Mfg, Martin

von Martin Peer (Gast)


Lesenswert?

An den Rest von euch bedanke ich mich ebenfalls für eure Tipps!
Das mit dem RC Oszillator probiere ich gleich morgen. Hab mir einen
R = 3K47 (3K3) @ C = 24pf ausgerechnet. Glaub das dürfte stimmen!

von Andi K. (Gast)


Lesenswert?

Das beste, was in dem Fall IMMER zuverlässig als Taktgeber funktioniert,
ist ein anderer AVR der an einem Pin ca. 1 MHz Takt ausgibt.
Da mit ist es dann egal auf welche Systemclock-Art der AVR
"versehentlich" eingestellt wurde.

@Martin Peer: Nimm doch, wenn vorhanden, einen anderen, kleinen AVR und
hacke in dem ein kleines Programm zur Takterzeugung ein.

MfG
Andi

von Martin Peer (Gast)


Lesenswert?

Ich bin der meinung dass ich mein Programm in ASM schreiben müsste...
Ich habe noch einen ATmega8 der mit dem Internen 1MHz Takt läuft...

wenn ich nun folgenden Source schreibe,

$asm

Label:
   out portb, &H00000000        '1 Zyklus
   out portb, &H00000001        '1 Zyklus
   rjmp Label                   '2 Zyklen

$end asm

gehe ich davon aus dass diese Routine 4 Taktzyklen benötigt.
D.h. 1/4MHz = 250KHz

Reicht dieser Takt aus oder sollte ich es versuchen die Fusebits auch
bei diesem ATmega zu "ändern"?

Mfg, Martin

von Martin Peer (Gast)


Lesenswert?

Ach... Ich habe gerade gesehen, dass ich so keine direkten Values auf
einen Port schreiben kann!

Ich muss noch zwei LDI befehle verwenden um einen Wert in einen
Register zu laden... D.h. Noch 2 Taktzyklen dazu!

1/6MHz

Liege ich damit richtig?

von Sssssss (Gast)


Lesenswert?

mach doch
1
loop:
2
 sbi PORTB, 1;
3
 nop;
4
 nop;
5
 cbi PORTB, 1;
6
 rjmp loop;
somit wäre der pin 3 takte auf high und 3 takte auf low.
Vorher das als output deklarieren nicht vergessen ;)

von Martin Peer (Gast)


Lesenswert?

Danke Jungs ihr seid echt klasse!

Ich habe gerade mit meinem ATmega8 und dem Programm von Ssssss meine
µCs erfolgreich reanimiert!!!!

Danke schön!!!

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

die zwei LDIs mußt du nicht in der Schleife machen. So etwa:

  ldi r16,0x01
  ldi r17,0x00
  out DDRx, r16
loop:
  out PORTx, r16
  out PORTx, r17
  rjmp loop

Matthias

von Martin Peer (Gast)


Lesenswert?

Noch eine Frage... Wenn ich nun meinen Externen Quarz aktivieren möchte
auf dem M16 welche Einstellung muss ich dann am Fusebit vornehmen?

Mfg, Martin

von Martin Peer (Gast)


Lesenswert?

Ich meinte Oszillator! Nicht Quarz!

von Bolle (Gast)


Lesenswert?

So ist es perfekt:
1
loop:
2
  out PORTx, r16
3
  nop
4
  out PORTx, r17
5
  rjmp loop
Dann ist der Pin während zwei Taktzyklen auf "0" und während der
nächsten beiden auf "1", d. h. die Pin-Toggle-Frequenz ist gleich der
halben Systemfrequenz, welches die maximale Frequenz ist, die sich so
erzeugen läßt.  Ohne das "nop" würde die "1" nur einen Zyklus lang
währen, weil "out" einen Zyklus benötigt, "rjmp" aber zwei.

von Bolle (Gast)


Lesenswert?

So ist es perfekt:

loop:
  out PORTx, r16
  nop
  out PORTx, r17
  rjmp loop

Dann ist der Pin während zwei Taktzyklen auf "0" und während der
nächsten beiden auf "1", d. h. die Pin-Toggle-Frequenz ist gleich
der
halben Systemfrequenz, welches die maximale Frequenz ist, die sich so
erzeugen läßt.  Ohne das "nop" würde die "1" nur einen Zyklus lang
währen, weil "out" einen Zyklus benötigt, "rjmp" aber zwei.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

wenn dann

loop:
  out PORTx, r16
  nop
  nop
  out PORTx, r17
  rjmp loop

da rjmp 2 Zyklen benötigt.

Matthias

von Bolle (Gast)


Lesenswert?

Hallo Matthias,

Du hast recht.  Die maximale Pin-Toggle-Frequenz (mit Tastverhältnis
1:1), die man so erreichen kann, beträgt also Systemfrequenz/3.  Habs
zur Sicherheit auch im Simulator überprüft.

Danke für die Korrektur.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

fosz/6. Man kann aber auch fosz/4 erreichen wenn man das ganze Flash
mit sbi/cbi füllt.

Matthias

von crazy horse (Gast)


Lesenswert?

bleibt als absolutes Maximum fosz/2 mit einem passenden Timer.

von Andi K. (Gast)


Lesenswert?

Man könnte das "toggeln" eines Pins auch in Hardware machen lassen.
Output Compare C auf 1 (vielleicht auch auf 0), CTC-Mode an und OC1A im
Toggle-Mode.
Hätte man noch einen Tiny26, könnte man die Clock-Source für den Timer1
auf den internen 64 MHz PLL schalten und evtl. eine Frequenz von 21 oder
32 MHz erzeugen.

@Martin Peer: Wegen dem Oscillator, CKSEL3..0 auf 0000 und SUT1..0 auf
01.
Aber gugst Du besser im Datenblatt zum besseren Verständnis.

MfG
Andi

von Bolle (Gast)


Lesenswert?

Auch hi nochmal,

>fosz/6.

stimmt abermals.  Mich macht das alles total durcheinander.  Deshalb
schreib ich nur Blödsinn (ärger).

Folgende Variante ist vielleicht auch ganz nett (zumindest aber sehr
minimalistisch):

Loop:
  inc   r16
  out   PORTD, r16
  rjmp  Loop

Liefert zwar nur fosz/8 an Pin 0, aber dafür an den übrigen Pins auch
noch fosz/16, fosz/32 ... fosz/1024.

von Martin #. (martin-)


Lesenswert?

Ich habe das gleiche Problemm.Ich habe fusebits CKOPT und CKSEL geändert
damit der MCU mit externem Quarz läuft und jetzt ist er tot.

von Sssssss (Gast)


Lesenswert?

Dann les den Thread nochmal und machs genauso wie der andere Martin
weiter oben ;)
Hier steht schon alles um ihn zu reanimieren.

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.