www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verdammte Fusebits


Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus K. (markus-)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philip Rehkop (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
                      |

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jadeclaw (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: anm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sssssss (Gast)
Datum:

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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Peer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meinte Oszillator! Nicht Quarz!

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wenn dann

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

da rjmp 2 Zyklen benötigt.

Matthias

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bleibt als absolutes Maximum fosz/2 mit einem passenden Timer.

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin #### (martin-)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sssssss (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.