Wie kann man von Arduino auf die direkte Verwendung eines Mikrocontrollers umsteigen?

19

Ich habe an einem Arduino-Projekt gearbeitet. Nachdem ich mit dem Arduino alles zum Laufen gebracht habe, möchte ich zu einer Lösung übergehen, die NICHT Arduino verwendet. Das heißt, ich möchte einen Mikrocontroller verwenden, ohne das Arduino-Board einzubeziehen. Dies ermöglicht eine Einzelplatine, keine Abschirmlösung.

Ich weiß, dass es Methoden gibt, um mein eigenes Arduino auf einem Steckbrett herzustellen, aber das ist nicht wirklich das, was ich versuche.

Ich bin mir nicht sicher, wie ich das machen soll.

Sofern es keine bessere Option gibt, neige ich dazu, den ATmega328 zu verwenden, der vom Arduino verwendet wird. Ich verstehe, dass Entwicklungstools kostenlos oder zumindest nicht sehr teuer verfügbar sind.

Für diese Frage wird angenommen, dass ich +5 V an meinen Stromkreis anschließen kann.

Meine erste Frage ist, wie man die MCU programmiert. Ich glaube, es gibt zwei Möglichkeiten:

  1. Kaufen Sie einen Programmierer, programmieren Sie die MCU und platzieren Sie dann den Chip in meiner Schaltung.
  2. Entwerfen Sie meine Schaltung mit Unterstützung für In-Circuit-Programmierung.

Ich gehe davon aus, dass es bei Option 1 so einfach ist, einen programmierten Chip in meine Schaltung einzufügen. Ich brauche sonst nichts. Natürlich wäre das Ändern der Software unpraktisch.

Aber für Option 2 bin ich mir nicht sicher, was ich brauche. Nach dem Lesen brauche ich ein Programmierkabel und einen Anschluss auf meiner Platine (welcher Typ?). Dann schätze ich, dass ich den Stecker mit bestimmten Pins des ATmega (richtig) verdrahte.

In jedem Fall brauche ich Atmel Studio.

Zweitens, abgesehen von der Stromversorgung, gibt es etwas auf dem Arduino, das ich unbedingt brauche? Ich vermute, vielleicht ein Reset-Schalter?

Rick
quelle
2
Sie können ein Arduino verwenden, um AVRs zu programmieren. Ich persönlich verwende gerne Befehlszeilentools und ein Makefile anstelle einer IDE.
jippie
1
Diese Frage ist möglicherweise besser für den Arduino Stack Exchange geeignet. arduino.stackexchange.com Es ist jetzt in der öffentlichen Beta
akellyirl
4
Aber mein Ziel ist ein Design ohne Arduino.
Rick
"Gibt es etwas auf dem Arduino, das ich unbedingt brauche?" Ich denke, Sie werden die UART-Pins (auch bekannt als der serielle Port) brauchen, es ist praktisch für das Debuggen.
Vvy
Atmel Studio ist absolut nicht erforderlich. Ich programmiere meine Chips über die Kommandozeile (und einen Texteditor). Obwohl für große Projekte gewährt, wird Atmel Studio es auf jeden Fall einfacher machen
Chris Laplante

Antworten:

10

Willkommen in der wundervollen Welt von Atmel. Lassen Sie sich einige Antworten auf Ihre Fragen geben, die auf meinem Hobby und meiner beruflichen Erfahrung beruhen.

Kümmere dich nicht um irgendetwas, ABER um In-Circuit-Programmierung. Wenn Sie kein perfekter Programmierer sind, ist es ein Albtraum, jedes Mal, wenn Sie einen Chip programmieren möchten, diesen zu entfernen. Ich empfehle den AVRISPmkII als Einstiegsprogrammierwerkzeug. Der Nachteil ist, dass kein Hardwaredebug unterstützt wird. Eine Alternative ist der Drache, aber ich habe keine Erfahrung damit. Ich kann sagen, dass der JTAGICEmk3 ein nettes fähiges Debug-Tool ist.

Atmel Studio ist gut zum Programmieren. Es ist tatsächlich meine Lieblings-Embedded-Entwicklungsumgebung. Sie können CLI-Tools wie AVRDUDE und AVR-GCC verwenden, die IDE übernimmt dies jedoch für Sie.

ZUSAMMENFASSEND:

Kaufen Sie einen AVRISP nur zum Programmieren (einfacher, Plug & Play) oder einen DRAGON (Rat kann ich nicht geben).

Bringen Sie auf Ihrer Platine die ICSP-Pins in einen 6-poligen doppelreihigen 0,100 "-Header. Die Anschlüsse sind in diesem Datenblatt beschrieben .

Reset-Schalter sind nicht erforderlich.

