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?
arduino
attiny
fuse-bits
clock-speed
Furchtgefühle
quelle
quelle
Antworten:
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
quelle
delay(20)
geändert, dass siedelay(40)
in ihrer Definition von eingefügt wurdevoid heartbeat()
.)Ich benutze Arduino UNO + ArduinoISP erfolgreich.
Fügen Sie
-U
Ihremavrdude
Befehl Flags hinzu, um eine oder alle drei ATtiny-Sicherungen zu setzen.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:
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 verlassen6
in0x6f
wie es ist, und nur die zweite Ziffer ändern, dief
(der Standardwert ist2
).NB: Wenn Ihre Prozesse länger oder kürzer dauern als erwartet, überprüfen Sie Ihren Clock Prescaler und Ihre Definition von F _ CPU.
quelle
-U lfuse:w:0x6f:m
avrdude-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.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.
quelle
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.quelle
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_cpu
Zeile in Ihrer Datei [arduino_folder] \ hardware \ attiny45_85 \ boards.txt bearbeiten.quelle
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
quelle
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. )
Wählen Sie bei Bedarf ATTiny85 explizit aus.
Wähle eine Uhr. Wählen Sie eine interne Uhr, bis Sie mehr wissen .
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.
quelle