Forum: Mikrocontroller und Digitale Elektronik FuseBit Atmega 644 verstellt?


von David (doubarry)


Lesenswert?

Moin,

ich habe noch nie mit den FuseBits gearbeitet, bin aber derzeit an der 
Programmierung zum Auslesen des MD-Bus. Da ich hierzu einen MDB-Master 
benötige und ich das Rad natürlich nicht neu erfinden wollte, bin ich 
über folgendes Github-Prjekt gestolpert:

https://github.com/perdidor/Arduino-MDB-UART/tree/master

Also schnell einen 644er bestellt und mittels der Website:

https://www.engbedded.com/fusecalc/
den Aufruf für avrdude gebaut und natürlich schnell ENTER gedrückt.

Aufruf: avrdude -p m644 -P com11 -c usbasp -b 19200 -U lfuse:w:0xf7:m -U 
hfuse:w:0xd6:m -U efuse:w:0xf9:m

so das wars dann auch schon mit der Kommunikation mit dem Atmega...
Als Ausgabe kam OK und das gewohnte "avrdude done.  Thank you."

Kann mir jemand sagen was ich falsch gemacht habe und warum ich jetzt 
keine Verbindung mehr bekomme?

Habe auch schon einen 16000er Takt angelegt, dennoch keine Kommunikation 
mehr möglich:

avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp 
firmware update.
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Ein STK ist leider nicht vorhanden, wäre schade ich müsste den Atmega 
entsorgen.

Gruß und einen schönen Sonntag

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

David schrieb:
> Ein STK ist leider nicht vorhanden,

Ein beliebiger AVR Arduino und ScratchMonkey könnte den Chip vorm 
verschrottet werden bewahren.

David schrieb:
> Kann mir jemand sagen was ich falsch gemacht habe und warum ich jetzt
> keine Verbindung mehr bekomme?

Offensichtlich irgendwas mit dem Takt.

: Bearbeitet durch User
von David (doubarry)


Lesenswert?

Arduino UNO sind sogar zwei vorhanden.

Gibt es zu deiner Antwort auch irgendwo eine Anleitung, oder kannst du 
mir noch ein paar Stichpunkte mitgeben?
HV-Programmierung traue ich mir jetzt nicht zu, die MISO/MOSI Verbindung 
scheint ja nicht mehr möglich zu sein.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

David schrieb:
> Gibt es zu deiner Antwort auch irgendwo eine Anleitung, oder kannst du
> mir noch ein paar Stichpunkte mitgeben?

Dein Google scheint ja total  kaputt zu sein.....

Anleitung:
https://microtherion.github.io/ScratchMonkey/index.html

Code:
https://github.com/microtherion/ScratchMonkey

von MaWin O. (mawin_original)


Lesenswert?

Du hast einen externen Full-Swing-Oszillator konfiguriert. Dann musst du 
auch einen anschließen. Sonst gibts keinen Takt.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

MaWin O. schrieb:
> Dann musst du
> auch einen anschließen.

Oder auch den UNO als Takt Generator nutzen.

von David (doubarry)


Lesenswert?

MaWin O. schrieb:
> Full-Swing-Oszillator

Hatte ich mit entsprechnender Hardware wie in 
Arduino-MDB-UART/PCB/parts_list.txt aus dem Github-projekt aufgeführt 
umgesetzt.

Ab hier sollte die Verbindung über MISO/MOSI doch theoretisch wieder 
gehen oder?

: Bearbeitet durch User
von MaWin O. (mawin_original)


Lesenswert?

David schrieb:
> Ab hier sollte die Verbindung über MISO/MOSI doch theoretisch wieder
> gehen oder?

Wie schnell ist der? Hast du einen zu schnellen Programmer-Takt? Bei 
langsamem Oszillator darf man nicht den vollen Programmer-Takt fahren.

von David (doubarry)


Lesenswert?

Takt Steht auf 9600baud und der Quartz hat 16.000MHz.

EDIT:
Mit dem Schalter -F beim avrdude bekomme ich jetzt folgende Meldung:

avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp 
firmware update.
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x2e6176
avrdude: Expected signature for ATmega644 is 1E 96 09

(Habe zwischenzeitlich den Quartz auf dem Steckboard direkt ohne 
Jumperkabel mit dem AVR verbunden)

irgendwas scheint mit dem Takt noch nicht zu stimmen, er wirft mir bei 
"avrdude: Device signature" immer eine andere aus.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

David schrieb:
> und der Quartz hat 16.000MHz.

