Arduino Clock Source

Gast #3575684
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.
Gast #3575695
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.
Gast #3575716
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.
Gast #3575721
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.
Gast #3575746
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?
Gast #3575768
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
#3575779
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.
Gast #3575812
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.
#3575826
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.
Gast #3575853
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...
Gast #3575899
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.
Gast #3575911
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.
Gast #3575999
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. ;)
Gast #3578423
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.

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