Wie stelle ich die Taktsicherungen auf einem ATtiny85 ein, wenn ich einen Arduino als Programmierer verwende?

17

Ich folge diesem Tutorial , programmiere den ATtiny85 mit einem Arduino und spiele damit einige Töne (über einen Piezo-Lautsprecher). Ich habe Probleme, die Töne auf die richtige Tonhöhe zu bringen (ich erstelle die Wellenformen manuell, da die Funktion tone () auf dem ATtiny85 nicht unterstützt wird).

Ich glaube, das Problem könnte an unterschiedlichen Taktraten auf dem Arduino und ATtiny liegen. Ich verstehe, dass die Taktrate auf dem ATtiny geändert werden kann. Wie kann ich dies unter Verwendung der Arduino-Umgebung erreichen?

Furchtgefühle
quelle
übrigens ist das echt cool, danke fürs teilen!
Vicatcu
Hut ab! Ich habe es nie geschafft, mein attiny85 auf diese Weise zu programmieren. Ich habe immer "nicht synchronisierte Programmierer" -Fehler, wenn nicht versucht wird, den Flash zu schreiben. Der Austausch des Arduino mit einem Buspiraten funktioniert jedoch ...
JonathanD
@ Jon: Ich bin mir nicht sicher, welche Ursache hinter "Programmierer nicht synchron" steckt, aber mit AVR Studio können Sie die Programmierfrequenz anpassen. Es kann eine ähnliche Option in avrdude geben, könnte einen Blick wert sein, wenn Sie es jemals wieder versuchen
Nick T

Antworten:

2

Ich glaube, die Arduino-Software (Bibliotheken und alle) geht davon aus, dass Sie mit 16 MHz arbeiten. Wenn Sie diese Annahme auf die Uhr anwenden, auf der Sie gerade laufen ... sollten die Dinge klappen. Angenommen, Sie betreiben den Tiny85 mit seinem internen Oszillator. Ich denke, er läuft mit 1 MHz. Multiplizieren Sie einfach alle Ihre Verzögerungsanweisungen (und andere Zeitbegriffe) mit 16.

Wenn Sie eine höhere Genauigkeit benötigen, als der interne Oszillator bietet, sollten Sie überlegen, einen externen Quarz oder Resonator zu verwenden, aber Sie müssen die Sicherungseinstellungen des AVR ändern, damit dies funktioniert, und ich denke, Sie benötigen einen Programmierer wie den AVRISP mkII das mit AVR Studio zu machen (meine Empfehlung).

Ich weiß nicht viel über die ArduinoISP-Skizze, aber für mich sieht es so aus, als würde das ISP-Protokoll ein bisschen kaputt gehen, um ein Programm auf den Zielchip (nicht auf den integrierten Mega328) hochzuladen. ArduinoISP ist hier dokumentiert: http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Beachten Sie, dass Sie derzeit keine UNO verwenden können, um die ArduinoISP-Skizze auszuführen. Für mich sieht es nicht so aus, als könnten Sie die Skizze verwenden, um das Arduino zu einer brauchbaren Oberfläche für die Verwendung der AVR Studio-GUI-Tools zu machen.

BEARBEITEN : Es sieht so aus, als ob Sachen eingeholt haben und eine UNO ist jetzt für ArduinoISP lebensfähig - danke für die Kommentare an alle