HL-SDK
quelle
1
Ich habe mit einem EvUSBasp ausgezeichnete Ergebnisse erzielt.
Ignacio Vazquez-Abrams
Muss ich die ICSP-Pins für die In-Circuit-Programmierung verwenden, nachdem ich sie auf meinem Board herausgebracht habe, oder kann ich sie trotzdem als GPIO-Pins verwenden?
Ricardo
2
Sie können sie als GPIO verwenden, da sie die Funktionen mit SPI gemeinsam nutzen. Der Programmierer setzt den Chip zurück und kommuniziert mit ihm.
HL-SDK
1
Verwandte Tutorials zum Beginn der Mikrocontroller-Programmierung . Sie verwenden den AVRMega und führen den Prozess der Verkabelung des ISP und des luxuriösen C-Codes durch, um eine LED zu blinken.
MDMoore313
1
@ HL-SDK ist richtig, dass nur der RESET-Pin wirklich für ICSP reserviert werden muss, aber auch für die anderen Pins ist eine gewisse Vorsicht geboten, dh sie sollten wahrscheinlich eher als Ausgangs-Pins als als Eingangs-Pins verwendet werden (die Signale werden also nicht gesendet). (im ICSP-Modus nicht durch externe Schaltkreise gestört werden), und was auch immer daran angeschlossen ist, sollte so ausgelegt sein, dass es nicht nachteilig auf die zufällige Signalkombination reagiert, die der Programmierverkehr an sie sendet.
Microtherion
10

Sie müssen nicht alle auf einmal "abschließen". So habe ich konvertiert:

Zu Beginn habe ich weiterhin ein Arduino verwendet, aber Aufrufe an die Arduino-Bibliothek in zeilenweise registrierte Lese- und Schreibvorgänge umgewandelt, um festzustellen, ob meine Programme noch funktionierten. Auf diese Weise habe ich mich an die Verwendung von Registern gewöhnt und festgestellt, dass sie nicht radikal unstetig mit der Arduino-Arbeitsweise sind. Arduino-Funktionen wie digitalWrite () manipulieren einfach die Register - Sie können sie direkt in Ihren Skizzen lesen und beschreiben.

