Forum: Mikrocontroller und Digitale Elektronik Arduino Clock Source


von Obs (Gast)


Lesenswert?

Hi Comunity,

ich habe einen Arduino Mega 2560. Bisher lief er mit dem internen 8 MHz 
Ozillator. Jetzt wollte ich den externen 16 MHz Quartz als Quelle 
verwenden und habe per Fuse external Clock eingestellt. Aber jetzt 
funktioniert gar nichts mehr. Ich kann es auch per ISP-Programmer nicht 
mehr umstellen. Was kann ich jetzt tun? Danke schon mal.

von Mike (Gast)


Lesenswert?

Obs schrieb:
> Jetzt wollte ich den externen 16 MHz Quartz als Quelle
> verwenden und habe per Fuse external Clock eingestellt.

Und warum stellst du "external Clock" ein, wenn du einen externen Quarz 
betreiben möchtest?

Dann besorg dir mal irgendeinen Taktgenerator und schließ den an. Dann 
wird's auch wieder gehen.

von Harald (Gast)


Lesenswert?

Verwenden die arduinos nicht von Hause aus den 16 MHz quarz? Zumindest 
beim Uno ist es definitiv so.

von OAmp (Gast)


Lesenswert?

Genau auf dem Mega 2560 ist ein 16 Mhz Quarz drauf-

von Obs (Gast)


Lesenswert?

Mike schrieb:
> Und warum stellst du "external Clock" ein, wenn du einen externen Quarz
> betreiben möchtest?

Weil ich dachte, dass das so richtig ist :D

Was hätte ich denn einstellen müssen? Low Power Crystal Oscillator oder
Full Swing Crystal Oscillator? Was ist dann external Clock? Bekomme ich 
das auch mit dem AVR-Dragon hin?

Harald schrieb:
> Verwenden die arduinos nicht von Hause aus den 16 MHz quarz? Zumindest
> beim Uno ist es definitiv so.

Kann sein. Ich verwende aber auch nicht die Arduino-IDE und den 
Arduino-Bootloader, sondern arbeite direkt mit C, dem AVR-Studio und nem 
AVR-Dragon.

von Harald (Gast)


Lesenswert?

Na dann. Rtfm. Und wenn du's verbockt hast selber schuld. Wer lesen kann 
ist klar im Vorteil.

von Harald (Gast)


Lesenswert?

Obs schrieb:
> Mike schrieb:
> Und warum stellst du "external Clock" ein, wenn du einen externen Quarz
> betreiben möchtest?
>
> Weil ich dachte, dass das so richtig ist :D
> Was hätte ich denn einstellen müssen? Low Power Crystal Oscillator oder
> Full Swing Crystal Oscillator? Was ist dann external Clock? Bekomme ich
> das auch mit dem AVR-Dragon hin?
> Harald schrieb:
> Verwenden die arduinos nicht von Hause aus den 16 MHz quarz? Zumindest
> beim Uno ist es definitiv so.
>
> Kann sein. Ich verwende aber auch nicht die Arduino-IDE und den
> Arduino-Bootloader, sondern arbeite direkt mit C, dem AVR-Studio und nem
> AVR-Dragon.

Das ist dem Chip aber herzlich egal. Die Fuses sind für den externen 
quarz schon gesetzt.

von Obs (Gast)


Lesenswert?

Harald schrieb:
> Das ist dem Chip aber herzlich egal. Die Fuses sind für den externen
> quarz schon gesetzt.

Nicht wenn ich sie im C-Code umsetze ^^

Hab grade mal geschaut und die XTAL1- und XTAL2-Pins sind ja nicht nach 
draußen geführt ... kann ich den Arduino jetzt noch retten?

von Harald N. (haraldn)


Lesenswert?

http://arduino.cc/en/uploads/Main/arduino-mega2560_R3-sch.pdf

An den XTAL Pins hängt der Quarz...

Ob Arduino oder C ist ziemlich egal. Nachdem der Arduino-Dialekt 
letztlich C-Code ergibt, der vom AVR GCC kompiliert wird...

Und Fuses setzt man nicht im C-Code um, oder irre ich!?

von Der RETTER vom Dienst (Gast)


Lesenswert?

Obs schrieb:
> kann ich den Arduino jetzt noch retten?

Ja, mit einem externen Taktsignal
- von einem anderen µC erzeugen lassen,
- das 1 kHz Signal vom Oszi,
- die 44,1 kHz aus einem CD Player
- aus 2 Transistoren oder 1-2 Logikgattern einen Taktgenerator bauen
- von der Soundkarte ein Rechtecksignal erzeugen lassen
- LPT Schnittstelle
- Sekundentakt einer Quarzuhr ;-)

Das ist kein Arduino, sondern ein ATmega2560

von Harald N. (haraldn)


Lesenswert?

>
> Das ist kein Arduino, sondern ein ATmega2560

Der TO schrieb von einem ARDUINO MEGA 2560 Board - und der ist kein 
Arduino??? Sofern du den Chip ATmega 2560 meinst - mea culpa

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Obs schrieb:
> Harald schrieb:
>> Das ist dem Chip aber herzlich egal. Die Fuses sind für den externen
>> quarz schon gesetzt.
>
> Nicht wenn ich sie im C-Code umsetze ^^
Wie kommst du denn auf den Unsinn?

> Hab grade mal geschaut und die XTAL1- und XTAL2-Pins sind ja nicht nach
> draußen geführt ... kann ich den Arduino jetzt noch retten?
Löte an dem Quarzanschluss, der auf XTAL1 geht, einen Draht an und lege 
da einen Takt an. Dann kannst du wieder mit ISP drauf zugreifen.
Oder du bastelst dir einen JTAG-Adapter. Wird ja auch langsam Zeit. JTAG 
arbeitet mit seinem eigenen Takt.

Die Fuses stellst du auf Full Swing oder Ext. Crystal.

mfg.

von Obs (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Obs schrieb:
>> Harald schrieb:
>>> Das ist dem Chip aber herzlich egal. Die Fuses sind für den externen
>>> quarz schon gesetzt.
>>
>> Nicht wenn ich sie im C-Code umsetze ^^
> Wie kommst du denn auf den Unsinn?

Man kann die Fuses auch direkt im C-Code einstellen:
1
FUSES =
2
{
3
    .low = (FUSE_CKSEL0 & FUSE_CKSEL2 & FUSE_CKSEL3 & FUSE_SUT0), 
4
    .high = (FUSE_BOOTSZ0 & FUSE_SPIEN & FUSE_JTAGEN), 
5
    .extended = 0xff,
6
};

Aber spielt ja auch keine Rolle, ob ich es im C-Code mache oder mit nem 
Programmer wie dem Dragon... Tatsache ist ich habs verstellt und 
versuche jetzt es wieder hinzubekommen...

>> Hab grade mal geschaut und die XTAL1- und XTAL2-Pins sind ja nicht nach
>> draußen geführt ... kann ich den Arduino jetzt noch retten?
> Löte an dem Quarzanschluss, der auf XTAL1 geht, einen Draht an und lege
> da einen Takt an. Dann kannst du wieder mit ISP drauf zugreifen.
> Oder du bastelst dir einen JTAG-Adapter. Wird ja auch langsam Zeit. JTAG
> arbeitet mit seinem eigenen Takt.
>
> Die Fuses stellst du auf Full Swing oder Ext. Crystal.
>
> mfg.

Danke, das hilft mir doch mal.

von chris (Gast)


Lesenswert?

Obs schrieb:
> Man kann die Fuses auch direkt im C-Code einstellen:

das bringt aber nur was, wenn du anschließend das *.elf File flashst 
anstatt des *.hex.
Die Fuses werden dabei immernoch vom Programmer gesetzt und nicht von 
deinem Programm im µC

von Thomas E. (thomase)


Lesenswert?

Obs schrieb:
> Man kann die Fuses auch direkt im C-Code einstellen:
Man kann die Fuses NICHT im C-Code einstellen! Mit dem vom Compiler bzw. 
Linker erzeugten Hex-File kann man keine Fuses einstellen.

Die einzige Möglichkeit beim Flashen des Controllers die Fuse- und 
Lockbits zu verändern, ist, wenn alles in einem *.elf-File gespeichert 
ist und die Programmierung mit diesem File gemacht wird. Ob es damit:
1
FUSES =
2
{
3
    .low = (FUSE_CKSEL0 & FUSE_CKSEL2 & FUSE_CKSEL3 & FUSE_SUT0), 
4
    .high = (FUSE_BOOTSZ0 & FUSE_SPIEN & FUSE_JTAGEN), 
5
    .extended = 0xff,
6
};

geht, indem dass im elf-File landet, kann ich ich allerdings nicht 
sagen. Mag sein. Ich glaube allerdings kaum, daß du mit einem elf-File 
flasht. Aber auch das ist völlig unabhängig vom Programm.

Das Flashen eines Hex-Files hat keine Auswirkungen auf die Fuses.

mfg.

: Bearbeitet durch User
von Kaj (Gast)


Lesenswert?

chris schrieb:
> das bringt aber nur was, wenn du anschließend das *.elf File flashst
> anstatt des *.hex.
Das .elf file ist als default eingestellt im Atmel Studio 6.1

Obs schrieb:
> Nicht wenn ich sie im C-Code umsetze ^^
Warum machst du auch so einen scheiß? Selbst schuld! Erst informieren 
wie die Fuses gesetzt sind, und dann was machen... Der 16MHz Quarz ist 
da nicht aus spaß auf dem Arduinoboard drauf...

von Thomas E. (thomase)


Lesenswert?

Kaj schrieb:
> chris schrieb:
>> das bringt aber nur was, wenn du anschließend das *.elf File flashst
>> anstatt des *.hex.
> Das .elf file ist als default eingestellt im Atmel Studio 6.1
Aber nicht zum Flashen. Das ist für den Debugger.

mfg.

von Harald N. (haraldn)


Lesenswert?

Wenn er eh alles besser weiss, dann soll ihm doch Google weiterhelfen... 
Echt, zuerst nicht informieren, sich null auskennen, aber alles besser 
wissen...

von m.n. (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Löte an dem Quarzanschluss, der auf XTAL1 geht, einen Draht an und lege
> da einen Takt an.

Man kann auch den XTAL1 Pin an den XTAL1 (Pin 1) vom ATmega16U2 löten 
und am besten auch dort belassen. Hier für einen UNO R3 gemacht:
http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7
Unter "automatischer Abgleich ..." mit einem Bild der Platine.

von Obs (Gast)


Lesenswert?

Harald Nagy schrieb:
> Wenn er eh alles besser weiss, dann soll ihm doch Google weiterhelfen...
> Echt, zuerst nicht informieren, sich null auskennen, aber alles besser
> wissen...

Was für eine überflüssige Antwort :D zu viel Zeit?

Ich hab nur gesagt, dass man die Fuses aus dem C-Code einstellen kann 
mit den bereitgestellten Macros. Ich hab nie behauptet, dass das zur 
Laufzeit passiert. Und ja, ich flashe das .elf-File mit dem Studio. D.h. 
damit:
1
FUSES =
2
{
3
    .low = (FUSE_CKSEL0 & FUSE_CKSEL2 & FUSE_CKSEL3 & FUSE_SUT0), 
4
    .high = (FUSE_BOOTSZ0 & FUSE_SPIEN & FUSE_JTAGEN), 
5
    .extended = 0xff,
6
};

kann ich sehr wohl die Fuses einstellen.

Ich komme aus der Software-Ecke und kenne mich noch nicht so gut mit 
Hardware aus. Da der Quarz nicht innerhalb des ATmega sitzt, dachte ich 
rein intuitiv, dass ich ihn als external Clock einbinden muss. Das war 
der Fehler. Dank zumindest ein paar hilfreicher Antworten weiß ich das 
jetzt und werde versuchen einen externen Clock an XTAL1 dran zu löten.

von Obs (Gast)


Lesenswert?

m.n. schrieb:
> Man kann auch den XTAL1 Pin an den XTAL1 (Pin 1) vom ATmega16U2 löten
> und am besten auch dort belassen. Hier für einen UNO R3 gemacht:
> http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7
> Unter "automatischer Abgleich ..." mit einem Bild der Platine.

Ahh super ... das sieht machbar aus. Vielen Dank!

von Obs (Gast)


Lesenswert?

Noch als Ergängung aus der fuse.h:
1
    The Fuse API allows a user to specify the fuse settings for the specific
2
    AVR device they are compiling for. These fuse settings will be placed
3
    in a special section in the ELF output file, after linking.
4
5
    Programming tools can take advantage of the fuse information embedded in
6
    the ELF file, by extracting this information and determining if the fuses
7
    need to be programmed before programming the Flash and EEPROM memories.
8
    This also allows a single ELF file to contain all the
9
    information needed to program an AVR.

von Kaj (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Kaj schrieb:
>> chris schrieb:
>>> das bringt aber nur was, wenn du anschließend das *.elf File flashst
>>> anstatt des *.hex.
>> Das .elf file ist als default eingestellt im Atmel Studio 6.1
> Aber nicht zum Flashen. Das ist für den Debugger.
>
> mfg.

Wenn ich in Atmel Studio 6.1 oben in der Leiste auf "Device Programming" 
(Ctrl+Shift+P) und dann auf "Memories" gehe, steht da als default das 
.elf-File drin. Drücke ich an gleicher stelle auf "Program", wo wird da 
wohl auch das .elf-File auf den Controller geflasht (alles andere würde 
ja auch keinen Sinn machen.). Ich bin so dreist zu behaupten, dass diese 
Stelle der IDE nichts (zumindesten nichts offensichtliches) mit dem 
Debugger zu tun hat. ;)

von Obs (Gast)


Lesenswert?

Noch für die, die es interessiert: Ich habe das Problem jetzt per JTAG 
gelöst. Glücklicherweise hatte ich zuvor schon JTAG bei der MCU 
aktiviert und so konnte ich einfach die JTAG-Pins meines Dragons mit den 
JTAG-Pins des ATmega2560 verbinden, die beim Arduino Mega  2560 über 
die ANALOG-IN-Pins A4 bis A7 nach draußen geführt sind. Über JTAG habe 
ich dann die Clock Source mit dem Studio umgestellt und nun funktioniert 
es wieder wie zuvor. Danke noch mal für die Hilfe und insbesondere für 
den Tipp mit JTAG.

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.