Verdammte Fusebits

Gast #222450
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
#222451
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
Gast #222452
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
Gast #222453
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.
Gast #222454
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
                      |
Gast #222455
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.
Gast #222457
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 ;)
Gast #222458
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
Gast #222459
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
Gast #222460
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!
Gast #222461
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
Gast #222462
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
Gast #222463
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?
Gast #222469
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.
Gast #222470
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.
Gast #222472
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.
Gast #222475
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
Gast #222476
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren