Ich folge diesem Tutorial , programmiere den ATtiny85 mit einem Arduino und spiele damit einige Töne (über einen Piezo-Lautsprecher). Ich habe Probleme damit, 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 kann auf unterschiedliche Taktraten bei Arduino und ATtiny zurückzuführen sein. Ich verstehe, dass die Taktrate auf dem ATtiny geändert werden kann, wie erreiche ich dies mit der Arduino-Umgebung?
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, mit der Sie tatsächlich laufen, sollten die Dinge funktionieren. Angenommen, Sie betreiben den Tiny85 mit seinem internen Oszillator, denke ich, dass er mit 1 MHz läuft, also multiplizieren Sie einfach alle Ihre Verzögerungsanweisungen (und andere Zeitbegriffe) mit 16.
Wenn Sie eine höhere Genauigkeit als der interne Oszillator benötigen, sollten Sie über die Verwendung eines externen Kristalls oder eines Resonators nachdenken, aber Sie müssen die Sicherungseinstellungen des AVR ändern, damit dies funktioniert, und ich denke, Sie benötigen einen Programmierer wie den AVRISP mkII, um 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 es das ISP-Protokoll ein bisschen knallen, um ein Programm auf den Zielchip (nicht den integrierten Mega328) hochzuladen, nicht sicher, ob es zum Manipulieren von Sicherungen ausgestattet ist. ArduinoISP ist hier dokumentiert http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Beachten Sie, dass Sie derzeit kein UNO verwenden können, um die ArduinoISP-Skizze auszuführen. Es sieht für mich nicht so aus, als könnten Sie die Skizze verwenden, um das Arduino zu einer brauchbaren Schnittstelle für die Verwendung der GUI-Tools von AVR Studio zu machen.
BEARBEITEN : Es sieht so aus, als ob das Zeug aufgeholt hat und ein UNO jetzt für ArduinoISP brauchbar ist - danke für alle Kommentare
delay(20)
ersetzen .)
delay(40)
void heartbeat()
Ich verwende Arduino UNO + ArduinoISP erfolgreich.
Fügen -U
Sie Ihrem avrdude
Befehl Flags hinzu, um eine oder alle der 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] auf 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 etwa so lauten: [Fuse Low Byte]:[write]:[Hex-Wert]:[manuell einstellen]
Der Standardwert für die vier hohen Bits dieses Bytes ist 0110
, also lassen Sie das 6
in 0x6f
so wie es ist und ändern Sie nur die zweite Ziffer, das 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.
-U lfuse:w:0x6f:m
avrdude-Option verwendet habe. Ich muss es mit einem Hochspannungs-Setup zurücksetzen. Also ein Wort der Vorsicht an Leute (wie mich), die versuchen, Sicherungen zurückzusetzen, ohne zu wissen, was sie tun.Versuchen Sie, das zugehörige Tutorial derselben Gruppe (MIT's 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 laufen möchten (1 oder 8 MHz interner Takt oder 20 MHz externer Quarz) und verwenden Sie dann Tools -> Bootloader brennen. Ich glaube, dass die Auswahl der gewünschten Geschwindigkeitskarte die Art und Weise ändert, wie die Verzögerung () und andere zeitbezogene Arduino-Funktionen funktionieren, um mit der Taktgeschwindigkeit zu synchronisieren.
Ich hatte mit diesem Ansatz selbst Erfolg mit einigen ATtiny84-Chips. Das einfache Blinkprogramm ist behoben, ebenso wie ein empfindlicheres Timing, das für die manuelle Steuerung von Impulsen erforderlich ist, die mit delayMicroseconds () an ein Servo gesendet werden.
Es scheint, dass Sie ArduinoISP verwenden, versuchen Sie es mit AVR Studio oder den Befehlszeilenoptionen für avrdude
. Je nachdem, wie das ArduinoISP geschrieben wurde, kann es wie ein Atmel AVRISP mkII oder ähnlich funktionieren.
Die Standardsicherungseinstellungen für das ATtiny85 sind: lfuse 0x62, hfuse 0xdf, efuse 0xff. Dies verwendet den internen RC-Oszillator (8 MHz) mit "Teilen durch 8", sodass der Takt 1 MHz beträgt.
Weitere Sicherungseinstellungen finden Sie unter http://www.engbedded.com/fusecalc .
Sie können avrdude immer noch direkt verwenden, um die Sicherungseinstellungen Ihres ATtiny85 zu ändern, selbst wenn Sie einen ArduinoISP als Programmierer verwenden.
Wenn Sie die Sicherung manuell ändern, um die Uhr zu ändern, müssen Sie die attiny85.build.f_cpu
Zeile Ihrer Datei [arduino_folder]\hardware\attiny45_85\boards.txt bearbeiten.
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 . Habe es selbst nie getestet.
Das Tutorial sagt ausdrücklich, dass Sie das Arduino UNO verwenden können, und ich habe es getestet und funktioniert, also kann ich das bestätigen, also ist die ArduinoISP-Seite veraltet und die UNO-Warnung sollte ignoriert werden. Wenn Ihr UNO eines aus der ersten Charge war, haben Sie wahrscheinlich einen fehlerhaften Bootloader, Sie müssen den Bootloader neu flashen. Weitere Informationen finden Sie auf dieser Seite (ignorieren Sie die Seriennummern, alle meine UNOs stammten nicht aus dieser Serie und hatten Probleme) .
Die portierten Core-Bibliotheken, die Sie aus dem Tutorial heruntergeladen haben, sind so geschrieben, dass sie den internen 1-MHz-Oszillator verwenden (bestätigt durch die Datei boards.txt), sodass das Timing-Problem möglicherweise in den portierten Core-Bibliotheken oder in Ihrem Code liegt.
Mit freundlichen Grüßen
Wählen Sie ein ATTiny-Board aus "Boards Manager", das das ATTiny85 enthält. Dies ist im Menü "Extras". Ich denke, das schließt jetzt "16 MHz interne PLL" ein. (Sie können eines von http://drazzy.com/package_drazzy.com_index.json installieren )
Wählen Sie bei Bedarf explizit ATTiny85 aus.
Wähle eine Uhr. Bis Sie mehr wissen, wählen Sie eine interne Uhr.
Klicken Sie als Menüpunkt auf "Bootloader brennen".
Achtung, bei sehr niedrigen Werten kann die MCU eventuell nicht mehr programmiert werden. Wenn dies Ihre Absicht ist, tun Sie dies zuletzt, es sei denn, Sie haben Ersatzteile oder einen Hochspannungsprogrammierer, um die Sicherungen zurückzusetzen.
Vicatcu
JonathanD
Nick T