Home > Technologie > Atmega328: verlieren den Kristall und gewinnen zwei Pins

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Advertisement

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Dieses anweisbare erklärt, wie man den Atmega328-Chip wie den Chip in einem Arduino ohne den Kristall laufen lässt, der das Breadboarding einfacher macht und Ihnen zwei zusätzliche Stifte zur Arbeit gibt. Dieses Programm funktioniert nicht auf einem Arduino Uno. Es nutzt Funktionen des Atmega328-Chips, die auf dem Arduino nicht verfügbar sind. Die Pins auf dem 328, und alle Atmel Mikrocontroller, sind in Banken von acht angeordnet. Die Bank "D" ist vorhanden, aber Sie haben nur vollen Zugriff auf die eine Bank. Es gibt nur sechs Pins auf der "C" Bank, die analogen Eingangspins, weil einer von ihnen nicht ausgebrochen ist und der andere ist der Reset. Zwei der Stifte auf der "B" -Bank werden vom Kristall aufgenommen.

Es ist möglich, den Chip ohne Kristall laufen zu lassen und haben vollen Zugang zu allen acht Stiften auf der "B" Bank. Es gibt ein internes R / C-Netzwerk, das verwendet werden kann, um den Chip zu takten. Der Chip läuft mit acht MHz anstelle von sechzehn. Dies ist in der Regel kein Problem, weil die meisten Arduino-Programme brauchen nicht die Geschwindigkeit sowieso. Auch die interne Uhr ist nicht so genau. Die im Datenblatt für das ATtiny85 angegebene Toleranz beträgt +/- zehn Prozent, während die meisten Kristalle eine Toleranz von 30 PPM aufweisen. Ich würde davon ausgehen , dass die 328 die gleiche ist , aber ich konnte es nicht im 328 finden Datenblatt . (Das Datenblatt ist hunderte von Seiten von sehr trockenen Lesung.) Es gibt eine sehr gute Chance, dass Ihr Chip nicht weg sein wird überall in der Nähe von zehn Prozent. Diese Sammlung von instructables enthält einen Test der internen Uhr im ATtiny85-Chip. Und erklärt, wie Teile geprüft werden, um sicherzustellen, dass sie innerhalb der Toleranz sind.

Ich habe von Fällen gehört, in denen die serielle Kommunikation Hardware auf dem Arduino die Funktion der Stifte null und eins stören kann. Mit dem Chip von der Platine wird dies kein Problem sein, aber wenn Sie sie für serielle Kommunikation verwenden, müssen Sie sie bewahren.

Jede Bank von acht Pins wird von drei acht-Bit-Registern gesteuert:

  • Das DDR-Register ist die Datenrichtung, 0 = Eingang, 1 = Ausgang.
  • Das PIN-Register wird verwendet, um den digitalen Wert des Stifts zu lesen.
  • Das PORT-Register hat zwei Funktionen:
    • Wenn das DDR-Register auf den Ausgang 0 gesetzt ist, wird der Pin-Niedrigpegel und der Wert 1 auf High gesetzt.
    • Wenn das DDR-Register auf Eingang 1 gesetzt ist, wird der interne Pull-up-Widerstand eingeschaltet.

Die Arduino IDE hat keine Möglichkeit, die Pins zu kontrollieren, wo der Kristall war, sie haben keine digitalen Pin-Nummern. Glücklicherweise macht es für die Manipulation der Steuerung Register direkte Unterstützung. Diese instructable zeigt , wie die Pin - Register zu verwenden , um Programme zu machen , schneller, kleiner, und in vielen Fällen einfacher Code.

