mit "Arduino as ISP" Fuses für AtTiny85 setzen

Hallo nochmal,

ich hätte da nochmal eine Frage. Wenn ich den Arduino nutze um einen AtTiny85 zu flashen, dann habe ich die Wahl zwischen den vier Modi:

  • ATtiny85 @ 16 MHz (external crystal; 4.3 V BOD)
  • ATtiny85 @ 16 MHz (internal PLL 4.3 V BOD)
  • ATtiny85 @ 8 MHz (internal oscillator; BOD disabled)
  • ATtiny85 @ 1 MHz (internal oscillator; BOD disabled)

Wenn ich das richtig verstanden habe werden die entsprechenden Fuses automatisch beim Brennen des Bootloaders mit AVRDUDE-Parametern gesetzt.

Könnte ich die auch in der Arduino-IDE ändern wenn ich z.B. einen langsamen 32kHz-Quarz verwenden möchte? Oder brauche ich dazu eine ganz andere Soft- und Hardware? Ich finde das sehr unübersichtlich, weil im Netz da viel Anleitungen zu existieren, wo ein bunter Strauß verschiedenster Programme verwendet werden ...

Danke für Aufklärung!

Gute N8, kuahmelcher.

Du kannst die vorhandene/genutzte boards.txt anpassen, oder eine boards.local.txt mit deinen Erweiterungen daneben legen.

kuahmelcher: Könnte ich die auch in der Arduino-IDE ändern wenn ich z.B. einen langsamen 32kHz-Quarz verwenden möchte? Oder brauche ich dazu eine ganz andere Soft- und Hardware?

Die IDE kennt den ATtiny85 nur, wenn Du eine Erweiterung installierst hast. Vom Programmierer dieser Erweiterung hängt es ab, welche Kombinationen Du zur Auswahl angezeigt bekommst.

Die Erweiterung SpenceKonde/ATTinyCore scheint mehr Optionen anzubieten, aber nicht die 32 kHz. Du könntest aber nach einer Erweiterung suchen, die auch die 32 kHz anbietet.

Die Optionen stehen in der schon erwähnten boards.txt, deren Ergänzung Dir dann alle Möglichkeiten bieten. Welche das sind, findest Du im Fuse Calculator. Das ist keine leichte Kost, aber man kann sich da hineindenken. Da die 32 kHz nicht expliziet aufgeführt sind, könnte es Einschränkungen geben, die Du wiederum dem Datenblatt entnehmen müßtest.

Ich meine mich schwach erinnern zu können, jemand hätte geschrieben, sein ATtiny liefe seit längerer Zeit mit 32 kHz. Es besteht also Hoffnung :)

Hallo,

ich kann mir aber auch vorstellen, dass es bei 32 KHz Takt zu Problemen kommt, wenn man analoge Signale einlesen möchte:

The ADC module contains a prescaler, which generates an acceptable ADC clock frequency from any CPU frequency above 100 kHz. The prescaling is set by the ADPS bits in ADCSRA. The prescaler starts counting from the moment the ADC is switched on by setting the ADEN bit in ADCSRA. The prescaler keeps running for as long as the ADEN bit is set, and is continuously reset when ADEN is low.

32 kHz ist ja schon fast "Singlestepp-Modus" ohne echten Nutzen für externe Prozesse.

LG Rudi

agmue: Die IDE kennt den ATtiny85 nur, wenn Du eine Erweiterung installierst hast. Vom Programmierer dieser Erweiterung hängt es ab, welche Kombinationen Du zur Auswahl angezeigt bekommst.

Die Erweiterung SpenceKonde/ATTinyCore scheint mehr Optionen anzubieten, aber nicht die 32 kHz. Du könntest aber nach einer Erweiterung suchen, die auch die 32 kHz anbietet.

Die Optionen stehen in der schon erwähnten boards.txt, deren Ergänzung Dir dann alle Möglichkeiten bieten. Welche das sind, findest Du im Fuse Calculator. Das ist keine leichte Kost, aber man kann sich da hineindenken. Da die 32 kHz nicht expliziet aufgeführt sind, könnte es Einschränkungen geben, die Du wiederum dem Datenblatt entnehmen müßtest.

Das bringt mich einen entscheidenden Schritt weiter! Ich weiß jetzt, dass ich keine weitere Software zum Fuse-setzen brauche und dass ich sie sogar indirekt über die "Boards.txt" setzen kann.

