AVR Programmierung mit Arduino, AVRdude und AVR-gcc

7 Schritt:Schritt 1: Was ist und AVR Warum sollte mich das interessieren? Schritt 2: Der Programmer Hardware Schritt 3: Die Programmierung Schritt 4: Das Makefile Schritt 5: Blinkende und Kompilieren Schritt 6: Endstromkreis Schritt 7: Zusätzliche Ressourcen


AVR ist eine gemeinsame, kostengünstige Art der Mikro-Controller, der mag einschüchternd, mit zu arbeiten, aber ärgern Sie sich nicht! Sobald Sie die Werkzeuge einrichten und grundlegende Wissen, das sie nicht nur nützlich, sondern notwendig, neue Projektideen, die Dir einfällt zu können!
Dieses Lernprogramm zielt darauf ab, ein paar Aufgaben zu erfüllen

    Erklären Sie, was ein AVR-Chip ist und warum es sinnvoll ist Geben Sie eine detaillierte Wegbeschreibung, um eine Arduino als ISP-Programmer einrichten Geben Sie ein einfaches Beispiel-Projekt mit Code erklärt mit der avr-gcc-Compiler und avrdude, um das Programm zu installieren, anstatt die Arduino IDE

Um diese gesamte Tutorial abzuschließen, benötigen Sie:
ATtiny85 (Andere Versionen wird auch funktionieren, wird aber nicht im Detail erläutert) Arduino Uno (Andere Versionen wird auch funktionieren, wird aber nicht im Detail erläutert) Ein Computer, der mit dem Arduino 5 Widerstände und 5 LEDs Schnittstelle kann
Bitte lassen Sie mich bei Fragen oder Problemen, die Sie in den Kommentaren haben wissen, und ich werde versuchen, sie umgehend zu beantworten Schritt 1: Was ist und AVR Warum sollte mich das interessieren?


AVR ist ein Mikro-Controller, die verwendet werden können, um den Fluss von Elektrizität unter Verwendung von Software zu leiten. Es kann verwendet werden, um Geräte zu wechseln, steuern im Puls-Weiten-Modulation, gelesenen Werte von Sensoren und verarbeiten die Daten, um mit der Umgebung in Wechselwirkung tritt.
Darüber hinaus sind die AVR-Chips sehr klein. Es ist der Chip, der die Arduino steuert.
Zum Beispiel ist die ATMega328 knapp einen Quadratzentimeter groß, dennoch enthält 23 IO-Pins. Es erfordert auch nur 1.8-5.5V zu bedienen.
Dies kann Ihnen helfen, Ihre Arduino Projekte nach unten verkleinern, um tragbare tech oder kleiner, eleganter robots.Step 2 zu erstellen: der Programmierer Hardware

AVR Programmierung mit Arduino, AVRdude und AVR-gcc

AVR-Chips können mit einer Vielzahl von Hardware von einem einfachen seriellen Kabel an einen dedizierten AVR Programmierer und Entwicklungsstation programmiert werden.
Obwohl jedes dieser Verfahren hat seine eigenen Vor- und Nachteile, werde ich Sie sich mit einem Arduino konzentrieren.
Das Arduino ist eine große Mikrocontroller-Prototyping-Plattform. Arduino Uno verfügt über IO-Pins mit Header angeschlossen gebrochen. Es ist komplett mit allen benötigten Teile enthalten sind, um die an Bord Mikrocontroller wie ein Kristall und Netzregulierung führen. Es hat auch eine eigene IDE und Programmiersprache, die ganz ähnlich wie C mit einem Programm ist, kann es verwendet werden, um neue Software auf AVR Chips blinken.
Die IDE enthält ein Programm namens ArduinoISP, die angeblich genau das zu tun ist. Leider ist es sehr pingelig und selten arbeitet mit einigen Modellen von Arduino. Eine Variante auf dem Programm, die von Adafruit konsequenter funktioniert gemacht kann an diesem Ort gefunden werden.
Wenn Sie mit Arduino Uno sind, dann empfehle ich das letztere Programm, wie ich hatte viel Mühe mit der offiziellen one.Step 3: die Programmier


Ein AVR-Chip kann auf verschiedene Arten programmiert werden.
    Installieren Sie die Arduino Bootloader, um die IDE und Sprachgebrauch Montage zu verwenden. Obwohl dies sehr schwer zu lesen und zu schreiben, ist es sehr effizient sein kann. Verwenden Atmel offiziellen IDE Atmel Studio, aber es ist nur unter Windows verfügbar ist, nicht unter Linux oder Mac erstellen Programm in Ihrem Lieblings-C oder Text-Editor kompilieren und Flash mit avr-gcc und avrdude.
    Dies bietet einen schönen Kompromiss zwischen Lesbarkeit und Effizienz sowie die Arbeit auf allen Plattformen.

Das werde ich ausführlich die vierte und letzte Option.
Viele Redakteure werden dafür arbeiten, wie Sie einfach das Schreiben eines C-Programms werden: Eclipse Notepad ++, vi, sowie vieles mehr.
Bitte laden Sie sich die angehängte Datei led_flash.c und Makefile.
Ich habe eine ATTiny 85 für dieses Projekt.
Ich werde zunächst den Code zu erklären.
Die erste Zeile des Codes ist:
  #include <avr / io.h> 

Dies importiert die Konstanten bezüglich Ihrer AVR-Chip in das Programm. Wenn Sie das Programm kompilieren, müssen Sie die Art der AVR-Chip, mit dem Sie angeben.
Die nächsten Import:
  #include <util / delay.h> 

Dieses enthält die Funktion, um den Chip während der Schleife anzuhalten.
Als nächstes kommt einige Definitionen:
  #define shift_light_up (Port) Port << 1 
  #define shift_light_down (Port) Port 1 >> 

Definiert Makros, um das Licht nach oben und unten die Kette um einen Schritt verschieben.
  #define register_set_output (Register) Register = 0b11111111
 #define enable_first_light (Port) port = 0b00000001 

Definiert Makros, um eine ganze Register zur Ausgabe festzulegen, und das erste Licht zu ermöglichen.
Diese Definitionen erstellen wesentlichen Makros, so dass wir nicht brauchen, um den Code am Ende höher verwenden. Es kann damit der Code, um viel besser lesbar als zuvor.
Setzen des Registers auf alle 1-en in Binär Ursachen alle Stifte ein Ausgang zu sein, eher als Eingabe.
Der Port setzt dann den Wert des Stiftes zu hoch oder zu niedrig.
Port << 1 verschiebt den Stift aktiviert werden um 1 Stelle. Port >> 1 bewegt sich in die entgegengesetzte Richtung.
  boolean is_last_pin (uint8_t * Port) {
	 if ((* Port & 0b00010000)> 0)
 		 return true;
	 sonst return false;
 }
 
 boolean is_first_pin (uint8_t * Port) {
	 if ((* Port & 0b00000001)> 0)
		 return true;
	 sonst return true;
 } 

Zwei Funktionen, die den einfachen Test, ob die erste oder letzte Stifte durch die Beleuchtung noch erreicht werden können.
Auch dies macht die spätere Code lesbarer.
  int main (void) {
	 register_set_output (DDRB);  // Setze alles ausgegeben
	 enable_first_light (PORTB);  // Stellen Sie die erste Licht auf
	 boolean up = true;
	 while (true) {
		 _delay_ms (100);  // Abhängig von der Taktrate des Chips muss Geschwindigkeit eingestellt werden

		 if (is_first_pin (& PORTB) == true) // überprüfen, ob es zu Beginn ist
			 up = true;
		 else if (is_last_pin (& PORTB) == true) // überprüfen, ob es am Ende ist
			 up = false;

		 wenn (bis == true)
			 PORTB = shift_light_up (PORTB);  // Umschalt unsere leuchten
		 sonst
			 PORTB = shift_light_down (PORTB);  // Nach unten Umschalt unser Licht
	 }
 } 

Dies ist der Hauptteil unserer Funktion. Die Funktion int main (void) wird aufgerufen, wenn der Chip startet. Zunächst aktivieren Sie die Register B um alle Ausgänge sein. Dann setzen wir das erste Licht auf und erklären, ein boolean, die die Richtung zu gehen, erinnert. Jede Schleife ersten Verzögerungen für 0,2 Sekunden, überprüft dann, wenn die Richtung ändern muss. Verschiebt schließlich das Licht in der gegebenen Richtung, und wiederholt die Schleife.
Das ist es! das endgültige Programm ist etwas abstrahiert, damit sie sehr leicht lesbar.
Als nächstes: Das Makefile, um die Zusammenstellung und blinkende Prozessschritt 4 zu automatisieren: Das Makefile


Machen wird verwendet, um den Prozess des Aufbaus eines Programms zu automatisieren. Sie können Setup ein Makefile, damit der gesamte Prozess auf einen Befehl zu sein ", machen Programm".
Verwendung make erstellt Makros problemlos betreiben eine Sammlung von Befehlen in Bezug auf den Aufbau eines Projekts.
Der erste Befehl ist derjenige gewöhnlich die Bezeichnung, so kann es nützlich sein, eine Hilfe Makro erste haben.
  Hilfe:
	 @ echo 'Help-Details:'
	 @ echo 'hex: kompilieren Hex-Datei'
	 @ echo "Flash: Hex-Datei installieren"
	 'Programm: kompilieren und installieren hex "echo 

Das erinnert Sie immer, wie Sie haben das Programm up statt, die im Wege der Code aussehen, wenn Sie vergessen, eingestellt.
Der nächste Teil dieses Makefile ist hex.
  hex:
	 avr-gcc -Os -DF_CPU = 8000000 = -mmcu ATtiny85 -c led_flash.c
	 avr-gcc -DF_CPU = 8000000 = -mmcu ATtiny85 -o led_flash.elf led_flash.o
	 avr-objcopy -O IHEX led_flash.elf led_flash.hex
	 rm led_flash.o
	 rm led_flash.elf 

Dies macht den gesamten Prozess, um den Chip zu kompilieren. Der Prozess, ein Programm für AVR zu kompilieren ist ein bisschen schwierig und lang, aber dieser Teil verhindert, dass Sie benötigen, um jeden Teil des Verfahrens zu erinnern. Die wichtigsten Teile dieses Kompilierungsprozess zu erinnern ist die --mmcu = ATtiny85 und die led_flash. Diese müssen je nach Ihrem eigenen Projekt geändert werden. Wenn Sie mit einem anderen AVR-Chip sind, einfach ATtiny85 verändern die Art, die Sie verwenden. Wenn die Dateien nicht aufgerufen led_flash.c, dann alle Instanzen von led_flash ändern mit dem Dateinamen.
Schließlich die DF_CPU = 8000000 legt die Taktgeschwindigkeit in der Mikro-Controller. Viele Gegenstände, wie Verzögerungen funktioniert nicht richtig, wenn Sie diese auf den korrekten Wert eingestellt. Wenn Sie einen anderen Chip zu verwenden, oder ändern die Geschwindigkeit in irgendeiner Weise entnehmen Sie bitte dem Datenblatt für Ihr AVR-Chip.
  Flash:
	 avrdude -c arduino -p ATtiny85 -P /dev/tty.usbmodemfd121 -U Flash: w: led_flash.hex 

Dies installiert das Programm auf die AVR-Chip. Beachten Sie:
-c arduino -p ATtiny85 -P /dev/tty.usbmodemfd121
Hier wird die Art des ProSTEP 5: Blinkende und Kompilieren


Jetzt haben Sie das Makefile Setup sowie die Programmierung Hardware-Setup, geben Sie einfach
  machen Programm 

Dies wird den Code zu kompilieren und installieren Sie das Programm auf dem AVR.
Herzlichen Glückwunsch! Nur noch einen Schritt, indem Sie den Chip in der eigentlichen circuit.Step 6: Endstromkreis


Endstromkreis verwendet viele Widerstände und LEDs, ist aber sehr einfach zu bauen.
Schließen Sie einfach an den 5V + VCC Pin, Grundstück zu GND und die IO-Pins, um eine Reihe von LEDs
Löten Sie die Schaltung auf eine Lochrasterplatinen und bauen eine Spaß Behälter, um Ihre neuen Fähigkeiten zeigen, um Ihre Freunde und Kollegen. Schritt 7: Zusätzliche Ressourcen


Es gibt viele Orte, die Sie Ressourcen auf die Programmierung AVR-Chips zu finden.
Atmel Webseite kann Ihnen die Datenblätter für Ihre spezielle Chips:
www.atmel.com
Die Homepage für AVR Libc können Dokumentation zu den avr spezifischen Bibliotheken zu geben:
http://www.nongnu.org/avr-libc/
Das GNU-Wiki auf avr-gcc:
http://gcc.gnu.org/wiki/avr-gcc
Avrfreaks, eine Community rund um den avr-Chips:
http://www.avrfreaks.net/
Eine Demo-Projekt von nongnu:
http://www.nongnu.org/avr-libc/user-manual/group__demo__project.html