Schritt 1: Hinzufügen der neuen Chipdefinition zur Arduino IDE

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Die Standard-Arduino-IDE-Installation gibt Ihnen den Bootloader, um den Chip auf acht MHz mit der internen Uhr ohne den Kristall zu laufen, aber nicht die Chip-Definition, die Sie benötigen, um es zu tun. Der Bootloader - Datei benötigen Sie ist im Verzeichnis / usr / share / arduino / hardware / Arduino / Bootloader / atmega /, und der Dateiname ist ATmegaBOOT_168_atmega328_pro_8MHz.hex. Sie müssen die Chip - Definition in einer Datei in einem Verzeichnis in Ihrer Hardware - Verzeichnis mit dem Namen zu haben boards.txt die in Ihrem Skizzenbuch Verzeichnis ist.

Wenn Sie kein Hardwareverzeichnis in Ihrem Skizzenbuchverzeichnis haben, können Sie es jetzt erstellen.

Wenn Sie bereits eine boards.txt-Datei in Ihrem Hardware-Verzeichnis haben, können Sie diesen Code hinzufügen, andernfalls kopieren Sie diesen Code in eine Datei und nennen Sie es boards.txt.

Erstellen Sie ein Verzeichnis, geben Sie ihm einen beliebigen Namen. Ich rief meine 328.

Verschieben Sie Ihre neue boards.txt-Datei in dieses Verzeichnis, und verschieben Sie dann dieses Verzeichnis in Ihr Hardware-Verzeichnis.

  ################################################## ############ # ATmega328 auf einem Steckbrett (8 MHz interne Uhr) ########################### ################################### atmega328bb.name = ATmega328 auf einem Steckbrett (8 MHz interne Uhr) atmega328bb .upload.protocol = stk500 atmega328bb.upload.maximum_size = 30720 atmega328bb.upload.speed = 57600 atmega328bb.bootloader.low_fuses = 0xE2 atmega328bb.bootloader.high_fuses = 0xDA atmega328bb.bootloader.extended_fuses = 0x05 atmega328bb.bootloader.path = arduino: atmega atmega328bb.bootloader.file = ATmegaBOOT_168_atmega328_pro_8MHz.hex atmega328bb.bootloader.unlock_bits = 0x3F atmega328bb.bootloader.lock_bits = 0x0F atmega328bb.build.mcu = ATmega328P atmega328bb.build.f_cpu = 8000000L atmega328bb.build.core = arduino: arduino atmega328bb.build. Variante = arduino: Standard

Überprüfen Sie, ob die Arduino IDE die Chip-Definitionen findet, indem Sie die Arduino IDE öffnen und auf Tools klicken und dann auf Board klicken. Es sollte wie das Bild aussehen, sollten Sie einen Eintrag für ATmega328 auf einem Steckbrett (8 MHz interne Uhr) zu sehen

Schritt 2: Booten Sie den Bootloader

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Nun, da Sie die Chip-Definition haben, ist es Zeit, den Bootloader zu brennen, benötigen Sie:

Dieser Chip hat keinen Bootloader darauf.

Wenn Sie einen Ersatz-Chip für Ihren Arduino oder einen Chip mit dem Bootloader vorinstalliert haben, müssen Sie einen 16-MHz-Oszillator, den Bootloader oder der Chip funktioniert nicht, zu verbrennen. Sie können einen verwenden 16 MHz Keramik - Resonator oder ein 16 - MHz - Kristall und zwei 22 pF - Kondensatoren .

Verdrahten Sie den Stromkreis wie in der Abbildung und den Diagrammen gezeigt.

Der rote Punkt auf dem Chip zeigt Pin 1 an.

Wenn Sie einen neuen Chip, ohne Bootloader installiert haben, nicht mit dem Resonator oder Kristall stören.

Öffnen Sie die Arduino IDE und klicken Sie auf Datei => Beispiele => ArduinoISP.

Klicken Sie auf Tools => Board und wählen Sie Ihr Arduino-Board. (Typischerweise Arduino Uno)

Klicken Sie auf Extras => Programmer und wählen Sie AVRISP mk II.

Klicken Sie auf den Upload-Button, um das Programm auf Ihr Arduino zu laden.