Ich habe drei verschiedene Core-Dateien heruntergeladen und habe leider bisher keinen Erfolg. Also habe ich meine eigene Core-DAtei bearbeitet und einen "neuen" Attiny85 hinzugefügt:

######################################

attiny85at32k.name=ATtiny85 @ 32 KHz  (externer Quarz; BOD disabled)

attiny85at32k.upload.tool=arduino:arduinoisp

attiny85at32k.upload.maximum_size=8192
attiny85at32k.upload.maximum_data_size=512

# Default clock (slowly rising power; long delay to clock; 8 MHz internal; divide clock by 8)
# Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 64 ms; [CKSEL=0010 SUT=10]; default value
# Divide clock by 8 internally; [CKDIV8=0]
# Brown-out detection disabled; [BODLEVEL=111]
# Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]

attiny85at32k.bootloader.low_fuses=0xE6
attiny85at32k.bootloader.high_fuses=0xDf
attiny85at32k.bootloader.extended_fuses=0xFF

attiny85at32k.bootloader.path=empty
attiny85at32k.bootloader.file=empty85at32k.hex
attiny85at32k.bootloader.tool=arduino:avrdude

attiny85at32k.build.mcu=attiny85
attiny85at32k.build.f_cpu=32768L
attiny85at32k.build.core=tiny

#################################

Ich habe lediglich die folgenden Werte angepasst:

attiny85at32k.name (selbst ausgedacht) attiny85at32k.bootloader.low_fuses=0xE6 (von http://www.engbedded.com/fusecalc übernommen) attiny85at32k.bootloader.high_fuses=0xDf (dito) attiny85at32k.bootloader.extended_fuses=0xFF (dito) attiny85at32k.bootloader.file=empty85at32k.hex (selbst ausgedacht, Datei existiert noch nicht!) attiny85at32k.build.f_cpu=32768L (Taktung 32kHz = 2^15)

Könnte ich es so ausprobieren oder bin ich wieder irgendwo schief gewickelt (und ich mache den uC kaputt)?

Danke und Gruß, kuahmelcher

RudiDL5: Hallo,

ich kann mir aber auch vorstellen, dass es bei 32 KHz Takt zu Problemen kommt, wenn man analoge Signale einlesen möchte:

32 kHz ist ja schon fast "Singlestepp-Modus" ohne echten Nutzen für externe Prozesse.

LG Rudi

Tja, also ich treibe den ganzen Aufwand, um eine exakte Zeit zu messen. Ich will eigentlich nur eine einigermaßen präzise Eieruhr bauen ohne mehrere Minuten Verzögerung zu haben, wenn der Braten 90 Minuten im Backofen drin ist. :o) Die Taktung ist mir vollkommen egal. Ich dachte das mit den 32kHz "macht man so", weil es ein sogenannter "Uhrenquarz" ist. Geht's denn einfacher?

Danke und Gruß, kuahmelcher.

Ich will eigentlich nur eine einigermaßen präzise Eieruhr bauen

Mache doch einen normalen Quarz dran... 8MHz oder 16MHz. Die sind für deinen Braten längst genau genug.

Die sind für deinen Braten längst genau genug.

Das unterschreibe ich mal genau so.

Na ja, wenn man es dann [u]noch[/u] genauer haben will, dann kann man die Dinge so betreiben wie ich selbst: Nämlich eine Digital-Uhr mit einem Quarz-Oszillator für 3.2768 MHz. Okay, Dann ist aber auch evtl. Assembler angesagt und einige anderen "anstrengenden Dinge", die nicht Jedermanns Sache sind. Auf jeden Fall läuft hier meine Assembler-Clock genau mit dieser o.a. Frequenz. Sie hat in nach einer guten Woche eine Abweichung von lediglich 1 Sekunde... Danach habe ich den Braten eh schon längst verdaut ;-)

RudiDL5: Nämlich eine Digital-Uhr mit einem Quarz-Oszillator für 3.2768 MHz.

Nun weiß ich wieder, an wen ich gedacht habe, war nur um den Faktor zehn * zehn schneller.

EDIT 20:47: Die Grundrechenarten sind halt schwierig ;D

32kHz x10 ... x10 ~ 3MHz :o