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?
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
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.
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.
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.