vicatcu
quelle
Vielen Dank für die Hinweise zur UNO. Ich verwende derzeit einen Duemilanove mit dem 168-Chip, der gegen einen 328-Chip getauscht wurde, und kann die normalen ATtiny-Skizzen über ArduinoISP ordnungsgemäß hochladen. Ich versuche es mit deinem / 16-Tipp!
Fearoffours
@fearoffours Sie wissen, dass Sie auch versuchen könnten, eine auf ArduinoISP basierende Skizze zu schreiben, die die Sicherungen auf einen bestimmten Wert setzt. Wenn ArduinoISP den Flash schreiben kann, gibt es keinen Grund, weshalb ich mir vorstellen kann, dass Sie das in den AVR-Datenblättern beschriebene ISP-Protokoll nicht zum Festlegen der Sicherungen verwenden können.
Vicatcu
1
@fearoffours, auch ich habe gerade festgestellt (und den Post aktualisiert), dass man multiplizieren mit 16 anstatt dividieren mit 16 (wenn man langsamer läuft,
dauert
Ich weiß, dass es über ein Jahr später ist, aber ich benutze und UNO erfolgreich als AVR-Programmierer. (Ich habe jedoch die ArduinoISP-Skizze so delay(20)geändert, dass sie delay(40)in ihrer Definition von eingefügt wurde void heartbeat().)
JellicleCat,
Ich weiß, dass es noch später ist, aber ich habe mein Uno erfolgreich als AVR-Programmierer eingesetzt, ohne irgendetwas in der Skizze zu ändern.
ingh.am
4

Ich benutze Arduino UNO + ArduinoISP erfolgreich.

Fügen Sie -UIhrem avrdudeBefehl Flags hinzu, um eine oder alle drei ATtiny-Sicherungen zu setzen.

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

Die Taktauswahl erfolgt in Bits [3: 0] der dritten Sicherung ('Fuse Low Byte'). Stellen Sie sie wie folgt ein, um einen externen Quarz (mit 8 MHz oder schneller) zu verwenden:

-U lfuse:w:0x6f:m

Seine Definition (ich schließe daraus) muss ungefähr so ​​lauten: [Fuse Low Byte]: [write]: [hex value]: [set manual]

Der Standardwert für die vier höherwertigen Bits dieses Bytes sind 0110, so dass die verlassen 6in 0x6fwie es ist, und nur die zweite Ziffer ändern, die f(der Standardwert ist 2).

NB: Wenn Ihre Prozesse länger oder kürzer dauern als erwartet, überprüfen Sie Ihren Clock Prescaler und Ihre Definition von F _ CPU.

JellicleCat
quelle
Ich wollte darauf hinweisen, dass ich gerade mein AtTiny85 mit der obigen -U lfuse:w:0x6f:mavrdude-Option gemauert habe . Ich muss es mit einem Hochspannungssetup zurücksetzen. Also ein Wort der Vorsicht für Leute (wie ich), die versuchen, Sicherungen zurückzusetzen, ohne zu wissen, was sie tun.
MV
@MV Hast du es wirklich gemauert oder den externen XO einfach nicht benutzt, als du versucht hast, die Sicherung zurückzusetzen?
Damd
Hatte keine externe Uhr zu benutzen. Was bedeutet Backen im engeren Sinne?
JellicleCat
@JellicleCat, Wenn Sie die Sicherung so einstellen, dass sie einen externen XO verwendet, müssen Sie einen externen XO verwenden, der von da an an die MCU angeschlossen ist, um Sicherungen zu programmieren, zu setzen und zurückzusetzen. Wenn Sie dies nicht tun, haben Sie den Eindruck, dass das mcu zugemauert ist (~ funktioniert nicht mehr), weil es die ext benötigt. XO funktioniert auch zum Programmieren über ISP.
Verdammt
In Ordung. Wenn ich die Sache verstehe, stelle ich die Sicherungen so ein, dass sie einen XO erwarten, und um den Chip wiederherzustellen, versorgte ich einen Arduino mit einer stehenden Welle, die einem XO diente.
JellicleCat
3

Versuchen Sie, das entsprechende Tutorial der gleichen Gruppe (MIT High-Low Tech) mit dem Titel Programming an ATtiny w / Arduino 1.0 zu verwenden .

Eine kurze Zusammenfassung: Wählen Sie im Menü Tools-> Board in der Arduino IDE den ATtiny85 und die Frequenz aus, mit der Sie arbeiten möchten (1 oder 8 MHz interne Uhr oder 20 MHz externer Quarz), und verwenden Sie dann Tools -> Burn Bootloader. Ich glaube, die Auswahl des gewünschten Speedboards ändert die Art und Weise, wie delay () und andere zeitbezogene Arduino-Funktionen arbeiten, um sich mit der Taktrate zu synchronisieren.

Ich selbst habe mit diesem Ansatz einige ATtiny84-Chips erfolgreich eingesetzt. Das einfache Blinkprogramm ist fixiert und es ist ein empfindlicheres Timing erforderlich, um manuell Impulse zu steuern, die mit delayMicroseconds () an einen Servo gesendet werden.

Tom B
quelle
1

Anscheinend verwenden Sie ArduinoISP, versuchen Sie es mit AVR Studio oder den Befehlszeilenoptionen für avrdude. Abhängig davon, wie der ArduinoISP geschrieben wurde, funktioniert er möglicherweise genau wie ein Atmel AVRISP mkII oder ähnliches.

Nick T
quelle
Ich hätte nicht gedacht, dass der Arduino selbst ein ISP-Programmierer ist - ich dachte, er hat einen ISP-Header, damit Sie einen neuen Bootloader auf einen frischen ATMega328 im Stromkreis brennen können ...
am
Wenn Sie den Artikel genauer lesen, können Sie anscheinend die ArduinoISP-Skizze verwenden, um dies zu tun - Sie lernen jeden Tag etwas Neues! :)
vicatcu
AVR Studio ist in Ordnung, wenn Sie mit Windows arbeiten. Wisse, dass es ein AVR-Plugin für Eclipse gibt (dies unterscheidet sich vom Arduino-Plugin, das als Sloeber bekannt ist). Unter Eigenschaften -> AVR ist ein raffinierter Sicherungsdialog verfügbar. Aber ja, das OP möchte nur die "Core" -Frequenzen und "Burn Bootloader" verwenden.
McKenzm
1