Klicken Sie auf Extras => Vorstand erneut, dieses Mal wählen ATmega328 auf einem Steckbrett (8 MHz interne Uhr).

Klicken Sie auf Extras => Programmer und wählen Arduino als ISP.

Klicken Sie auf Extras und wählen Sie Bootloader brennen.

Sie erhalten eine Meldung , dass der Bootloader auf I / O Board sagt Brennen (dies kann eine Minute dauern).

Wenn Sie eine Fehlermeldung erhalten, versuchen Sie es erneut, manchmal funktioniert es einfach nicht und das nächste Mal wird es.

Wenn es fertig ist wird die Meldung Done Bootloader brennen.

Schritt 3: Laden Sie das Programm hoch

Der einfachste Weg, um ein Programm auf den 8 MHz 328 hochzuladen, besteht darin, den 16 MHz-Chip aus dem Arduino herauszuziehen und diesen durch den 8 MHz-Chip zu ersetzen.

Starten Sie die Arduino IDE, klicken Sie auf Extras => Vorstand und wählen Sie ATmega328 auf einem Steckbrett (8 MHz interne Uhr).

Klicken Sie auf Extras => Programmer und wählen Sie AVRISP mkII.

Kopieren / fügen Sie den folgenden Code in die Arduino IDE und drücken Sie die Upload-Taste.

  / ************************************************* **************** * Dateiname: Count22.ino * * Dieses Programm läuft auf einem Atmega328P mit der internen Uhr.  ************************************************** ********* / int j = 0;  // Der erste verschachtelte Index.  Int k = 0;  // Zweiter geschachtelter Index void setup () {DDRB = B11111111;  // Setzen Sie die Pins auf OUTPUT DDRC = B11111111;  DDRD = B11111111;  } Void Schleife () {für (int i = 0; i <256; i ++) // Der Primärindex {PORTB = i;  // Setzen / Löschen der Bits 0 - 7 Verzögerung (5);  } J ++;  Wenn (j <256) PORTD = j;  // Bits setzen / löschen 8 - 15 else {PORTD = B00000000;  // Bits löschen 8 - 15 j = 0;  K ++;  Wenn (k <64) PORTC = k;  // Bits setzen / löschen 16 - 21 else {PORTB = B00000000;  // Zero alles zum Starten über PORTC = B00000000;  PORTD = B00000000;  J = 0;  K = 0;  Aufrechtzuerhalten.

Schritt 4: Bauen Sie die Schaltung

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Atmega328: verlieren den Kristall und gewinnen zwei Pins

Zum Aufbau der Schaltung benötigen Sie:

  • Der Atmega328P-Chip, den Sie in den vorherigen Schritten programmiert haben
  • 2 Steckbretten
  • 8 grüne LEDs
  • 8 Rote LEDs
  • 6 gelbe LEDs
  • 22 Widerstände (470-560 Ohm)
  • 22 gauge Anschlussdraht (Ich mag sortierte Farben für Klarheit verwenden.)
  • Ein 5-Volt-Netzteil

Das erste Bild zeigt einen auf eine LED gelöteten Widerstand. Dies ist optional, aber ich fand, dass mit einem Haufen von ihnen gemacht macht breadboarding viel einfacher. Löten Sie einen Widerstand an der Kathodenleitung einiger LEDs. Die Kathodenleitung ist die kürzere negative (Masse) Leitung.

Sie müssen diese mit acht roten, acht grünen und sechs gelben LEDs für dieses Projekt zu machen.

Der rote Punkt auf dem Chip ist Pin 1.

Wire die Breadboards wie in den Diagrammen.

Das erste Diagramm zeigt die Verdrahtung der ersten acht LEDs, da es durch eine weitere Verdrahtung abgedeckt wird.

Zur Stromversorgung des Stromkreises benötigen Sie eine 5 Volt Stromversorgung. Wenn Sie noch kein Konto haben , können Sie die 5V und GND - Pins auf Ihrem Arduino verwenden.

Related Reading