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
Ü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
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
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.
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 |
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.
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.
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 ;)
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
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
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!
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
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
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?
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 ;)
Danke Jungs ihr seid echt klasse! Ich habe gerade mit meinem ATmega8 und dem Programm von Ssssss meine µCs erfolgreich reanimiert!!!! Danke schön!!!
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
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
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.
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.
Hi wenn dann loop: out PORTx, r16 nop nop out PORTx, r17 rjmp loop da rjmp 2 Zyklen benötigt. Matthias
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.
Hi fosz/6. Man kann aber auch fosz/4 erreichen wenn man das ganze Flash mit sbi/cbi füllt. Matthias
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.