Du hast die Fuses nicht für einen Quarz/Crystal/Resonator konfiguriert, 
sondern für einen Oszillator, wie mir scheint.
Und ja: Das macht einen/den Unterschied

David schrieb:
> Mit dem Schalter -F beim avrdude
Der kann nur AVRs retten, bei denen die Signatur kaputt ist.
Gegen eine Fuses Fehlkonfiguration hilft der nicht.
(meist macht der Schalter mehr Probleme als er nutzt)

Tipp:
Dein Programmer hat einen "slow clock" Jumper.

: Bearbeitet durch User
von David (doubarry)


Lesenswert?

Ok, Danke!

Ich sehe gerade MaWin O. hatte das auch schon geschrieben...

Jetzt frage ich mich aber schon etwas, in dem Github-Projekt ist in 
"parts_list.txt" extra der Quartz mit 16.000 aufgeführt und auch bei den 
PCB's sehe ich immer einen Quartz... Und in dem Screenshot der Readme 
sind die Fuses für den 644 auch so ausgewählt.

Was ist denn nun bei meinen Fuses falsch gelaufen? Habe doch die 
gleichen "lfuse:w:0xf7:m -U hfuse:w:0xd6:m -U efuse:w:0xf9:m" wie 
beschrieben gesetzt!?

Kann das jetzt irgendwie nicht nachvollziehen.

Wäre klasse jemand könnte mir hier noch eine kleine Erklärung geben und 
ggf aufzeigen wie es sein sollte mit einem externen Quartz.

(Oszillator hab ich bestellt, teste ich morgen.)

von MaWin O. (mawin_original)


Lesenswert?

David schrieb:
> Wäre klasse jemand könnte mir hier noch eine kleine Erklärung geben und
> ggf aufzeigen wie es sein sollte mit einem externen Quartz.

Ja dann muss man halt Quartz statt Resonator einstellen.
Die Werte stehen im Datenblatt.
Dann ist deine Github-Quelle wohl falsch. Soll vorkommen.

von S. L. (sldt)


Lesenswert?

Fuse Low byte 0xF7: u.a. 'Full swing Crystal Oscillator': ist dieser 16 
MHz-Quarz korrekt angeschlossen, incl. der Kondensatoren?

Fuse High byte 0xD6: u.a. Bootloader, spielt hier aber keine Rolle

Extended Fuse byte 0xF9: 'BODLEVEL' - da lese ich im Datenblatt 
'Reserved'?

von Wastl (hartundweichware)


Lesenswert?

Immer wieder lustig.

Beitrag "Re: Timing-Problem"

von Ingo W. (uebrig) Benutzerseite


Lesenswert?

Je nach eingesetzter Programmerhardware kann man mit AVRDUDE mit dem 
Schalter -B <Periodendauer in µs> die SPI-Geschwindigkeit runtersetzen. 
-B 100 wären dann 10kHz.

von David (doubarry)


Lesenswert?

S. L. schrieb:
> Fuse Low byte 0xF7: u.a. 'Full swing Crystal Oscillator': ist dieser 16
> MHz-Quarz korrekt angeschlossen, incl. der Kondensatoren?
>
> Fuse High byte 0xD6: u.a. Bootloader, spielt hier aber keine Rolle
>
> Extended Fuse byte 0xF9: 'BODLEVEL' - da lese ich im Datenblatt
> 'Reserved'?

1. Ja, habe die Verkabelung schon zig mal kontrolliert, entwender ich 
mache immer den gleichen Fehler, oder es ist was anderes.

2. Ok, sollte hoffentlich passen.

3. BODLevel soll beim 644 wohl 110 sein, so wie ich es hinterlegt 
hatte...

Beitrag #7502898 wurde vom Autor gelöscht.
von David (doubarry)


Lesenswert?

Ingo W. schrieb:
> Je nach eingesetzter Programmerhardware kann man mit AVRDUDE mit dem
> Schalter -B <Periodendauer in µs> die SPI-Geschwindigkeit runtersetzen.
> -B 100 wären dann 10kHz.

richtig, das hatte ich auch gefunden, aber solang der Atmega keinen
richtigen Takt hat wie er ihn braucht, hilft das leider, nach meinem
Verständnis auch erstmal nicht weiter.

von S. L. (sldt)


Lesenswert?

Probeweise einen Hilfstakt > 1 MHz an XTAL1 einspeisen; z.B. mit einem 
der UNOs erzeugt.

PS:
> ... immer den gleichen Fehler ...
Korrekt an XTAL1&2 angeschlossen (nicht etwa an TOSC1&2)?

: Bearbeitet durch User
von David (doubarry)


Lesenswert?

S. L. schrieb:
> Probeweise einen Hilfstakt > 1 MHz an XTAL1 einspeisen; z.B. mit einem
> der UNOs erzeugt.

avrdude: warning: cannot set sck period. please check for usbasp 
firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.02s

avrdude: Device signature = 0x1e9609 (probably m644)
avrdude: reading lfuse memory:

Reading | ################################################## | 100% 
0.01s

avrdude: writing output file "<stdout>"
:01000000F708
:00000001FF

avrdude: safemode: Fuses OK (E:FF, H:99, L:F7)

avrdude done.  Thank you.

So, da geht doch schon etwas mehr! Danke!
Nun also noch herausfinden wie ich ihn auf externen Quartz umstelle, das 
verstehe ich aber nicht, das Datenblatt hilft mir auch nicht wirklich 
weiter, da auch die Begriffe des external oscillators immer 
durcheinander gewürfelt werden...
Full Swing Crystal Oscillator muss doch aktiviert sein für den 16.000MHz 
Quarz oder verstehe ich jetzt was falsch?

von Stefan F. (Gast)


Lesenswert?

Dieser Aufsatz hilft dir womöglich, das Problem besser zu verstehen und 
Fehler in Zukunft zu vermeiden:
http://stefanfrings.de/avr_verfused/index.html

von S. L. (sldt)


Lesenswert?

> ... geht doch ...

Yô - sieht für mich gut aus; ich vermute, dass mit dem Quarz oder den 
Kondensatoren etwas nicht stimmt.

von Stefan F. (Gast)


Lesenswert?

> Full Swing Crystal Oscillator muss doch aktiviert sein für
> den 16.000MHz Quarz oder verstehe ich jetzt was falsch?

Full Swing Crystal Oscillator ist für einen Quarz.

Du hast allerdings auch JTAG aktiviert, war das Absicht? Dadurch sind 
einige I/O Pins nicht frei verwendbar.

Steckbretter haben viel störende Kapazität zwischen den Kontaktleisten. 
Manchmal funktioniert damit der Quarz-Oszillator nicht. In dem Fall kann 
man versuchen, die beide Kondensatoren zu verkleinern oder ganz weg zu 
lassen. Wichtig ist dabei auch, dass die GND Anschlüsse der 
Kondensatoren möglichst direkt zum GND Pin des IC führen, also ohne 
weitere Drahtbrücken dazwischen.

von S. L. (sldt)


Lesenswert?

> Du hast allerdings auch JTAG aktiviert ...

Mit 'Fuse High byte' 0xD6?

PS:
Also das 0xD6 vom Anfang war gemeint.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

S. L. schrieb:
> Mit 'Fuse High byte' 0xD6?

Nein mit F7. Vielleicht habe ich mich auch vertan.

Schau dir das im Engbedded fuse Calculator an. Da kannst du unten die 
Hex Zahlen eingeben, auf apply klicken, und dann darüber sehen, was es 
bewirkt.

von S. L. (sldt)


Lesenswert?

F7 ist das Fuse Low byte - hat nichts mit JTAG zu tun; dieses wird mit 
dem Fuse High byte geschaltet: abgeschaltet mit dem ursprünglichen D6, 
eingeschaltet mit dem 99, das avrdude zuletzt meldete.

von David (doubarry)


Lesenswert?

Stefan F. schrieb:
> Dieser Aufsatz hilft dir womöglich, das Problem besser zu verstehen und
> Fehler in Zukunft zu vermeiden:
> http://stefanfrings.de/avr_verfused/index.html

top, sowas hatte ich gesucht! Das werded ich mir morgen mal in Ruhe 
durchlesen!

von David (doubarry)


Lesenswert?

Stefan F. schrieb:
> In dem Fall kann
> man versuchen, die beide Kondensatoren zu verkleinern oder ganz weg zu
> lassen.

1A!!! Das wars, nun geht es auch mit dem Quartz!!

Herzlichen Dank!

von S. L. (sldt)


Lesenswert?

Welchen Wert hatten die Kondensatoren?

von David (doubarry)


Lesenswert?

S. L. schrieb:
> Welchen Wert hatten die Kondensatoren?

Auf der Packung stand 22pF... ggf haben sie einen anderen Wert, oder 
aber das Steckbrett ist nicht (mehr) gut. Auch hatte ich GND über ein 
Jumper-Kabel gesetzt.

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.