So verwandeln Sie Ihr Arduino in einen ISP – Programmierung des ATmel ATtiny85
Veröffentlicht: 2017-06-13Kurze Bytes: Manchmal ist die Verwendung eines vorgefertigten Arduino-Boards in einem Projekt übertrieben oder einfach überdimensioniert. Der ATtiny85 ist ein kostengünstiger, aber überraschend leistungsfähiger Mikrocontroller, der Ihnen helfen kann, den Platzbedarf Ihres Projekts zu reduzieren. So können Sie einen ATtiny für die Verwendung in Ihrem Projekt programmieren.
Die Arduino -Plattform ist ein erstaunliches Werkzeug zum Lernen, aber manchmal passen die unterstützten Arduino-Boards nicht ganz dorthin, wo Sie sie brauchen. Da der Arduino Uno (das gebräuchlichste Modell) etwa 65 mm x 50 mm misst, ist es leicht zu erkennen, dass er in einigen Projekten die größte Komponente sein könnte. Es gibt andere Boards wie das Nano, die viel kleiner sind (mein Nano-Knockoff ist 43 mm x 17 mm, 4,5-mal kleiner) , aber selbst dann ist das manchmal einfach zu groß. Was ist, wenn Sie zum Beispiel ein tragbares Gerät bauen möchten, vielleicht ist es nur eine blinkende LED, die Ihr Hund nachts tragen kann? Sobald Sie eine Batterie usw. berücksichtigen, kann es ziemlich groß werden.Stichwort ATtiny, der Held unseres Problems. Der Namensgeber des ATtiny ist offensichtlich. Sie finden es in einem DIP-8-Gehäuse (Dual-Inline-Gehäuse – 8 Pins) , das etwa 9 mm im Quadrat misst. In der wahren Natur seines Namensgebers ist der ATtiny winzig, aber in mehr als nur seiner physischen Größe. Das ATtiny85, das für diesen Artikel verwendet wird, hat nur 8 KB Programm-Flash-Speicher, 512 Bytes RAM und 512 Bytes EEPROM (permanenter Speicher außerhalb des Programmspeichers) .
Jetzt besteht das Problem darin, einen dieser winzigen Kerle zu programmieren. Es gibt einige Online-Tutorials dafür, aber ich fand sie etwas unvollständig oder es fehlten Anweisungen.
ISP – Im Systemprogrammierer
Ein In-System-Programmierer (ISP) ist nicht so schick, wie es sich anhört. Typischerweise besteht ein ISP für einen ATmel-Chip aus einem Gerät mit einem sechspoligen USB-Kabel. Die ISP-Pins sind bei Arduinos wirklich leicht zu erkennen, sie befinden sich normalerweise gegenüber dem USB-Anschluss. ATmel-Chips sollen über die ISP-Pins programmiert werden, aber die Arduino-Plattform hat einen USB-zu-Seriell-Adapter auf der Platine implementiert, um die Notwendigkeit für das ISP-Gerät zu beseitigen. Trotzdem haben sie die ISP-Pins bei vielen, wenn nicht den meisten Modellen verfügbar gelassen.
Da unsere ATtiny-Chips nicht über das USB-zu-Seriell-Gerät verfügen, das die Arduinos haben, ist es erforderlich, dass sie mit einem ISP programmiert werden. ATmel ISP-Geräte sind ziemlich teuer, zumindest im Vergleich zu den Kosten eines Arduino selbst, also sparen wir uns das Geld und die Lieferzeit, indem wir ein Arduino so programmieren, dass es sich wie ein ISP verhält.
Wir tun dies, indem wir die Arduino IDE öffnen und ArduinoISP aus den Beispielskizzen auswählen.
Beim Öffnen der Skizzendatei sehen Sie einige Informationen zum erwarteten Verhalten des Codes. In dieser Datei müssen wir eine schnelle Änderung vornehmen, damit unser ISP ordnungsgemäß mit der Arduino IDE kommunizieren kann.
In Zeile 220 finden wir die Funktion setup() .
ungültige Einrichtung () { SERIAL.begin (BAUDRATE); PinMode (LED_PMODE, AUSGANG); Impuls (LED_PMODE, 2); PinMode (LED_ERR, AUSGANG); Impuls (LED_ERR, 2); PinMode (LED_HB, AUSGANG); Impuls (LED_HB, 2); }
Wir müssen BAUDRATE auf 19200 ändern, damit die Zeile lautet
SERIAL.begin (19200);
Nach dem, was ich gelesen habe, hat die Arduino IDE ein Update erhalten, das die Kompatibilität mit dieser ArduinoISP-Firmware unterbrochen hat. Der Arduino und die IDE versuchten, mit unterschiedlichen Baudraten zu kommunizieren, was dazu führte, dass der Arduino nicht als ISP verwendet werden konnte, obwohl die Firmware ordnungsgemäß blinkte.
ATtiny-Bibliotheken
Die Arduino IDE unterstützt eine Vielzahl unterschiedlicher Mikrocontroller und Boards, aber leider ist die ATtiny-Serie nicht enthalten. Das bedeutet, dass wir uns selbst um Unterstützung für sie kümmern müssen.
Die Art und Weise, die für mich funktionierte, bestand darin, die folgende URL zu den zusätzlichen Boards-Manager-URLs unter den Arduino IDE-Einstellungen hinzuzufügen.
Starten Sie die IDE neu, öffnen Sie den Boards Manager unter Tools -> Board -> Boards Manager und suchen Sie dann nach dem ATtiny-Paket und installieren Sie es.
Sobald dies erledigt ist, können Sie mit dem Aufbau Ihrer Schaltung zum Programmieren Ihres ATtiny beginnen.
Bauen Sie Ihren ISP auf
Es gibt eine Reihe von Möglichkeiten, wie Sie Ihren ISP aufbauen können. Sie können es in lötfreiem Steckbrett bauen, damit Sie die Teile wiederverwenden können, oder Sie können eine semipermanente Lösung herstellen, indem Sie alles wie ich zusammenlöten. Wenn Sie alles sorgfältig zusammenlöten, können Sie das Arduino für ein anderes Projekt wiederverwenden, wenn Sie möchten.
Wenn wir uns die ersten dreißig Zeilen des ArduinoISP-Sketch ansehen, finden wir die folgenden Informationen zum Einrichten des Arduino als ISP.
Stift 10 | Pin zurücksetzen für Ziel-Mikrocontroller |
Stift 11 | SPI-Master-Ausgang Sklave rein |
Stift 12 | SPI-Master-Eingang Sklave raus |
Stift 13 | Serielle SPI-Uhr |
Optional können Sie LEDs zur Statusanzeige an die folgenden Pins anschließen
- Pin 9 – Heartbeat – Zeigt an, dass ISP läuft
- Stift 8 – Fehler – Zeigt an, dass ein Fehler aufgetreten ist
- Pin 7 – Programmierung – Zeigt aktive Kommunikation mit dem Ziel an
Denken Sie daran, dass diese LEDs Widerstände benötigen.
Hier sehen wir die Pinbelegung für den ATtiny85 und die entsprechenden Verbindungen, die wir zurück zum Arduino herstellen müssen. Es ist eine ziemlich grobe Zeichnung, aber ich habe die Pins auf dem ATtiny85 der Einfachheit halber beschriftet. Es ist jedoch zu beachten, dass die Pins nicht wie im Diagramm mit 1,2,3..8 adressiert sind, sie werden innerhalb der Arduino IDE so bezeichnet, wie sie im diagonalen Text beschriftet wurden.
Dies ist ein viel detaillierteres Diagramm der verschiedenen Verbindungen. Alle LEDs sind optional, aber sie sind nützlich für die Fehlersuche, zusätzlich zu den drei Status-LEDs, die in der ArduinoISP-Skizzendatei empfohlen wurden, gibt es eine, die einfach 5 V mit Masse verbindet (natürlich mit einem Widerstand) und dann gibt es einen, der mit dem zweiten Pin (Pin 3 in der IDE) verbunden ist, um den ATtiny mit dem Blinktest zu testen. Beachten Sie den Kondensator, der den Reset-Pin mit Masse verbindet. Dies ist erforderlich, damit der Arduino als ISP fungieren kann.
Dies ist der Arduino ISP, den ich für ATtiny-Mikrocontroller gebaut habe. Sie können sehen, dass ich die DIP-8-Buchse verwendet habe, um das ATtiny zu halten, während es programmiert wird. Ich habe auch genug Platz auf der rechten Seite gelassen, um einen DIP-28-Sockel zum Programmieren von ATmega-Chips wie dem ATmega328P zu installieren. Das Upgrade ist sehr einfach und erfordert nur, dass die erforderlichen Pins für die Atmega-Chips wie beim ATtiny angeschlossen werden.
Sobald Sie Ihren Arduino ISP zusammengebaut haben, möchten Sie ihn sicherlich ausprobieren. Stellen Sie sicher, dass Sie die entsprechenden Einstellungen zum Programmieren über Ihr angeschlossenes Arduino auswählen und nicht das Arduino selbst programmieren.
Für das Board wählen wir die Option ATiny 25/45/85, dann ATtiny85 in der Prozessorauswahl und schließlich wählen wir Arduino als ISP von den Programmierern aus. Das sagt der IDE alles, was sie über das Zielsystem wissen muss, einschließlich der Art und Weise, wie es mit ihm kommunizieren wird. Jetzt können wir die Blink-Skizze aufrufen (oder sie selbst eingeben, wenn Sie so hartgesotten sind) und ausprobieren. Stellen Sie nur sicher, dass Sie den Pin, der zum Blinken der LED verwendet wird, auf den Pin umschalten, den Sie in Ihrem verwendet haben Schaltung, das ist Pin 3, wenn Sie den von mir bereitgestellten Schaltplan verwenden. Zuletzt kompilieren und laden wir die Skizze hoch, indem wir auf Sketch -> Upload Using Programmer klicken.
ungültige Einrichtung () { PinMode (3, AUSGANG); } Leere Schleife () { digitalWrite (3, HOCH); Verzögerung (1000); digitalWrite (3, NIEDRIG); Verzögerung (1000); }
Insgesamt kostet mein zusammengelöteter Arduino ISP wahrscheinlich etwa drei oder vier Dollar. Die ATtiny-Chips können auch extrem preiswert sein, normalerweise nur etwa einen Dollar pro Stück. Ich empfehle den Kauf der DIP-8-Sockel, wenn Sie ATtiny-Chips in Projekte einbauen möchten, da Sie möglicherweise Code aktualisieren oder den Chip neu verwenden möchten. Das Einlöten eines ICs ist machbar, aber Sie können das IC leicht beschädigen, insbesondere bei wiederholter Exposition, wie dies der Fall wäre, wenn Sie den Code einige Male aktualisieren würden.
Hat noch jemand so etwas gemacht? Möchten Sie mehr Arduino-Zeug sehen? Lassen Sie es uns in den Kommentaren unten wissen.
Lesen Sie auch: Raspberry Pi oder Arduino – Welches Board eignet sich am besten für Anfänger?