Die voreingestellten Sicherungseinstellungen für den ATtiny85 sind: lfuse 0x62, hfuse 0xdf, efuse 0xff. Dies verwendet den internen RC-Oszillator (8 MHz) mit "Division durch 8", sodass der Takt 1 MHz beträgt.

Weitere Sicherungseinstellungen finden Sie unter http://www.engbedded.com/fusecalc .

Sie können avrdude auch dann direkt verwenden, um die Sicherungseinstellungen Ihres ATtiny85 zu ändern, wenn Sie einen ArduinoISP als Programmierer verwenden.

Wenn Sie am Ende die Sicherung manuell ändern, um die Uhr zu ändern, müssen Sie die attiny85.build.f_cpuZeile in Ihrer Datei [arduino_folder] \ hardware \ attiny45_85 \ boards.txt bearbeiten.

Craig
quelle
+1 das ist wirklich nützlich, vor allem die Taktrate ist 1MHz, danke
fearoffours
0

Ich denke, Sie können die Sicherungen mit dem ArduinoISP setzen, aber nicht mit der Arduino IDE, sondern mit avrdude, überprüfen Sie diesen Link . Ich habe es nie selbst getestet.

Das Tutorial sagt explizit, dass Sie das Arduino UNO verwenden können, und ich habe es getestet und gearbeitet, damit ich das bestätigen kann, damit die ArduinoISP-Seite veraltet ist und die UNO-Warnung ignoriert werden sollte. Wenn Ihre UNO eine aus dem ersten Stapel war, haben Sie wahrscheinlich einen fehlerhaften Bootloader, müssen Sie den Bootloader erneut flashen. Überprüfen Sie diese Seite für weitere Informationen (ignorieren Sie die Seriennummern, alle meine UNOs waren nicht aus dieser Serie und hatten Probleme).

Die portierten Kernbibliotheken, die Sie aus dem Lernprogramm heruntergeladen haben, sind für die Verwendung des internen 1-MHz-Oszillators (bestätigt aus der Datei boards.txt) geschrieben. Möglicherweise liegt das Timming-Problem also in den portierten Kernbibliotheken oder in Ihrem Code.

Mit freundlichen Grüßen

Havok
quelle
0
  1. Wählen Sie unter "Boards Manager" ein ATTiny-Board aus, das das ATTiny85 enthält. Dies ist im Menü "Extras". Ich denke das beinhaltet jetzt "16MHz interne PLL". (Sie können eine von http://drazzy.com/package_drazzy.com_index.json installieren. )

  2. Wählen Sie bei Bedarf ATTiny85 explizit aus.

  3. Wähle eine Uhr. Wählen Sie eine interne Uhr, bis Sie mehr wissen .

  4. Klicken Sie als Menüpunkt auf "Bootloader brennen".

Achtung, Sie können die MCU möglicherweise nicht mehr programmieren, wenn Sie sehr niedrige Werte wählen. Wenn dies Ihre Absicht ist, tun Sie dies zuletzt, es sei denn, Sie haben Ersatzteile oder ein Hochspannungsprogrammiergerät, um die Sicherungen zurückzusetzen.

mckenzm
quelle