Mein nächster Schritt war, einen ATTiny 85 auf ein Steckbrett zu legen und ihn mit Arduino als ISP zu programmieren ( http://highlowtech.org/?p=1695 ). Wenn Sie ein Steckernetzteil kaufen und den internen Oszillator des ATTiny verwenden, erfordert dies lächerlich wenig Verkabelung. Ich habe die Arduino-IDE zum Kompilieren verwendet, aber weiterhin so viele Register wie möglich verwendet.

Dann habe ich die kostenlose Crosspack-Befehlszeilen-Toolchain installiert und ein Blinky-Programm kompiliert. Nach einigem Hin und Her habe ich es geschafft, den ATTiny nur mit avrdude zu programmieren und mich vollständig außerhalb des Arudino-Ökosystems aufzuhalten.

Sobald Sie nur mit den Befehlszeilen-Tools blinky erreicht haben, sind Sie frei von Arduino. Erkunden Sie die verschiedenen Peripheriegeräte und ihre Register, und schon bald wird es ganz natürlich.

Nach all dem finde ich mich oft mit Arduino, weil es schneller ist. Ich habe festgestellt, dass das Durchstöbern von Registerbeschreibungen irgendwie scheiße ist. Das macht keinen Sinn, wenn Sie nicht müssen. Es ist jedoch gut zu wissen, wie es geht.

user24505
quelle
8

Ich stimme dem obigen Kommentar von HL-DSK zu. Ich würde das zusätzliche Geld ausgeben und mir einen Programmierer mit Debug-Fähigkeiten zulegen. Ich benutze JTAGICE3, ungefähr 110 $ auf Digischlüssel.

Informieren Sie sich über ISP Programmierung hier . Hier erfahren Sie, wie Sie die SPI-Verbindungen herstellen. Die SPI-Verbindungen auf Ihrem Chip befinden sich im ATmega-Datenblatt. Informationen zu den MISO / MOSI / SCK / RESET-Pins finden Sie auf Seite 2. Der Programmierer muss in der Lage sein, die Rücksetzleitung zu steuern. Denken Sie daran, einen Pull-up-Widerstand an der Reset-Leitung zu verwenden, damit Ihr Chip nach dem Trennen des Programmiergeräts ausgeführt wird.

Holen Sie sich ein 2x3 - Header hier . Oder machen Sie Ihre eigenen mit Abreißköpfen.

qce88
quelle
2
Ich werde zweitens einen Programmierer mit Debug-Unterstützung bekommen. Anfang dieses Monats wurde ich mit einem PIC32-Projekt ohne vorherige Erfahrung auf niedrigem Niveau in die Tiefe getrieben. Selbst wenn jemand anderes die niedrigste Stufe der Bit Banging-Funktionalität schreibt, möchte ich nicht einmal darüber nachdenken, wie viel schwieriger es ist, herauszufinden, wo meine Probleme waren, wenn ich nur eine einzige rot / grüne LED im Inneren sehen musste.
Dan Neely
Sobald Sie professionelle Werkzeuge haben, gibt es kein Zurück mehr.
Matt Young
7

Der Unterschied zwischen einem Arduino und einem bloßen ATmega328 ist nur zwei Dinge. Der Arduino-Bootloader und die Arduino-Bibliotheken. Sie können ein Arduino mit nacktem C oder C ++ codieren, ohne eine der Bibliotheken zu verwenden. Sie können stattdessen auch Assembly verwenden. Mit dem Bootloader können Sie neuen Code seriell laden, ohne die (etwas) kompliziertere In-Circuit-Serial-Programmierung (im Grunde SPI) durchlaufen zu müssen.

Sie können mit fast jedem ide Standard-Programmierbibliotheken und avr-gcc verwenden. Im Gegensatz zu dem, was andere sagen, ist das Codieren eines Arduino im Grunde wie das Codieren eines bloßen Mikrocontrollers, mit einigen zusätzlichen Bequemlichkeiten auf Kosten einer gewissen Leistung.

Passant
quelle
4
Sie können den Arduino-Bootloader und -Bibliotheken aber auch mit einem bloßen ATmega328 verwenden.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, die es in ein Arduino mit nackten Knochen verwandelt, natch.
Passant
5

Ich kaufe vorab geladene Atmega328P- Chips und programmiere sie im Schaltkreis mit einem FTDI-Kabel . Ich mag die Eclipse-IDE, aber Sie können jede beliebige Umgebung verwenden, die Sie bevorzugen - Atmel Studio, die Arduino-IDE, Emacs oder barfuß in der Befehlszeile.

Diese Platine befindet sich an dem Punkt im Aufbau, an dem sie vollständig genug ist, um sie mit einem Hello-Programm zu testen, wobei das Kabel für die Programmierung, die Stromversorgung und das Terminal verwendet wird. Es wird weiterhin seine Stromversorgung benötigen - in meinem Fall LM2936, einen extrem stromsparenden Spannungsregler und einen Batterieanschluss - und alle anderen On-Board-Komponenten und Off-Board-Verbindungen, die das Projekt benötigt:

NotDuino

Da Sie ein Arduino haben, können Sie mit dem Arduino ein wenig Geld sparen und unprogrammierte Chips verwenden, um den Bootloader zu installieren. Die schönen blauen Pin-Out- Etiketten helfen mir dabei, meine Goof-Rate niedrig zu halten! Ich verwende einen 16-MHz-Quarz, aber wenn Sie mit dem internen Oszillator arbeiten können, verringert sich Ihre Teilezahl um 3 (xtal und 2 Kondensatoren).

JRobert
quelle
2

Um von Arduino zu wechseln, wo die Hardware bereitgestellt wird und die Software eine C-Sprachüberlagerung ist, möchte ich einige Vorschläge machen. Ich sehe, dass die Leute einige nützliche Antworten gepostet haben, aber ich war dort, wo Sie sind, und ich würde die Dinge ein bisschen anders machen.

  1. Wählen Sie einen Debugger. Debugger bieten Ihnen die Möglichkeit, den Mikrocontroller zu programmieren und zu debuggen. Dazu gehören die schrittweise Verarbeitung und Haltepunkte, mit denen Sie das Programm an einer bestimmten Codezeile anhalten können, um zu überprüfen, was der Code gerade tut. ISP (In-Circuit Programming) ist eine serielle Schnittstelle, die 3 Pins verwendet. Dies ist gut, bietet aber nicht die volle Funktionalität, die Anfänger wünschen. Die JTAG- Schnittstelle verwendet 4 Pins, wodurch Sie im Grunde die volle Funktionalität in Bezug auf die Verwendung von Haltepunkten und anderen Dingen erhalten. Normalerweise neigen die Leute eher zum ISP, weil es „relativ“ einfacher einzurichten ist, aber wenn Sie mich fragen, ist JTAG nicht schwer einzurichten, sondern hängt auch von Ihren persönlichen Vorlieben ab. Und es gibt Debug Wire Schnittstelle, die ich in dieser Diskussion überspringen möchte, weil Sie lieber ISP als Debug-Wire verwenden.
  2. Kaufen Sie einen Debugger mit ISP- und JTAG-Funktionalität. Ich denke, Sie kaufen einmal, aber kaufen gut, was Ihnen in Zukunft helfen wird, wenn Sie Ihr Design ändern möchten. Ich empfehle AVR Dragon oder JTAGICE. Beide werden über USB mit dem PC verbunden und bieten ISP und JTAG. JTAGICE ist etwas teurer als AVR Dragon, aber ich empfehle AVR Dragon auf jeden Fall.
  3. Sie werden feststellen, dass die meisten Atmel-Mikrocontroller über ISP-Funktionalität verfügen, aber nicht viele über JTAG. Kleine Mikrocontroller wie die AT90S2313- oder ATTINY-Serie verwenden ISP-Serien, da diese klein sind. Aber wenn Sie nicht nur ein paar LEDs blinken lassen möchten, sondern beispielsweise mit einem LCD-Bildschirm oder einer Tastatur kommunizieren möchten, oder was Sie möchten, dann empfehle ich Ihnen, sich für einen etwas größeren Mikrocontroller zu entscheiden. Wenn Sie eine 5V-Versorgung verwenden, empfehle ich Ihnen ATMega8 oder sogar ATMega16 oder ATMega128 (mein Favorit). ATMega16 und ATMega128 haben eine ISP- und JTAG-Schnittstelle.
  4. In Bezug auf die IDE habe ich früher Code Vision und AVR Studio verwendet, aber ich empfehle, Atmel Studio 6.0 oder neuer zu verwenden, um all Ihren Anforderungen gerecht zu werden.

Ich habe ein paar schematische Ideen, die ich selbst gelernt habe, damit Sie eine saubere und reibungslose Schnittstelle zu Ihrem Mikro haben. Lass es mich wissen falls du Hilfe benötigst.

David Norman
quelle
1

Ehrlicher Rat

Arduino ist für Anfänger, von hier aus gibt es zwei Möglichkeiten

Methode 1: Funktionsweise eines Mikrocontrollers / Prozessors (bevorzugter Ansatz)

Atmel 8051

Damit meine ich Lernarchitekturen und Assembler-Code (oder Bare-Metal) für das Micro-P / C. Wenn Sie hierfür einen Ausgangspunkt benötigen, würde ich Atmel 8051 vorschlagen, einen 8-Bit-Mikrocontroller mit der einfachsten Architektur und dem einfachsten Montageanweisungssatz. Jeder andere moderne 32-Bit- oder 64-Bit-Prozessor hat eine davon abgeleitete Architekturform. Dieser Mikrocontroller wird immer noch als Teil meiner Abschlussarbeit verwendet, da er ein guter Ausgangspunkt ist und viel Literatur zur Verfügung steht.

Oh und Kits zur Erstellung Ihrer ISP-Karte werden verkauft (fertig montierte Kits mit Processo, Lötkomponenten zu einem Board-Kit und Sie können die Entwicklungskarte selbst bauen, nur ein paar ICs und RS-232-Kabel / -Buchsen erforderlich).

Da es Low-Tech ist, werden alle Komponenten billig sein.

Weg 2: Springe zu einem Hardware-Software-Ansatz (weniger bevorzugt)

Himbeer-Pi Spürhundknochen Schwarz

Dies ist der Ansatz für Faulenzer, die ein wenig in die Montage eingetaucht sind und auf etwas mehr Software als Hardware setzen möchten. Ich würde vorschlagen, auf ein anderes Hobby-Board wie Raspberry Pi oder BeagleBoneBlack mit ARM-Prozessoren zu wechseln und Projekte in ihrer Kreativität zu beginnen.

Dexobox
quelle
0

Sie können das Arduino-Board verwenden, ohne die Sandbox-Bibliotheken und die Umgebung zu verwenden. Sie können alles direkt selbst programmieren. Wenn Sie ihren Bootloader über serial / uart zum Programmieren verwenden möchten, funktioniert das einwandfrei. Die meisten / alle AVR-Teile können jedoch auch auf andere Weise programmiert werden, wobei das Teil im Reset-Modus gehalten wird und somit nicht gemauert werden kann. Es ist ziemlich einfach, Spi von einem Arduino oder einem anderen Mikrocontroller oder mit einem ftdi-Ausbruch aus einem bestimmten Geschmack herauszubeißen. sparkfun hat Arduino- und Nicht-Arduino-Boards (die 32u zum Beispiel), bei denen der SPI-Header offensichtlich ist. und Ftdi-Breakout-Boards, die Sie mit der Ftdi-Bibliothek oder der Ftdi-Bibliothek, die im Lieferumfang von Linux enthalten ist, mühelos basteln können.

In der Dokumentation zu jedem Teil sind die Boot- und Flash-Programmieroptionen aufgeführt. Ja, es ist nicht schwierig, nur ein paar Teile zu kaufen und ein eigenes Breakout-Board zu bauen. Ich würde das erst tun, wenn Sie ein vorhandenes Breakout- oder einfaches Evaluierungsboard verwendet und dieses dann bei Bedarf geklont haben. Beginnen Sie am besten mit einem Teil mit einem internen RC-Oszillator, im Grunde genommen mit Strom-, Masse- und Programmierstiften ...

Oldtimer
quelle