Inhaltsverzeichnis:

AVR/Arduino blinkt mit Raspberry Pi - Gunook
AVR/Arduino blinkt mit Raspberry Pi - Gunook

Video: AVR/Arduino blinkt mit Raspberry Pi - Gunook

Video: AVR/Arduino blinkt mit Raspberry Pi - Gunook
Video: Amazing arduino project 2024, November
Anonim
AVR/Arduino blinkt mit Raspberry Pi
AVR/Arduino blinkt mit Raspberry Pi

Ein In-System-Programmer (ISP) ist ein Gerät, mit dem Sie viele Mikrocontroller programmieren können, zum Beispiel den ATMega328p, der das Gehirn eines Arduino Uno ist. Sie können so etwas wie einen USBtinyISP kaufen oder sogar einen Arduino verwenden. Diese Anleitung zeigt Ihnen, wie Sie einen Raspberry Pi als ISP verwenden.

Das Programm avrdude, das die Arduino-IDE zum Flashen von Chips verwendet, kann von vielen Programmierern verwendet werden. Eine der Optionen besteht darin, die SPI-Pins am Erweiterungsport des Pi zu verwenden. Ich erkläre Ihnen, wie Sie die entsprechenden Verbindungen herstellen, eine einfache Schaltung auf dem Perfboard zusammenstellen, damit Sie die Verkabelung nicht jedes Mal neu erstellen müssen, wenn Sie einen Chip flashen möchten, und wie Sie avrdude installieren und verwenden. Ich zeige Ihnen auch, wie Sie mit dieser Methode Programme, die mit der Arduino IDE kompiliert wurden, auf einen AVR-Chip wie einen ATmega oder ATtiny bringen.

Benötigte Dinge:

  • Raspberry Pi mit neuestem Raspbian installiert
  • 40-polige Stiftleiste (oder 26-polig, wenn Sie einen älteren Pi haben)
  • IDE-Kabel zum Verbinden mit Ihrem Pi
  • 16 MHz Quarzresonator
  • 22 pF-Kondensatoren (2)
  • LED (1) zur Statusanzeige des Programmiergeräts
  • 8, 14 und/oder 28-polige IC-Sockel, je nachdem, welche Chipform Sie flashen möchten
  • Etwas Perfboard, Drähte, Lötzinn

Schritt 1: Bauen des Schusteraufsatzes

Schusteraufsatz bauen
Schusteraufsatz bauen
Schusteraufsatz bauen
Schusteraufsatz bauen
Schusteraufsatz bauen
Schusteraufsatz bauen

Serial Peripheral Interface (SPI), auch Vierdraht-Seriell genannt, ist eine Möglichkeit zur Kommunikation zwischen einem einzelnen Master-Gerät und einem oder mehreren Slave-Geräten. Wir werden dies verwenden, um Chips zu flashen, mit dem Pi als Master und dem Chip als Slave. Sie werden die folgenden Verbindungen zwischen dem Pi und Ihrem Chip herstellen (siehe die Pinbelegung oben für verschiedene AVRs und Pi-Erweiterungsports, um zu wissen, welche Pins welche sind):

  • Verbinden Sie die MOSI-Pins (Master-Out-Slave-In) miteinander
  • Verbinden Sie die SCLK (Shared Clock)-Pins miteinander
  • Verbinden Sie die MISO (Master-in-Slave-out) Pins zusammen mit einem 220 Ohm Widerstand, um den Pi vor unerwartet hohen Spannungen vom Chip zu schützen
  • Verbinden Sie GPIO 25 auf dem Pi direkt mit dem RESET-Pin auf dem Chip. Der Pi zieht diesen Pin beim Programmieren niedrig, daher verwenden wir einen 10K-Widerstand, um ihn hoch zu halten, wenn er nicht programmiert wird, und eine LED mit einem 1K-Schutzwiderstand, der auf positive Spannung läuft, um uns beim Programmieren ein schönes visuelles Feedback zu geben.

Wir verbinden Masse- und Strompins (3,3 V) zwischen dem Pi und den Chips, die wir programmieren möchten. Falls Sie es noch nicht wissen, die Pins des Raspberry Pi sind nicht 5V-tolerant - sie werden beschädigt, wenn mehr als 3,3V darauf erscheinen. Wenn die zu programmierenden Chips aus irgendeinem Grund 5 V Strom benötigen, könnten wir einen Level-Shifter-Chip verwenden, um die Pins des Pi zu schützen, aber ich habe mit 3,3 V keine Probleme gehabt - daher empfehle ich, auf Nummer sicher zu gehen und Komponenten zu sparen.

Schließlich verbinden wir einen 16-MHz-Quarzoszillator über die XTAL-Pins auf dem Chip, den wir auch über ein paar 22pF-Kondensatoren mit Masse verbinden. AVR-Chips können so eingestellt werden, dass sie mit unterschiedlichen Frequenzen laufen, und können auch so eingestellt werden, dass sie eine interne oder externe Quelle verwenden, um diese Frequenz zu bestimmen. Wenn Ihr Chip so eingestellt ist, dass er einen externen Quarz als Frequenzquelle verwendet, können Sie ohne ihn nicht neu programmieren. Ansonsten ist es egal, ob es da ist.

Sie können den Schaltplan im letzten Bild als Anleitung für die Montage Ihres Schusteraufsatzes auf dem Perfboard verwenden. Sie können so viele oder so wenige verschiedene Formen von IC-Sockeln haben, wie Sie möchten, verbinden Sie einfach die entsprechenden Pins parallel mit dem Pi und dem Quarz. Hinweis Wenn Sie das Bild meines Prototyps als Richtlinie verwenden, beachten Sie, dass ich einige zusätzliche Header-Pins und -Buchsen hinzugefügt habe, damit ich aus unabhängigen Gründen auf die Pins auf dem Pi zugreifen kann.

Schritt 2: Installieren und Verwenden von Avrdude

Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude
Installieren und Verwenden von Avrdude

Um avrdude auf deinem Pi zu installieren, tippe einfach

sudo apt-get install avrdude

Anschließend müssen Sie die SPI-Schnittstelle aktivieren, sofern sie nicht bereits eingeschaltet ist. Dafür gibt es eine Befehlszeilenmethode, aber es ist viel einfacher, das Raspberry Pi-Konfigurationstool zu verwenden. Typ

sudo raspi-config

und gehen Sie zu Schnittstellenoptionen, um SPI zu aktivieren.

Um Ihren Chip zu flashen, stecken Sie das Flachbandkabel von Ihrem Pi in den Anschluss auf der Perfboard-Schaltung und stecken Sie den Chip in den entsprechenden IC-Sockel (achten Sie darauf, dass er in die richtige Richtung zeigt).

Beim Flashen eines Programms müssen Sie auch darauf achten, dass die Sicherungen im Chip richtig eingestellt sind. Dies sind wirklich nur Bits im Chip, die Sie einstellen, um ihm mitzuteilen, mit welcher Taktfrequenz er laufen soll, ob das EEPROM beim Schreiben des Chips gelöscht werden soll usw. Sie können die vollständige AVR-Spezifikation lesen, um herauszufinden, wie jedes Bit eingestellt wird, aber Es ist viel einfacher, den Sicherungsrechner unter engbedded.com/fusecalc zu verwenden. Wählen Sie den von Ihnen verwendeten AVR-Teilenamen und wählen Sie die gewünschten Optionen im Bereich "Funktionsauswahl". Normalerweise stelle ich nur sicher, dass die Uhreinstellungen richtig sind und belasse die anderen Dinge auf Standard. Sie werden fast immer "Serielle Programmierung aktiviert" CHECKED und "Reset Disabled" UNCHECKED lassen wollen - andernfalls können Sie den Chip nicht neu programmieren. Wenn Sie die richtigen Einstellungen haben, können Sie im Bereich "Aktuelle Einstellungen" nach unten scrollen und die AVRDUDE-Argumente wie in der Abbildung gezeigt kopieren.

Um die Sicherungen einzustellen, geben Sie den Befehl ein

sudo avrdude -c linuxspi -P /dev/spidev0.0 -p

Dabei entspricht der Teilename dem von Ihnen verwendeten Chip. Sie finden die Liste der Teilenamen, indem Sie sudo ardude -c linuxspi -p ?type eingeben. Um Ihr Programm zu flashen, stellen Sie sicher, dass es sich in Ihrem aktuellen Verzeichnis befindet und geben Sie. ein

sudo avrdude -c linuxspi -P /dev/spidev0.0 -p -U flash:w::i

Nach beiden Befehlen leuchtet die LED, während der Chip modifiziert wird.

Schritt 3: Arduino-Programme auf AVRs bekommen

Arduino-Programme auf AVRs übertragen
Arduino-Programme auf AVRs übertragen
Arduino-Programme auf AVRs übertragen
Arduino-Programme auf AVRs übertragen
Arduino-Programme auf AVRs übertragen
Arduino-Programme auf AVRs übertragen

Das Hauptaugenmerk dieses anweisbaren ist das Flashen bereits kompilierter Programme auf Chips, nicht wie man sie schreibt oder kompiliert. Ich wollte jedoch erklären, wie Sie Binärdateien mit der Arduino IDE kompilieren und mit dieser Methode auf nackte AVR-Chips bringen können, da Arduino relativ einfach zu erlernen ist und es so viele Tutorials und Beispiele gibt.

Zuerst müssen Sie Informationen zu den zu flashenden AVR-Chips hinzufügen, damit die IDE weiß, wie sie für sie kompiliert werden. James Sleeman hat sehr hilfreich einige Setup-Dateien zusammengestellt, die auf github verfügbar sind. Um sie zu verwenden, öffnen Sie das Menü "Preferences" in der Arduino IDE und klicken Sie auf das Kästchen neben dem Feld "Additional Boards Manager URLs". Kopieren Sie die folgenden URLs und fügen Sie sie in das angezeigte Dialogfeld ein:

Gehen Sie dann zum Menü "Extras" und suchen Sie im Untermenü "Board" die Option "Boards Manager…". Scrollen Sie im Dialogfeld Boards Manager zum Ende der Liste und installieren Sie die DIY ATmega- und DIY ATtiny-Boards.

Um Ihre Programme zu kompilieren, stellen Sie zunächst sicher, dass Sie im Menü "Prozessor" den richtigen Chip sowie die richtige Prozessorgeschwindigkeit ausgewählt haben. Wählen Sie die Option "Use Bootloader: No", da wir direkt mit dem Pi hochladen und somit den zusätzlichen Platz nutzen können, der normalerweise vom Arduino-Bootloader belegt würde. Klicken Sie nun auf die Schaltfläche "Überprüfen" (das Häkchen). Dadurch wird Ihr Programm kompiliert, ohne zu versuchen, es hochzuladen (da Sie diesen Schritt selbst ausführen).

Vorausgesetzt, alles läuft gut, müssen Sie nun das kompilierte Programm auf Ihren Pi bringen. Die IDE versteckt sie an einem temporären Ort, da sie selbst Programme hochladen soll. Unter Windows befindet es sich in AppData/Local/Temp in Ihrem Benutzerverzeichnis in einem Ordner, der mit 'arduino_build' beginnt. Suchen Sie nach der.hex-Datei - das ist Ihr Programm! Senden Sie es per FTP oder mit einem USB-Stick an Ihren Pi und Sie sind im Geschäft.

Dazu benötigen Sie einen Windows-PC oder Mac, um Ihre Programme zu kompilieren, die Sie dann an den Pi senden. Es wäre wirklich schick, dies auf dem Pi selbst tun zu können, aber leider ist die offizielle Version der Arduino-IDE, die im Raspbian-Repository verfügbar ist, ziemlich alt und verfügt nicht über den Board-Manager. Ohne dies ist das Hinzufügen der entsprechenden Einstellungen zum Kompilieren für nackte AVRs etwas schwieriger. Es gibt Tutorials zum Kompilieren einer neueren Version von Arduino auf Ihrem Pi - wenn Sie das tun möchten, finden Sie sie! Ich denke auch, dass es möglich sein sollte, die IDE dazu zu bringen, den Linuxspi-Programmierer zu verwenden, um einen Chip aus der IDE selbst heraus zu flashen (dh mit der Schaltfläche "Download"), aber dies übersteigt meine Geduld und mein Können - wenn Sie wissen einen Weg, poste es in den Kommentaren! Schließlich könnten Sie einfach Programme direkt in AVR-C schreiben und mit avr-gcc auf dem Pi kompilieren, wodurch Sie eine vollständige AVR-Entwicklungsplattform auf dem Raspberry Pi erhalten. Ich habe ein kleines bisschen davon getan, und wenn Sie diesen Weg gehen wollen, grüße ich Sie. Lass dich blitzen!

Empfohlen: