Wir haben jetzt einen Github-Diskussionsbereich. Wenn es sich bei einem Problem definitiv um einen Defekt im Kern handelt, verkürzen Sie die Zeit, die für die Behebung benötigt wird, wenn Sie ein Problem erstellen, da ich Probleme Vorrang vor dem Nachholen von Diskussionen gebe.
Dadurch werden viele der in 2.6.x vorhandenen Fehler behoben
2.6.x führt einen erheblich verbesserten Flash-Footprint der seriellen Schnittstelle ein und fügt gleichzeitig Funktionen hinzu, Wire kann den Slave aus dem Ruhezustand wecken, ohne Daten zu beschädigen, und vieles mehr, siehe Changelog.
Es sollten nur Versionen der Arduino IDE verwendet werden, die von arduino.cc heruntergeladen wurden, NIEMALS von einem Linux-Paketmanager. Die Paketmanager verfügen oft über die Arduino IDE – haben diese aber modifiziert . Und das, obwohl sie nichts über Arduino oder Embedded-Entwicklung im Allgemeinen wissen, geschweige denn darüber, was sie wissen müssten, um es erfolgreich zu modifizieren. Diese Versionen sind für subtile, aber schwerwiegende Probleme berüchtigt, die durch diese unklugen Modifikationen verursacht werden. Es ist nicht zu erwarten, dass dieser Kern auf solchen Versionen funktioniert, und aus diesem Grund werden keine Änderungen vorgenommen, um Versionen der IDE zu reparieren, die von Paketmanagern stammen.
Dies ist ein Fehler im Arduino-Client.
IDE-Versionen zwischen 1.8.13 und 2.x entwickelten erhebliche neuartige Mängel. IDE-Versionen 1.8.2 und früher weisen jedoch lähmende, nicht behobene Mängel auf. Ich glaube, dass sie endlich eine funktionierende Version der IDE herausgebracht haben, und ich glaube, dass die neueste Version meinen Kern korrekt installieren kann.
Vor megaTinyCore 2.6.0 führte die manuelle Installation von megaTinyCore aufgrund dieses Fehlers zum Absturz von V1.8.14 der IDE, wenn Sie den Kern manuell in Ihrem Arduino-Ordner installierten. Benutzer von 1.8.14 und höher müssen Version 2.6.0 von megaTinyCore verwenden.
Ich kaufe viele Elektronikartikel auf AliExpress. Es ist ein toller Marktplatz für Dinge, die von chinesischen Unternehmen hergestellt werden und größtenteils allgemeiner Natur sind, einschließlich einer Menge Komponenten, die für Menschen im globalen Westen auf andere Weise nicht erhältlich sind (z. B. ist die Mindestbestellmenge eine Rolle oder so etwas in der Art – falls Sie überhaupt eine finden können). Komponentenlieferant, der mit dem namenlosen chinesischen Chiphersteller zusammenarbeitet). Es ist kein guter Ort für die neuesten Halbleiterproduktlinien großer westlicher Hersteller, insbesondere angesichts der historischen Knappheit dieser Chips. Die modernen AVR-Geräte, sofern sie überhaupt über diese Kanäle verfügbar sind, werden häufig als gefälscht oder defekt gemeldet (wie ATtiny412s, die denken, sie seien 416s und führen beim Einschalten möglicherweise keinen korrekten Reset durch). Im Übrigen möchten Sie wahrscheinlich keine AVR-Mikrocontroller auf AliExpress kaufen ... Bestückte Platinen wie Arduino-Nano-Klone funktionieren im Allgemeinen, wenn Sie die mit den LGT8-Chips von Drittanbietern meiden und auf die mit dem ATmega168p achten anstelle des '328p - aber es gibt viele Berichte über gefälschte Mikrocontroller, wenn sie als Bare-Chips verkauft werden (ich habe von gefälschten ATtiny85s gehört, die tatsächlich bemerkt wurden). ATtiny13s; nicht nur moderne AVRs werden gefälscht). Es gibt viele interessante Theorien darüber, wo diese gefälschten Chips herkamen, und Microchip hat sich zu diesem Thema überhaupt nicht geäußert.
Dieses Dokument lässt sich am besten online anzeigen (anstatt die Markdown-Datei in Ihrem bevorzugten Texteditor zu öffnen), damit Links anklickbar sind und Inline-Bilder angezeigt werden, und wahrscheinlich am wichtigsten, damit Tabellen manchmal korrekt dargestellt werden. Auch dieses [Dokument kann auf Github gefunden werden](https://github.com/SpenceKonde/megaTinyCore](https://github.com/SpenceKonde/megaTinyCore)
Ältere Versionen verwalten die Programmierer im Menü „Tools -> Programmierer“ nicht richtig, was die UX mit zunehmender Anzahl der installierten Kerne schnell verschlechtert. Sie sind nicht geeignet. Die neuesten Versionen ab 1.8.14 (einschließlich 1.8.17, 1.8.18 und 1.8.19) erzeugen möglicherweise den Fehler „Panik: Keine Hauptversion gefunden“, da sie platform.txt nicht richtig analysieren können. Seit 2.6.0 haben wir die Datei „platform.txt“ direkt vor der Veröffentlichung manuell geändert, sodass dies weniger problematisch ist
Wenn megaTinyCore über den Boardmanager installiert wird, wird die erforderliche Version der Toolchain automatisch installiert. Alle Teile der 0/1/2-Serie werden ohne zusätzliche Schritte unterstützt. Bis 2.2.7 verwendeten wir die Arduino7-Version von avr-gcc (gcc 7.3.0 und avrlibc 3.6.1) mit den neuesten ATpacks vom Juni 2020. Ab 2.2.7 begannen wir, meinen Azduino-Build der Toolchain zu verwenden hat ATpacks für alle neu unterstützten Teile aktualisiert. 2.2.7 verwendete Azduino3, 2.3.0+ verwendete Azduino4 und ab 2.6.0 verwenden wir Azduino5 (obwohl es für uns keinen Vorteil bietet, abgesehen von der Einsparung von einem Viertel GB Festplattenspeicher und 40 MB Download-Bandbreite, wenn Sie beides installieren). megaTinyCore und DxCore durch Vorstandsmitglied.
Die manuelle Installation ist komplizierter – insbesondere, wenn Sie Unterstützung für die 2er-Serie wünschen; Weitere Informationen finden Sie im Installationshandbuch.
Ein Arduino-Kern für die tinyAVR 0-Serie, 1-Serie und jetzt die 2-Serie. Diese Teile verfügen im Vergleich zu den „klassischen“ tinyAVR-Teilen (die von ATTinyCore unterstützt werden) über eine verbesserte Architektur, mit verbesserter Peripherie und verbesserter Ausführungszeit für bestimmte Anweisungen (diese ähneln in beiden Punkten der erweiterten AVR Dx-Serie und auch MegaAVR-0-Serie-Chips wie der ATmega4809, wie er auf dem offiziellen Nano Every und Uno Wifi Rev. 2 verwendet wird (obwohl das Arduino-Team sein Bestes getan hat, um sie in die Knie zu zwingen) in den typischen kostengünstigen, kleinen Paketen der ATtiny-Linie. Alle diese Teile verfügen über mindestens einen Hardware-UART und eine SPI- und TWI-Schnittstelle (kein USI-Müll wie zum Beispiel der ATtiny85), ein leistungsstarkes Ereignissystem, konfigurierbare benutzerdefinierte Logik und mindestens einen analogen Komparator auf dem Chip , ein überraschend genauer interner Oszillator und im Fall der 1er-Serie ein tatsächlicher DAC-Ausgangskanal und im Fall der 2er-Serie ein schicker Differential-ADC.
Darüber hinaus sind die Teile der tinyAVR 0/1/2-Serie günstig – die hochwertigsten Teile, die 3226 und 3227, mit 32 KB Flash und 3 KB SRAM (im Vergleich zum 2 KB SRAM wie der ATmega328p, der in Uno/Nano/ProMini verwendet wird). Die Stückzahl beträgt knapp über 1 USD – weniger als viele klassische 8k-AVR-ATtiny-Teile („AVR-Befehlssatz zum PIC-Preis“). Alle diese Teile sind für den Betrieb mit 16 MHz oder 20 MHz (bei 4,5–5,5 V) ohne externen Quarz ausgelegt, und der interne Oszillator ist genau genug für die UART-Kommunikation.
Diese verwenden UPDI-Programmierung und nicht den traditionellen ISP, wie es die klassischen ATtiny-Teile taten. Weitere Informationen finden Sie weiter unten. Es ist einfach, einen UPDI-Programmierer zu bekommen: Sie können mit jtag2updi einen klassischen 328p-basierten Arduino als Programmierer verwenden. Für bessere Ergebnisse mit billigerer Hardware können Sie aber auch einen beliebigen USB-Seriell-Adapter und einen Widerstand (und vorzugsweise eine Diode) mit dem mitgelieferten SerialUPDI verwenden Tool, oder Sie können AVRdude mit einem der Microchip-Programmierer (den mEDBG/nEDBG/EDBG-basierten Programmierern auf ihrem Entwicklungsboard, Atmel-ICE oder SNAP) verwenden oder jedes UPDI-Programmiertool, das eines davon emuliert (was meines Wissens alle tun – wenn es eines gibt, das avrdude unterstützt, mein Kern jedoch nicht, öffnen Sie bitte ein Issue, um es mir mitzuteilen!).
Ein serieller Bootloader, Optiboot_x (basierend auf der gleichen Codebasis wie der klassische Arduino Uno-Bootloader, allerdings inzwischen stark verändert), wird auf diesen Teilen unterstützt (Unterstützung für die 0/1-Serie ist derzeit live, die 2-Serie wird für die erste Maiwoche erwartet). ; Anpassungen für die neuen Teile sind trivial), sodass sie über eine herkömmliche serielle Schnittstelle programmiert werden können. Weitere Informationen hierzu und die relevanten Optionen finden Sie im Abschnitt Optiboot weiter unten. Für die Installation des Bootloaders ist ein UPDI-Programmierer erforderlich. Die zusammengebauten Breakout-Boards, die ich auf Tindie verkaufe, sind vorgebootet erhältlich (sie werden auf Anfrage gebootet). Allerdings ist die Benutzererfahrung mit Optiboot sowohl bei den Teilen der 0/1-Serie als auch bei den 14-Pin-Teilen der 2-Serie etwas enttäuschend, da ihnen ein Hardware-Reset-Pin fehlt, der mit der üblichen Autoreset-Schaltung verwendet werden könnte automatisch in den Bootloader zurückgesetzt, wenn die serielle Schnittstelle geöffnet wird. Sie müssen entweder die UPDI-Programmierung vollständig deaktivieren (es ist ein HV-Programmierer erforderlich, wenn die Sicherungseinstellungen oder der Bootloader nach dem ersten Bootloaden geändert werden müssen) oder UPDI aktiviert lassen, aber jeden Upload innerhalb von 8 Sekunden nach dem Anlegen der Stromversorgung starten. Die 20-Pin- und 24-Pin-Teile der 2er-Serie unterstützen einen „alternativen Reset-Pin“, sodass diese eher wie ein herkömmliches Arduino funktionieren.
Die UPDI-Programmierschnittstelle ist eine Single-Wire-Schnittstelle zum Programmieren (und Debuggen – Universal P rogramming and D ebugging Interface ), die auf der tinyAVR 0/1/2-Serie sowie allen anderen modernen AVR-Mikrocontrollern zum Einsatz kommt . Man kann zwar jederzeit einen speziell angefertigten UPDI-Programmierer von Microchip erwerben, dies wird jedoch nicht empfohlen, wenn Sie die Arduino-IDE anstelle der (ungeheuer komplizierten) IDE von Microchip verwenden. Es gibt zahlreiche Berichte über Probleme unter Linux für die offiziellen Microchip-Programmierer. Es gibt zwei sehr kostengünstige alternative Ansätze zum Erstellen eines UPDI-Programmierers, mit denen die Arduino-Community beide mehr Erfahrung hat als diese offiziellen Programmierer.
Bevor megaTinyCore existierte, gab es ein Tool namens pyupdi – ein einfaches Python-Programm zum Hochladen auf mit UPDI ausgestattete Mikrocontroller mithilfe eines seriellen Adapters, der durch Hinzufügen eines einzelnen Widerstands modifiziert wurde. Da Pyupdi jedoch nicht ohne weiteres über die Arduino-IDE verwendet werden konnte, war dies keine Option. Ab 2.2.0 bringt megaTinyCore eine portable Python-Implementierung mit, die viele Türen öffnet; Ursprünglich hatten wir geplant, Pyupdi anzupassen, aber auf Drängen des Autors und mehrerer Mitarbeiter von Microchip haben wir diese Funktionalität stattdessen auf Pymcuprog basiert, einem „robusteren“ Tool, das von Microchip entwickelt und „verwaltet“ wurde und den gleichen Upload über die serielle Schnittstelle beinhaltet Funktion, nur ohne die Leistungsoptimierungen. Bei einer manuellen Installation müssen Sie das für Ihr Betriebssystem geeignete Python-Paket hinzufügen, um diese Upload-Methode verwenden zu können (eine Python-Systeminstallation reicht nicht aus und ist auch nicht erforderlich).
Informationen zur Verkabelung finden Sie in der SerialUPDI-Dokumentation .
Ab 2.3.2 ist dies aufgrund der dramatischen Leistungsverbesserungen und der nachgewiesenen Zuverlässigkeit des Verkabelungsschemas mit einer Diode anstelle eines Widerstands und angesichts der Unzulänglichkeit der jtag2updi-Firmware nun die empfohlene Programmiermethode. Ab dieser Version wurde die Programmiergeschwindigkeit um den Faktor 20 erhöht und übertrifft nun bei weitem das, was mit jtag2updi möglich war (die Programmierung über jtag2updi ist in der Geschwindigkeit in etwa vergleichbar mit der Programmierung über SerialUPDI bei der Geschwindigkeitsoption „SLOW“, 57600). Baud; die normale 230400-Baud-Version programmiert etwa dreimal schneller als die SLOW-Version oder jtag2updi, während die Option „TURBO“ (läuft bei 460800 Baud und erhöht die Upload-Geschwindigkeit um etwa 50 % gegenüber der normalen Version. Die TURBO-Geschwindigkeitsversion sollte nur mit Geräten verwendet werden, die mit 4,5 V oder mehr laufen, da wir den UPDI-Takt schneller laufen lassen müssen, um mithalten zu können (dies ist auch nicht zu erwarten). um mit allen seriellen Adaptern kompatibel zu sein (dies ist ein bewusster Kompromiss für eine verbesserte Leistung), aber es ermöglicht das Hochladen und Überprüfen einer 32-kB-Skizze in 4 Sekunden.
Es werden drei Designs entwickelt: Ein serieller Dual-Port-Adapter, bei dem es sich bei beiden um serielle Ports handelt, ein serieller Dual-Port-Adapter, bei dem ein Port immer UPDI ist, und ein Single-Port-Adapter mit einem Schalter zur Auswahl des Modus und einer optionalen Zusatzplatine LEDs zeigen den Status der Modem-Steuerleitungen an.
Diese ermöglichen die Verwendung eines SMT-JST-XH-Steckers oder eines Dupont-Steckers – in beiden Fällen mit 6 Pins für seriell (FTDI-Pinbelegung wie markiert) und 3 Pins (für UPDI).
Alle drei können 3,3 oder Vusb (nom. 5 V) liefern oder sowohl Vusb als auch 3V3 vom Strom trennen und davon ausgehen, dass das Zielgerät mit 5,5 V > Vdd > 1,8 V versorgt wird. Die in diesem Fall verwendeten Logikpegel sind die angelegten Spannungen. Seien Sie gewarnt, dass bei dualen seriellen Geräten die VccIO-Stromschiene gemeinsam genutzt wird! Sie müssen beide mit der gleichen Spannung betrieben werden, es muss sich um dasselbe Gerät handeln, oder der Adapter muss so eingestellt sein, dass er sie versorgt, und ihre Stromversorgung muss unterbrochen sein.
Es wurde festgestellt, dass je nach Adaptermodell und Betriebssystem unterschiedliche Timing-Einstellungen erforderlich sind; Die Einstellungen, die erforderlich sind, um zu verhindern, dass selbst 230400 Baud unter Linux/Mac mit den meisten Adaptern fehlschlagen, führen jedoch zu einer viel größeren Zeitstrafe unter Windows, wo die serielle Verarbeitung des Betriebssystems langsam genug ist, dass diese Verzögerung nicht erforderlich ist ...
Die hier erwähnte „Schreibverzögerung“ soll ermöglichen, dass die Ausführung des Befehls zum Löschen und Schreiben der Seite abgeschlossen werden kann. Dies dauert eine Zeit ungleich Null. Abhängig vom Adapter, der USB-Latenz und dem impliziten 2- oder 3-Byte-Puffer (es ist wie ein USART und wahrscheinlich intern als solcher implementiert. Das dritte Byte, das ankommt, kann nirgendwo hingehen, da der Hardware-Puffer nur 2 Byte tief ist). genug, damit es ohne explizite Verzögerung funktionieren kann. Oder es schlägt möglicherweise mittendrin fehl und es wird ein „Fehler mit st“ gemeldet. Je schneller das Latenzzeitlimit des Adapters und je schneller die serielle Verarbeitung des Betriebssystems ist, desto größer ist die Wahrscheinlichkeit, dass dies ein Problem darstellt. Dies wird durch den Befehlszeilenparameter -wd
gesteuert, wenn prog.py manuell ausgeführt wird. Ab 2.5.6 liegt diese Schreibverzögerung näher an der tatsächlich angeforderten Zeit (in ms), zuvor hatte sie eine Granularität von mehreren ms, wobei 1 alles war, was Sie brauchten, und infolgedessen war die Strafe, die sie verhängte, besonders brutal Windows.
Auswahlhilfe:
460800+ Baud erfordert, dass das Ziel mit 4,5V+ läuft, um die Spezifikation einzuhalten (in der Praxis muss es wahrscheinlich nicht ganz so hoch sein – aber es muss eine Spannung sein, die hoch genug ist, um stabil bei 16 MHz zu sein. Wir stellen die ein Schnittstellentakt auf das Maximum für alle Geschwindigkeiten über 230.400 Baud - während einige Adapter manchmal ohne diesen Schritt mit 460.800 arbeiten (was an und für sich seltsam ist - 460800 Baud ist 460800 Baud, oder?), die meisten nicht und SerialUPDI hat keine Möglichkeit, den Adapter zu bestimmen.
CH340-basierte Adapter weisen auf den meisten Plattformen eine ausreichend hohe Latenz auf und arbeiten fast immer mit jeder Geschwindigkeit, ohne auf Schreibverzögerungen zurückzugreifen. Alle Optionen funktionieren ohne Verwendung der Schreibverzögerung.
Fast alle Adapter arbeiten unter Windows mit 230,4 KB, ohne die Schreibverzögerung zu nutzen. Bei einigen wenigen ist dies nicht der Fall, darunter einige native USB-Mikrocontroller, die als serielle Adapter programmiert sind (z. B. SAMD11C).
Fast nichts außer den CH340-basierten Adaptern funktioniert unabhängig von der Plattform mit 460,8 KB oder mehr ohne Schreibverzögerung.
Unter Windows gelingt es vielen Adaptern (sogar solchen, die es eigentlich unterstützen sollten) nicht, auf 921600 Baud umzustellen. Ich weiß nicht, warum. Das Symptom ist eine Pause zu Beginn einiger Sekunden beim Versuch, gefolgt vom Hochladen mit 115200 Baud. Der einzige, mit dem ich bisher Erfolg hatte, ist seltsamerweise der CH340.
460.800 Baud unter Windows mit Schreibverzögerung sind oft langsamer als 230.400 Baud ohne. Das Gleiche gilt nicht für Linux/Mac, und je kleiner die Seitengröße, desto größer ist der Leistungseinbruch durch die Schreibverzögerung.
57600 Baud sollten verwendet werden, wenn andere Optionen nicht funktionieren oder wenn bei Vcc = < 2,7 V programmiert wird.
460800 Baud funktioniert ohne Schreibverzögerung bei einigen Adaptern mit einem 10k-Widerstand über der Schottky-Diode zwischen TX und RX, während es ohne diese nicht funktioniert, es sei denn, die Schreibverzögerung ist aktiviert. Nein, ich verstehe auch nicht, wie das sein könnte!
Wie Sie oben sehen können, handelt es sich bei diesen Informationen größtenteils um empirische Daten; Es ist noch nicht bekannt, wie das Verhalten vorhergesagt werden kann.
FTDI-Adapter (FT232, FT2232 und FT4232 usw.), einschließlich der gefälschten, die bei eBay/AliExpress für etwa 2 US-Dollar erhältlich sind, haben unter Windows standardmäßig eine quälend lange Latenzzeit von 16 ms. Auch wenn wir so viel Aufwand betreiben, um die Anzahl der Wartezeiten zu begrenzen, verlängert sich ein Upload von 2,2 Sekunden auf über 15 Sekunden. Sie müssen dies ändern, um tolerierbare Upload-Geschwindigkeiten zu erhalten:
Öffnen Sie die Systemsteuerung und den Gerätemanager.
Ports erweitern (COM und LPT)
Klicken Sie mit der rechten Maustaste auf den Port und wählen Sie „Eigenschaften“.
Klicken Sie auf die Registerkarte Porteinstellungen
Klicken Sie auf „Erweitert...“, um das Fenster mit den erweiterten Einstellungen zu öffnen.
Suchen Sie im Abschnitt „BM-Optionen“ das Menü „Latenztimer“, das wahrscheinlich auf 16 eingestellt sein wird. Ändern Sie dies auf 1.
Klicken Sie auf OK, um das Fenster mit den erweiterten Optionen zu schließen, und erneut, um die Eigenschaften zu verlassen. Der Geräte-Manager aktualisiert die Liste der Hardware.
Uploads sollten jetzt viel schneller sein.
Einer kann aus einem klassischen AVR Uno/Nano/Pro Mini hergestellt werden; Die übliche Wahl sind kostengünstige Nano-Klone, die so günstig sind, dass man sie verkabeln und dann so belassen kann. Für diese Prozesse stellen wir keine detaillierte Dokumentation mehr zur Verfügung; jtag2updi ist veraltet. Wenn Sie es noch verwenden, sollten Sie jtag2updi aus dem Menü „Tools->Programmer“ auswählen. Dies war zuvor unsere empfohlene Option. Aufgrund der anhaltenden jtag2updi-Fehler und der Abhängigkeit vom größtenteils nicht gepflegten Tool „avrdude“ (das unter anderem eine falsche Fehlermeldung in alle damit durchgeführten UPDI-Uploads einfügt) wird dies nicht mehr empfohlen.
Anscheinend packt Arduino keine 32-Bit-Versionen des neuesten Avrdude ein. Ich habe eine neue Tooldefinition definiert, die eine Kopie von arduino18 (der neuesten Version) ist, mit der Ausnahme, dass sie stattdessen Version 17 auf 32-Bit-Linux zieht, da dies das Beste ist, was für diese Plattform verfügbar ist. Die Arduino17-Version unterstützt das Hochladen mit einigen Microchip-Programmiertools nicht korrekt.
Dies wird derzeit nur für die letzten Versionen verwendet und sollte den Fehler „avrdude not available for this platform“ beheben.
tinyAVR 2-Serie
ATtiny3227,1627,827,427
ATtiny3226,1626,826,426
ATtiny3224,1624,824,424
tinyAVR 1-Serie
ATtiny3217,1617,817,417
ATtiny3216,1616,816,416
ATtiny1614.814.414.214
ATtiny412.212
tinyAVR 0-Serie
ATtiny1607.807
ATtiny1606.806.406
ATtiny1604.804.404.204
ATtiny402.202
Alles mit dem Namen „AVR##XX##“, wobei X ein Buchstabe und # eine Zahl ist – dafür brauchen Sie meinen DxCore
Alle klassischen (vor 2016) tinyAVR-Teile – diese werden fast alle von einem meiner anderen Kerne, ATTinyCore, unterstützt
ATtiny 25/45/85, 24/44/84, 261/461/861, 48/88, die beiden kleinen und Einsen (seltsame 43 und 4313/2313) und in 2.0.0 die 26 sowie das Finale -vier (die Hinweise auf Experimente in Richtung moderner AVRs zeigen), der ATtiny 441/841, 1634 und 828 plus die noch seltsamere 26.
Alles andere In diesem Dokument finden Sie eine Liste der AVR-Teilefamilien und der Arduino-Kerne, mit denen sie funktionieren – fast alles hat einen Kern, der Unterstützung bietet, normalerweise von mir oder MCUdude.
Sehen Sie sich dieses Dokument an, das alle modernen AVRs abdeckt
Besonderheit | 0-Serie | 1er-Serie | 1+Serie | 2er-Reihe |
---|---|---|---|---|
Blitz | 2k-16k | 2k-8k | 16k/32k | 4k-32k |
Pincount | 8-24 | 8-24 | 14-24 | 14-24 |
SRAM | 128b-1k | 128b-512b | 2k | 512b-3k |
TCD | NEIN | Ja | Ja | NEIN |
TCB | 1 | 1 | 2 | 2 |
ADC | 1x10bit | 1x10-Bit | 2x10-Bit | 1x12-Bit mit PGA |
VREF-Pin | NEIN | NEIN | Ja | Ja |
Wechselstrom | 1 | 1 | 3 | 1 |
Ereignis * | 3 Chan | 6 Chan | 6 Chan | 6 Chan |
CCL ** | 2 LUT | 2 LUT | 2 LUT | 4 LUT |
*
Ereigniskanäle, außer bei den tinyAVRs der 2er-Serie (und allen nicht-tiny modernen AVRs), werden in zwei Typen unterteilt – synchron (zur Systemuhr) und asynchron. Nicht alle Generatoren können mit einem synchronen Kanal verwendet werden, und einige Event-Benutzer können nur die synchronen Kanäle verwenden, und die Kanallisten sind weniger konsistent und mehr. Dieser Wahnsinn wurde bei der ersten Gelegenheit aufgegeben – selbst die Mega0 hatte diese Unterscheidung abgeschafft.
**
Nur 2-Serien- und nicht-winzige Teile können einen Interrupt basierend auf dem CCL-Status auslösen.
Alle Teile verfügen über einen analogen Eingang an den meisten Pins (alle Pins an PORTA und PORTB 0-1 und 4-5). Der zweite ADC der 1er-Serie+ kann die Pins an PORTC ebenfalls als Eingänge verwenden (Informationen zur Verwendung dieser Pins finden Sie in der analogen Referenz).
Dies sind die Budgetoptionen. Obwohl sie unterstützt werden, werden sie nicht empfohlen. Diese erhalten nie den „Boost“, den die tinyAVR 1-Serie bei 16k erhält, haben in keiner Konfiguration einen zweiten TCB, keinen TCD, nur 3 Ereigniskanäle, von denen keiner die RTC-Ereignisausgabe übertragen kann. Diese Teile verfügen wie die 1er-Serie über 2 CCL-LUTs und sind mit bis zu 16.000 Flash in 14-, 20- und 24-Pin-Konfigurationen (nur 4.000 für 8-Pin-Teile) und bis zu 1.000 SRAM erhältlich.
Diese haben 2k, 4k oder 8k Flash und 128, 256 oder 512b RAM, genau wie die 0-Serie. Sie verfügen nicht über den zweiten ADC, die Dreifach-AC-Konfiguration oder den zweiten TCB, wohl aber über den TCD.
Plötzlich, bei 16.000, werden die 1er-Teile viel interessanter. Begleitet wird der größere Flash von einem Arsenal an Peripheriegeräten, die für einen viel größeren Chip geeignet zu sein scheinen, und ob 16k oder 32k, alle verfügen über 2k SRAM. Der gesamte zweite ADC ist einzigartig unter den AVRs. Es scheint das Testgelände für viele Funktionen gewesen zu sein, die in verfeinerter Form in der AVR Dx-Serie zum Einsatz kamen. Der Preis scheint die weitaus besseren Peripheriegeräte der 16k-1er-Serie nicht zu berücksichtigen.
Wie Sie der Tabelle oben entnehmen können, handelt es sich bei der 2er-Reihe fast eher um einen Sidegrade denn um ein Upgrade. Sie haben einen viel besseren ADC, das Event-System und die CCLs sind „normal“, und sie haben mehr RAM, der 14-Pin-Teil ist mit 32k Flash verfügbar (ein 3214 war offenbar geplant, wurde dann aber abgesagt; es kam weit genug dazu eine Weile im ATPACK bleiben, bevor es entfernt wird)
Ich habe eine kurze Zusammenfassung geschrieben, wann Sie welche Serie verwenden möchten, wenn die richtige Wahl noch nicht klar ist.
In der offiziellen Arduino-Board-Definition für ihr „megaavr“-Hardwarepaket implizieren sie, dass die neue Architektur auf den Teilen der megaAVR 0-Serie (die fast die gleiche ist wie die der tinyAVR 0-Serie und 1-Serie) „megaavr“ heißt „ – das ist kein offizieller Begriff. Microchip verwendet den Begriff „megaAVR“ für jedes „ATmega“-Teil, unabhängig davon, ob es über alte oder moderne Peripheriegeräte verfügt. Es gibt keine offiziellen Begriffe, die sich auf alle AVR-Teile der einen oder anderen Familie beziehen, und ein Mitarbeiter von Microchip bestritt sogar, dass es intern einen solchen Begriff gebe. Ich bin mir nicht sicher, wie man zwei Sätze von Teilen herstellen kann, wobei die Teile in jedem Satz so viel miteinander und so wenig mit dem anderen Satz gemeinsam haben und niemand einen Begriff für einen der beiden Sätze prägt.
In diesem Dokument haben wir vor 2.0.2 die Arduino-Konvention verwendet, und obwohl seitdem weit über ein Jahr vergangen ist, finde ich immer noch Stellen, an denen ich sie MegaAVR nenne. Bitte melden Sie dies mithilfe eines Github-Problems, falls Sie eines sehen. Beachten Sie, dass die Begriffe avr
und megaavr
immer noch intern verwendet werden (z. B. in Bibliotheken, um zu kennzeichnen, mit welchen Teilen eine bestimmte Bibliothek kompatibel ist, oder um verschiedene Versionen einer Datei danach zu trennen, worauf sie ausgeführt werden sollen). Das wird so weitergehen – wir müssen dabei bleiben, um die Kompatibilität mit dem zu gewährleisten, was das Arduino-Team mit dem Kern für Uno WiFi Rev. 2 und Nano Every begonnen hat.
Auf jeden Fall bedarf es einiger Worte, um sich auf die beiden Gruppen zu beziehen, und Microchip hat keines bereitgestellt. In Ermangelung eines offiziellen Begriffs bezeichne ich die AVR-Geräte vor 2016 (mit PORTx-, DDRx- usw. Registern für Pins) als „ klassischer AVR “ und diejenigen, die Arduino Megaavr nennt, als „ moderne AVR “. Es gibt auch einige Teile, deren I/O-Module weitgehend klassischen AVRs ähneln, die aber auch eine deutlich schlechtere Version des Befehlssatzes und typische Flash-Größen von 1k oder weniger haben. Diese verwenden die AVRrc-Variante (für reduzierten Kern) von AVR, während die meisten klassischen AVRs AVRe oder AVRe+ verwenden und moderne AVRs AVRxt verwenden. Die AVRrc-Teile werden von diesem Kern nicht unterstützt, und in dem unglücklichen Fall, dass ich diese zutiefst enttäuschenden Teile besprechen muss, werde ich sie als „ Reduced Core AVR “-Teile bezeichnen, da dies ihr offizieller Name ist, auch wenn ich viele davon habe buntere Sätze für sie. Es wird empfohlen, dass kein Design einen reduzierten Kern-AVR verwendet. Nicht, dass sie veraltet wären, sie sind einfach nur mies. Es wird empfohlen, für alle neuen Designs „ moderne AVRs “ (solche mit den neuen Peripheriegeräten und dem AVRxt- Befehlssatz) – entweder Ex-Serie, Dx-Serie, tinyAVR 0/1/2 oder Mega0 – zu verwenden
Datenblatt für die neue tinyAVR 2-Serie – Während das Datenblatt nur die 16k-Teile „abdeckt“, heißt es eindeutig, dass es keine Unterschiede in den Merkmalen zwischen Teilen mit der gleichen Pin-Anzahl gibt (das heißt, es gibt keine „goldenen“ Teile wie die 16k/32k 1-Serie), nur zwischen Teilen mit unterschiedlicher Pin-Anzahl und nur wie durch die Pin-Anzahl vorgegeben (d. h. eine Funktion am 24-Pin-Teil befindet sich auch am 14-Pin-Teil). (es sei denn, der 14-polige hat nicht die benötigten Pins und kann ohne Pins nicht verwendet werden). 14-, 20- und 24-Pin-Teile sind alle mit 4k-, 8k-, 16k- und 32k-Flash aufgeführt; Diese Flash-Größenoptionen verfügen jeweils über 512, 1024, 2048 und 3072 Byte SRAM (d. h. die 4k- und 8k-Teile haben das Doppelte des SRAM), 4/8k-Teile erhalten 128 Bytes EEPROM, die größeren erhalten 256 14-polige Teile gibt es in SOIC und TSSOP, 20-polige in (breitem) SOIC, SSOP und so weiter klitzekleines QFN wie das 1616 (dieses Mal gaben sie uns auch den 32k-Teil in diesem Paket, aber viel Glück beim Erhalten eines, es ist überall nachbestellt – ich konnte kein einziges finden) und 24-polig im gleichen VQFN wie das 3217.
TWI, SPI, USART0, AC0 bleiben unverändert, ebenso NVMCTRL (die am Bootloader erforderlichen Änderungen betrafen ausschließlich die Unterstützung des zweiten USART). Uhroptionen unverändert. TCB0 und TCB1 wurden auf die Version der Dx-Serie aktualisiert: Clock-Off-Event-Option, Kaskade und separate INTCTRL-Bits für OVF und CAPT – nette Ergänzungen, aber nichts Relevantes für den Kern selbst), und alle Teile haben beide TCBs. Wir erhalten jetzt 4 CCL-LUTs und 2 Sequenzer, statt 2 und 1 – und sie können wie andere Teile mit CCL Interrupts auslösen (und im Gegensatz zur tinyAVR 0/1-Serie). Eines der aufregendsten Features ist, dass sie erwartungsgemäß über einen zweiten USART verfügen (das Geräusch, das Sie hören, ist das Schluchzen des ATtiny841 und des ATtiny1634 in der Ecke). PORTMUX-Register werden jetzt wie die übrigen modernen AVRs benannt – wir haben jedoch nicht die individuelle Kontrolle über die Pins für jeden TCA WO-Kanal verloren. EVSYS funktioniert jetzt genauso wie bei nicht-winzigen Teilen der AVR-0/1-Serie (was eine willkommene Abwechslung ist – die 0/1-Serie war das Sondermodell, und einige der Unterschiede bei EVSYS waren beschissen ). Die 1er-Funktionen von TCD0, AC1/2, DAC0 und ADC1 sind weg . Stattdessen ist ADC0 viel schicker und fast nicht wiederzuerkennen, der erste neue AVR seit der Übernahme, der über einen echten Differential-ADC verfügt. (Ein weiterer gequälter Schrei des armen 841, der ebenfalls über einen unglaublich schicken ADC mit großartigen Differentialoptionen verfügt, der aber neben den neuen völlig veraltet aussieht) ... gemessen an der Menge an Beiträgen zu verschiedenen Themen, die ich habe Ich habe das Gefühl, dass der Differential-ADC auf den meisten Ihrer Wunschlisten nicht ganz oben stand – aber er stand ganz oben auf der Wunschliste der großen Chipkunden, und das ist es, was wir bekommen. Und es war fast an der Zeit, dass wir einen richtigen Differential-ADC anstelle des der Dx-Serie bekommen. Und es ist wirklich sehr, sehr schick. Siehe unten.
megaTinyCore bietet eine analogRead()-Implementierung und leistungsfähigere Funktionen zur Nutzung von Oversampling und PGA (siehe den Abschnitt über die analogen Funktionen unten).
Oh, und noch etwas … die UPDI-Pin-Konfiguration hat die alten Optionen – UPDI, I/O oder Reset … und eine neue: UPDI auf PA0, mit Hardware-RESET-Pin auf PB4! Optiboot wird endlich eine praktikable und komfortable Option sein, zumindest für die Teile, die über einen PB4 verfügen, also nicht für die 14-Pin-Teile. Was zufälligerweise auch die beliebteste Sorte ist (wenn man von meinen Tindie-Ladenverkäufen ausgeht).
Glauben Sie, dass es eine 3er-Reihe geben wird? Ich nicht. DD und die EAs verfolgen sie eindeutig und nehmen strategische Positionen rund um das TinyAVR-Territorium ein. Ich denke, es ist nur eine Frage der Zeit, bis die Marke eliminiert wird, wie es bei megaAVR nach der megaAVR 0-Serie der Fall war. Das ist nicht unbedingt eine schlechte Sache: Alle Teile der Dx- und EA-Serie sind in der Pinbelegung und im Verhalten sehr ähnlich, was sehr schön ist. Die Tinys sind weniger systematisch, obwohl sie die Pins an mehr Peripheriegeräte verteilen. Das Leitprinzip scheint gewesen zu sein: „Kein Peripheriegerät bleibt zurück“. Im Gegensatz zu den Pin-Zuordnungen der Dx- und EA-Serien, bei denen alles einem festen Masterplan folgt. Teile haben entweder einen bestimmten Pin oder nicht, und wenn nicht, steht ihnen diese Funktion nicht zur Verfügung. Ich glaube, dass es in beiden großen Gruppen einen Produktmanager gibt, dessen Aufgabe es ist, Ingenieuren, die darüber nachdenken, eine „Ausnahme“ von der Heiligen Pinbelegung zu machen, eine Peitsche zu verpassen (da sich diese Ausnahmen unweigerlich vermehren und so am Ende zu den Pinbelegungen für die Dartscheibe mit verbundenen Augen gekommen sind). auf klassischem tinyAVR)
Die Pin-Nummerierung ist bei den tinyAVRs seltsam, und es ist die Schuld von Microchip – sie haben die Pins innerhalb der Ports seltsam nummeriert: Es beginnt in der richtigen Reihenfolge, außer dass PA0 UPDI ist und im Allgemeinen nicht verwendbar ist, dann sind die Pins von PORTB in umgekehrter Reihenfolge nummeriert. dann PORTC zurück zur gleichen Nummerierung gegen den Uhrzeigersinn wie PORTA. Gib mir eine Pause! Traditionell wird Pin 0 als erster Pin verwendet und die letzte Zahl ist der Pin, den Sie nicht verwenden können, ohne eine Sicherung zu setzen, die die Programmierung des Chips erschwert. Ich hätte sie viel lieber gegen den Uhrzeigersinn nummerieren können, beginnend mit A0, ohne ungeschriebene Konventionen des Arduino-Codes zu brechen. Man kann argumentieren, dass ich bei der Pinbelegung eine schlechte Entscheidung getroffen habe – vielleicht hätten sie mit PA0 (unbrauchbar, wenn keine Sicherung gesetzt ist, in diesem Fall ist der Chip schwer zu programmieren) als Pin 0 beginnen und dann die Pins gegen den Uhrzeigersinn nummerieren sollen. Aber wenn alle Ports in Ordnung wären, könnten Sie immer noch nicht die Tricks machen, die Sie könnten, es sei denn, Sie nummerieren die PORTB-Pins rückwärts. Wenn Sie die Erwartung loswerden könnten, dass alle Pins der Reihe nach nummeriert werden (und nur die PIN_Pxn-Notation verwenden), könnten erhebliche Einsparungen erzielt werden
Ich gehe davon aus, dass es in 2-4 Jahren einen AVR DA, DB, DD geben wird. DU- (USB-), EA- und D/E/F-Serienteile bis zu einer Pinanzahl von 8 (oder mindestens 14) und 64-Pin-Teile mit 128k-Flash und dem neuen ADC. Und nichts anderes mit der Marke ATtiny. Die größte verbleibende Frage ist möglicherweise, ob sie den ATmega2560 jemals durch einen modernen AVR mit insgesamt 100 Pins (wahrscheinlich 80-88 davon I/O) und Flash-Optionen bis zu 256 KB ersetzen werden. Das würde drei Probleme mit sich bringen: Erstens sind über 56 I/O-Pins hinaus keine VPORT-Register mehr übrig – der untere I/O-Speicherplatz ist mit 28 VPORT und 4 GPIORs voll. Wie werden sie mit den 4 zusätzlichen Ports umgehen? (Beim 2560 handelte es sich nur um Ports zweiter Klasse, auf die langsamer zugegriffen wurde und die keinen Single-Cycle-Zugriff hatten. Ich habe einige Überlegungen dazu und die Machbarkeit angesichts der wenigen Opcodes, die hier in Anhang A verfügbar sind. Und zweitens, um einen Verstoß zu verhindern In der 128-K-Barriere müssen Sie zu einem 17-Bit-Programmschalter gehen. "D x Teil bei 256 km Flash hätte 32.000 Ram. Jetzt erinnern sich Zugeordneter Blitz, hinterlässt keinen Raum für die SFRs, die sich im gleichen Adressraum befinden.
Ich verkaufe Breakout -Boards mit Regulierungsbehörde, Updi Header und Serienheader in meinem Tindie -Shop sowie in den bloßen Brettern. Der Kauf in meinem Geschäft unterstützt die weitere Entwicklung im Kern und ist eine großartige Möglichkeit, diese aufregenden neuen Teile mit Arduino zu verwenden. Derzeit sind Attiny1624 Boards erhältlich, aber die 20- und 24-poligen Teile werden erst als versammelte Board verkauft, wenn ein neu überarbeitetes PCB-Design vom Board House zurückkommt, um Autoreset am Alt-Re-Re-Re-Re-Re-Re-Reset-Pin zu aktivieren. Es kommt auch eine 14 -polige Board -Revision - dachte, sie sei weitgehend kosmetisch. Die gelbe Lötmaske muss gehen, da sich die Lesbarkeit in den letzten verschiedenen Chargen verschlechterte. Die neuen Bretter standardisieren auch einen Abstand von 0,6 "zwischen den Stiftenreihen anstelle des Stromabstand Verwenden Sie sie mit unserer Prototyping -Karte, die für diesen Zeilenabstand optimiert ist. Die montierten Boards der 0er-Serie werden eingestellt und werden nicht wieder aufgenommen, sobald sie ausverkauft sind. Gleiches gilt für die Teile der 16K 2-Serie, sobald die 32K-Teile verfügbar sind.
Die ADC in der 2er- und EA-Serie sind die besten ADCs, die in der modernen AVR-Ära auf einem AVR veröffentlicht wurden. Neben diesen beiden. Die engsten Vergleiche sind die klassischen AVRs, die unterschiedliche ADCs mit erstklassigen Merkmalen erhielten (T841, MEGA2560 und (überraschend) der T861 ist die stärksten Konkurrenten). Obwohl es nicht in der Lage ist, den verrückten 100 -fachen und 200 -fachen Gewinn zu erzielen, den einige Teile in den klassischen AVR -Tagen prahlten, war mir nie klar, wie viel von dem, was verstärkt wurde Ich werde sagen "Wahrscheinlich das meiste davon, und das meiste davon, wenn Sie mich die Hardware entwerfen lassen, weiß ich nicht analog!"). Dieser neue ADC ist sicherlich sehr fähig, mit echten Differentialfähigkeiten (im Gegensatz zur DA- und DB -Serie) und eines, das über alles aufsteigt, was bisher auf anderen modernen AVRs verfügbar ist. Der programmierbare Verstärkerverstärker ist eine neue Fähigkeit, und es bleibt abzuwarten, welche Art von Leistungen der analogen Messung Menschen herausholen können. Es erscheint sicherlich vielversprechend. Es wird besonders interessant sein, die Unterschiede zwischen der Verwendung der PGA bei 1x Gewinn zu verstehen, gegenüber der Verwendung der PGA nicht und den Vorteilen und Nachteilen. (Microchip wäre durch ein Dokument, in dem in dem allgemeinen Fall die richtige ADC-Konfiguration für eine Aufgabe ausgewählt werden soll Die Situation wurde stark verbessert, es scheint immer noch, dass die DOC -Gruppe ausdrücklich angewiesen wurde, keine konkreten Empfehlungen jeglicher Art abzugeben .
Die Zugabe von 1024-Stichproben-Akkumulation für die Zwecke von Überabtastung und Dezimierung ist eine willkommene Ergänzung, die jedoch auch besteht, die Größe und Relevanz des Offset-Fehlers zu unterschätzen. (Entnehmen Sie 1024 Proben (alle haben einen gegebenen Versatzfehler Wurde, beispielsweise 5 LSB, bei einer einzigen Messung, wenn Sie 1024 Proben und Dezimate akkumulieren, haben Sie einen Offset -Fehler von 160, es ist äußerst leicht zu erkennen und zu glauben, dass es kein Geräusch ist.
Der erste Full-Size-Chip (Non-Ziny) mit dem neuen ADC ist in 28-48-Pin-Paketen mit einem Blitz von bis zu 64.000 erhältlich. Es gab die üblichen Spekulationen darüber, was, wenn sich etwas von 2 Serien in die EA-Serie ändern würde: Es sieht so aus, als ob die Antwort ist, einer der verwirrenden Knöpfe entfernt wurde und automatisches Schilderhacking für akkumulierte Messungen ((
Der Timer vom Typ D wird nur für PWM auf Teilen von 20/24 Pin 1-Serie in den Standard-PWM-Pin-Einstellungen verwendet. Bei den kleineren Teilen würde es uns nicht die Gesamtzahl der PWM -Stifte erhöhen. Nur die WOC- und WOD-Stifte (auf PC0 bzw. PC1) haben noch keine TCA-gesteuerte PWM. Da Analogwrite () keine Funktionen unterstützt, die durch das Ausschalten des Split-Modus (wie 16-Bit-PWM) oder durch die Verwendung des Timers vom Typ D (wie das Anpassen der Frequenz) aktiviert werden, wäre dies nur schlimmer, weil Es würde zusätzlichen Platz erfordern, um die Routine zu speichern, um PWM von zwei Timer -Arten ein- und auszuschalten. Dies ist bei den kleineren Blitzteilen nicht vernachlässigbar; Es befindet sich in der Größenordnung von 600 Bytes. 150 für digitalwrite () und 450 für analogwrite (), wenn diese jemals einen TCD -PWM -Pin aufgerufen werden. Der Optimierer sollte in der Lage sein, diesen Teil dieser Funktionen in diesem Fall zu optimieren, da lange die mit diesen Funktionen verwendeten Stifte keine TCD -PWM -Pins enthalten. Beachten Sie, dass der Optimierer sie unabhängig betrachtet, dh Digitalwrite () wird den Code zum Ausschalten von TCD PWM enthalten, wenn er mit einem PIN verwendet wird, der TCD für PWM verwendet, unabhängig davon, ob Sie analogwrite () an diesem Pin jemals aufrufen oder nicht.
Im Gegensatz zu fast jedem anderen AVR (ich kann mir vielleicht 3 Beispiele vorstellen, und nur einer von ihnen ist ein "Bonus", kein "Unnonus"), gibt es zusätzliche "Bonus" -Funktionen, die auf der Blitzgröße von Teilen innerhalb einer Familie basieren, in einer Familie, . Die 16K- und 32K -Versionen (nur) haben einige zusätzliche Funktionen (die auch anscheinend auch nicht für die Preisgestaltung in Betracht gezogen worden zu sein scheinen) alle 2K RAM, ob 16K oder 32K, sie haben 3 analoge Komparatoren (einschließlich eines Fenstermodus Option), eine zweite - dringend benötigte - Timer vom Typ B - und seltsamsten von allem, was sie haben, haben eine zweite ADC, die sich nur unterscheidet, in denen die Kanäle entsprechen!
Im Gegensatz zu klassischen AVRs wird der Blitz in diesen Teilen dem gleichen Adressraum wie der Rest des Speichers zugeordnet . Dies bedeutet pgm_read_*_near()
nicht direkt von Flash lesen wird. Aus diesem Grund setzt der Compiler automatisch jede variable deklarierte const
in Progmem ein und greift darauf zu. Sie müssen sie nicht mehr explizit als Progmem deklarieren. Dies schließt zitierte String -Literale ein, sodass das F () -Makro auch nicht mehr benötigt wird, um die Kompatibilität mit einigen Bibliotheken von Drittanbietern aufrechtzuerhalten.
Beachten Sie jedoch, dass Sie, wenn Sie explizit eine variable Progmem deklarieren, die pgm_read
-Funktionen verwenden müssen, um sie genau wie auf klassischen AVRs zu lesen. Wenn eine Variable auf Teilen mit dem speichergebundenen Blitz progmem deklariert wird, ist der Zeiger ausgefallen (die Adresse ist relativ zum Start des Flashs, nicht zum Start des Adressraums). Der gleiche Offset wird angewendet, wenn das pgm_read_*_near()
Makros verwendet wird. Beachten Sie, dass das Deklarieren von Dingen Progmem und Zugriff auf pgm_read_*_near
Funktionen, obwohl es einwandfrei funktioniert, langsamer ist und eine kleine Menge Blitz verschwendet (im Vergleich zur einfacher Deklaration der Variablen const); Gleiches gilt für das F () -Makro mit konstanten Zeichenfolgen in 2.1.0 und später (für einen bestimmten Zeitraum vor 2.1.0, F()
tat nichts - das verursachte Probleme für Bibliotheken von Drittanbietern). Die Autoren behaupteten, dass das Problem mit dem Kern und nicht mit der Bibliothek gewesen sei, und ich habe die Wahl darin, weniger Effizienz zu akzeptieren oder meinen Benutzern den Zugriff auf beliebte Bibliotheken zu verweigern). Die Verwendung des F()
-Makro kann für die Kompatibilität mit einigen Bibliotheken von Drittanbietern erforderlich sein (die spezifischen Fälle, die die Rückkehr von F()
auf uns erzwangen, waren nicht von dieser Art - wir konnten diejenigen, die ich wusste, mit dem wusste F ()-AS-NOOP-Code, und sie haben ein paar Bytes weniger Blitz aufgenommen).
Die Automobilversionen sollten ebenfalls funktionieren. Sie müssen immer die 16 MHz abgeleiteten Taktgeschwindigkeiten für diese Teile auswählen. Sie unterstützen keinen 20 -MHz -Betrieb, und es sollten nicht abgestimmte Taktoptionen verwendet werden.
Nun zum guten Teil, wo wir darüber sprechen können, wie all dies von Megatinycore entlarvt wird. Wir beginnen mit der Frage, wie Sie sich auf die besten Ergebnisse verweisen und dann zu den Kernfunktionen und Menüoptionen übergehen, bevor Sie mit einer Reihe von Links zu Dokumenten mit Details zu verschiedenen Subsystemen enden.
Die einfache Angelegenheit, wie man sich auf einen PIN für Analograd () und DigitalRead (), insbesondere auf nicht standardmäßige Hardware, bezieht, war bei Arduino-Benutzern eine anhaltende Quelle der Verwirrung. Ich bin der Meinung, dass ein Großteil der Schuld bei den Entscheidungen des Arduino -Teams (und Autor von Draht vor ihnen) darüber beruht, wie Stifte genannt werden sollten; Die Bezeichnung einiger Stifte als "analoge Pins" lässt die Menschen glauben, dass diese Stifte nicht für digitale Operationen verwendet werden können (sie werden besser als "Stifte mit analogen Eingang" angesehen - wie es "Stifte, die PWM ausgeben können"). Die Tatsache, dass Pins traditionell nummeriert wurde, hat das Wasser weiter verwirrt. Für nicht standardmäßige klassische AVR-Teile werden die Angelegenheiten oft noch schlechter durch mehrere, inkompatible "Pin-Mappings", die von verschiedenen Autoren im Laufe der Jahre erstellt wurden, um das Teil eher wie eine Uno oder für einen anderen Zweck zu handeln (ATTINYCORE ist eine besondere Mach auf diese Weise, wobei einige Teile drei völlig unterschiedliche Pin-Zuordnungen haben. In mindestens einem Fall ist eines der alternativen Zuordnungen ein von Teufel inspiriertes Werk von reinem Übel, das nichts weniger als eine zusätzliche Nachschlagtabelle erfordert, um analoge Stifte in Digital umzuwandeln Stifte).
Dieser Kern verwendet ein einfaches Schema zum Zuweisen der Arduino-Pin-Nummern: Die Stifte sind ab dem E/A-Pin nummeriert, der VCC als Pin 0 am nächsten liegt und gegen den Uhrzeigersinn weitergeht, wobei das (meistens) nicht ausgebaute Updi-Pin übersprungen wird. Der Updi -Pin wird dann der letzten Pin -Nummer zugeordnet (wie oben erwähnt, ist es möglich, den Updi -Pin (sowohl analoge als auch digitale Leswerte) zu lesen, auch wenn er nicht als GPIO festgelegt ist). Wir empfehlen dies als letztes Ausweg: Der Updi -Pin ist immer seinen Pullup aktiviert, wenn es nicht als GPIO -Pin festgelegt ist, und ein Signal, das der Updi -Aktivierung zu sehr aussieht, wird einen unerwünschten Betrieb verursachen.
Um jede Verwirrung über Pin -Identitäten zu verhindern und Mehrdeutigkeiten zu beseitigen, empfehlen wir die Verwendung der Pin_Pxn -Notation, um sich auf Stifte zu verweisen, es sei denn, Sie verwenden eine Entwicklungskarte mit unterschiedlichen Zahlen oder Namen für die darauf gedruckten Stifte. Dies maximiert die Portabilität Ihres Codes für andere ähnliche Hardware und erleichtert die Überprüfung von Informationen zu den Stiften, die Sie in den entsprechenden Datenblättern verwenden, falls dies erforderlich ist.
x
ist die empfohlene PIN_Pxn
n
um sich auf Pins zu verweisen #defines
Diese lösen sich nur auf die digitale Pin -Nummer des fraglichen PINs - sie durchlaufen keinen anderen Codepfad oder irgendetwas. Sie haben jedoch einen besonderen Dienstprogramm beim Schreiben von Code, der in der Produktlinie mit Peripheriegeräten funktioniert, die mit bestimmten Stiften (nach Port) verbunden sind, wie die meisten Peripheriegeräte. Mehrere Demo -Code -Teile in der Dokumentation nutzen dies. Direkte Port -Manipulation ist auch möglich - und tatsächlich sind mehrere leistungsstarke zusätzliche Optionen verfügbar - siehe Direktanschluss -Manipulation .
PIN_Pxn
- nicht Pxn
und nicht PIN_xn
- diese bedeuten verschiedene Dinge!
Wenn eine einzelne Nummer verwendet wird, um sich auf einen PIN zu beziehen - in der Dokumentation oder in Ihrem Code - ist dies immer die "Arduino -Pin -Nummer". Dies sind die Pinzahlen in Orange (für Stifte, die analograd ()) und blau (für Nadeln, die nicht) in den Pin -Out -Diagrammen in der Lage sind. Alle anderen Möglichkeiten, sich auf Stifte zu beziehen, sind auf die entsprechende Arduino -Pin -Nummer angegeben.
Der Kern liefert auch An
und PIN_An
-Konstanten (wobei n
eine Zahl von 0 bis 11 ist). Wie beim offiziellen Kern ist PIN_An
als die digitale Pin -Nummer des Pin definiert, die mit dem analogen Kanal n geteilt werden. Diese beziehen sich auf die ADC0 -Kanalnummern . Dieses Benennungssystem ähnelt dem, was in vielen klassischen AVR -Kernen verwendet wurde , aber hier sind sie nur #definiert als entsprechende Arduino -Pin -Nummer . Wenn Sie die analoge Kanalnummer auf einem digitalen Pin erhalten müssen, verwenden Sie das Makro digitalPinToAnalogInput(pin)
Sie benötigen dies jedoch nur, wenn Sie eine erweiterte ADC -Bibliothek schreiben.
Diese Teile (na ja, zumindest die 1/2-Serie-war die 0-Serie als Budgetoption gemeint, außer dass sie das Budget nicht schrumpfen konnten, und sie sind nur ein paar Cent billiger) eine hervorragende Werkzeugkiste mit vielseitig und mächtige Peripheriegeräte; Die Top -End -Spiele sind gleich oder besser als klassische Megaavr -Teile - für einen TinyAVR -Preis. Eines der Leitprinzipien für die Gestaltung von Megatinycore ist, wie bei meinen anderen Kernen, darin, dass die unterstützten Teile ihr volles Potenzial erreichen - oder so nah wie möglich innerhalb der Grenzen von Arduino. Dieser (sehr große) Abschnitt deckt die Merkmale dieser Teile ab und wie sie durch Megatinycore sowie Merkmale des Kerns selbst ausgesetzt sind. Dieser (sehr große) Abschnitt versucht, die einzelnen Feature -Bereiche abzudecken. Versuchen Sie, die Funktion zu finden, mit der Sie arbeiten, wenn Sie versuchen, eine Chipfunktion zu verwenden und Probleme zu haben!
20 MHz intern (4,5 V -5,5 V - typisch für 5 -V -Systeme)
16 MHz intern (4,5 V -5,5 V - typisch für 5 -V -Systeme)
10 MHz intern (2,7 V -5,5 V - typisch für 3,3 -V -Systeme)
8 MHz intern (2,7 V -5,5 V - typisch für 3,3 -V -Systeme)
5 MHz intern (1,8 V-5,5 V)
4 MHz intern (1,8 V-5,5 V)
2 MHz intern (1,8 V-5,5 V, schlecht getestet)
1 MHz intern (1,8 V-5,5 V, schlecht getestet)
20 MHz externe Uhr (4,5 V-5,5 V, schlecht getestet)
16 MHz externe Uhr (4,5 V-5,5 V, schlecht getestet)
12 MHz externe Uhr (2,7 V-5,5 V, schlecht getestet)
10 MHz externe Uhr (2,7 V-5,5 V, schlecht getestet)
8 MHz externe Uhr (2,7 V-5,5 V, schlecht getestet)
6 MHz intern (abgestimmt, ungetestet)
5 MHz intern (abgestimmt, schlecht getestet)
4 MHz intern (abgestimmt, schlecht getestet)
2 MHz intern (abgestimmt, schlecht getestet)
1 MHz intern (abgestimmt, schlecht getestet))
7 MHz intern (abgestimmt, für Masochisten, ungetestete)
8 MHz intern (abgestimmt, schlecht getestet)
10 MHz intern (abgestimmt, schlecht getestet)
12 MHz intern (abgestimmt, ungetestet)
14 MHz intern (abgestimmt, für Masochisten, ungetestete)
16 MHz intern (abgestimmt)
20 MHz intern (abgestimmt)
24 MHz intern (abgestimmt, übertaktet, schlecht getestet)
25 MHz intern (abgestimmt, übertaktet, schlecht getestet)
30 MHz intern (abgestimmt, übertaktet, schlecht getestet) - 0/1 -Serie benötigt "20 MHz" OSCCFG -Sicherungseinstellung; Teile der 2er-Serie können 30 mit "16 MHz" ausgewählt werden oder nicht.
32 MHz intern (abgestimmt, übertaktet, schlecht getestet) - nur 2er -Serien, sehr optimistisches Übertakten, können instabil sein.
24 MHz externe Uhr (übertaktet, schlecht getestet)
25 MHz externe Uhr (übertaktet, schlecht getestet)
30 MHz externe Uhr (übertaktet, schlecht getestet)
32 MHz externe Uhr (übertaktet, schlecht getestet)
Wir geben keine Ansprüche über Spannungs- oder Temperaturbereiche für übertaktete Teile - nur wir behaupten, dass mindestens einer der Chips mit dieser Geschwindigkeit bei Raumtemperatur und einer bestimmten Skizze bei 5 V gearbeitet haben . Es wird erwartet, dass Ihre Kilometerleistung variiert, aber im Allgemeinen besser mit einer F -Spezifikation im Vergleich zu einem n- oder u -Spezifikum.
Wichtig - Lesen Sie das Tuning, bevor Sie eine abgestimmte Option auswählen!
Weitere Informationen zu diesen Taktgeschwindigkeiten finden Sie in der Taktreferenz
Spannungen sind diejenigen, die nach Herstellungsspezifikationen garantiert werden (es sei denn, die Grenzen des Betriebstemperaturbereichs werden diese Teile in der Regel weitaus besser abschneiden (2-Serien funktionieren im Allgemeinen bei 32 MHz und 5 V @ Raumtemperatur sogar vom internen Oszillator; die 0 /1 der Serie arbeitet ebenfalls normalerweise bei 32 MHz mit externer Uhr, sofern die Stromversorgung ein stabiler 5,0-5,5 V ist).
Es ist keine Aktion erforderlich, um die OSCCFG
-Sicherung festzulegen, wenn die Skizze über Update hochgeladen wird. Wenn Sie über Optiboot hochgeladen werden, kann die Sicherung nicht geändert werden. Was auch immer ausgewählt wurde, wenn der Bootloader verbrannt wurde, wird verwendet, und nur "Burn Bootloader" oder das Hochladen einer Skizze über Updi wird dies ändern.
Alle internen Oszillator -Takt -Geschwindigkeitsoptionen verwenden die Factory -Standardkalibrierung, sofern keine "abgestimmte" Option ausgewählt ist. In diesem Fall wird die Kalibrierung wie in der Tuning -Referenz dokumentiert. Dies kann verwendet werden, um 16 MHz einen Optiboot -Chip zu erhalten, der 20 MHz fusioniert und umgekehrt.
Weitere Informationen zu den Geschwindigkeitsnoten des Herstellers finden Sie in Speed Grade Referenz . Beachten Sie, dass dies die Spannungen und Taktgeschwindigkeiten sind, bei denen es garantiert funktioniert. Diese Teile sind für die Verwendung in Anwendungen geeignet, bei denen ein unerwarteter Fehler einer bestimmten Beschreibung eine Gefahr für Personen oder Eigentum darstellen könnte (denken Sie an Autos, Industriegeräte, Flugzeuge, Kernreaktoren - Orte, an denen Menschen sterben könnten, wenn das Teil nicht funktioniert) und i Glauben Sie auch für militärische Anwendungen, die aus dem entgegengesetzten Grund ähnliche Zuverlässigkeitsanforderungen haben. Typische Hobby -Nutzer werden über das Potenzial für Stabilitätsprobleme weitaus entspannter sein, wobei die Abstürze kaum mehr als ein Ärgernis sind und die Extreme der Teile der verlängerten Temperatur weit über das hinausgehen, was wir jemals brauchen würden. Unter der Annahme, dass das Board eine wasserdichte Beschichtung hatte, sollte thermisch ein Teil des N -Klassens in der Lage sein, gemäß der Geschwindigkeitsqualität in einem Topf mit kochendem Wasser zu funktionieren. Und das ist nur der N-Spec. Der F-Spec sollte gut zu 125 sein!
Es wurde festgestellt, dass die verlängerten Teile besser übertaktet, was sinnvoll ist. Ein Teil, der bei 125 ° C mit 20 MHz läuft
Ab Version 2.4.0 bieten wir jetzt eine Option "Offizielles Microchip Board". Dies tut nichts Besonderes als das Definieren LED_BUILTIN
als die Pin, die die LED auf dieser Platine anstelle von A7 hat, und das Definieren eines Makro PIN_BUTTON_BUILTIN
definiert als Pin mit der Benutzertaste und das "Upload" mit dem Non nicht -optiboot -Version Verwenden Sie immer den Onboard -Programmierer/Debugger. Tools -> Programmierer werden nur für "Burn Bootloader" und "mit dem Programmierer hochladen" verwendet. Im Falle des ATTINY416 Xplained Nano wird auch die Version des Bootloaders ausgewählt, die die alternativen Pins für den seriellen Port verwendet. Sie verwendet die alternativen Pins für USAT0 nicht automatisch, als ob Sie seriell.swap (1) noch gemacht hätten. - Funktionen zur Unterstützung des Standardtauschs von seriellen Stiften werden in einem zukünftigen Update vorhanden sein, zusammen mit einigen anderen Änderungen in der Maschinerie, die dem Pinswap -Mechanismus zugrunde liegt, der hoffentlich auch die Flash -Nutzung verringert.
Wie oben erwähnt, funktionieren diese möglicherweise nicht korrekt auf 32-Bit-Linux-Plattformen. Dies ist jenseits meiner Kontrolle; Ich baue keine Avrdude -Binärdateien auf, ich übernehme diese Aufgabe nicht auch. Ich habe schon zu viele.
blink()
mehr Blitz auf das xplainierte Mini gegen das Xplained Pro?Beide haben das gleiche ATTINY817! Wie können sie anders sein?
Aus dem gleichen Grund, warum Blink mehr Flash nimmt, wenn Sie es ändern, um PIN_PC0
zu verwenden, im Gegensatz zu PIN_PB4
: PC0, wird auf dem Xplained Mini ein PWM -Pin verwendet, während PB4, der vom Xplained Pro verwendet wird, nicht. Da dies der einzige Pin ist, an dem DigitalWrite () verwendet wird . Der Unterschied verschwindet, wenn DigitalWrite () auch auf einem PIN verwendet wird, der PWM auf beiden Geräten unterstützt (was zu einem höheren Flash -Gebrauchsergebnis führt), oder wenn digitalwrite () durch digitalwastfast () ersetzt wird, die weniger Blitz verwendet (jedoch angenommen, Sie haben gewonnen Nennen Sie es nicht auf einem Pin, der PWM ausgibt).
Wenn ein Updi -Programmierer verwendet wird, um Code hochzuladen Die integrierten Konfigurationsoptionen werden festgelegt. Sofern nicht bezeichnet wird, stimmt das Verhalten immer mit dem ausgewählten Tools -Menü überein. Zusammenfassend werden diese wie folgt behandelt:
WDTCFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
BODCFG will not be changed - not safe, you could set the BOD level to 4.3 on a 3.3v system, and then it would need to get > 4.3v applied to reprogram it. If it is on the same circuit board as parts that would be damaged, this is a difficult situation to recover from.
OSCCFG will be set
TCD0CFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
SYSCFG0 will not be changed - not safe
SYSCFG1 will be set
APPEND will not be changed - it is not configured by megaTinyCore. There is insufficient demand to justify the development effort.to make use of this as DxCore does
BOOTEND will be set
LOCKBIT will not be changed - it is not configured by megaTinyCore; supporting the lockbits presents several additional complications, and commercial users with need of this facility are unlikely to be using the Arduino IDE to program production units.
BODCFG
ist nicht sicher, da das Einstellen dieser auf eine höhere Spannung als die Board läuft und es ermöglicht, die Platine zu "abziegeln", bis eine höhere Betriebsspannung geliefert werden kann. Dies könnte besonders umständlich sein, wenn es auf die gleiche PCB wie Geräte gelötet wird, die diese Spannungen nicht tolerieren.
SYSCFG0
ist nicht sicher, da hier RSTPINCFG
lebt. Wenn Sie dies ändern, können Sie das Board nicht durch HV -Updi -Programmierung unprogrammierbar lassen, und nicht jeder hat einen HV -Updi -Programmierer. In Zukunft, wenn/wenn ein Programmierer, der HV -Updi -Funktion garantiert, die als Programmierer ausgewählt werden kann (dh, wird es möglich, eine Tools zu erstellen -> Programmiereroption, die nur mit HV -Programmierern funktioniert). Diese Sicherung wird bei der Verwendung automatisch festgelegt dieser Programmierer.
Infolgedessen in 2.2.0 und später müssen Sie beim Hochladen mit Updi nicht mehr zwischen 16 MHz und 20 MHz abgeleitet werden, um zwischen 16 MHz und 20 MHz abgeladen zu wechseln
Dieser Kern verwendet immer die Link -Zeit -Optimierung, um die Flash -Verwendung zu reduzieren. Alle Versionen des Compilers, die die Teile von TinyAVR 0/1/2 -Serie unterstützen, unterstützen auch LTO. Daher müssen sie nicht optional gestaltet werden, wie es bei Attinycore geschehen ist. Dies war eine enorme Verbesserung der Codesize, wenn sie eingeführt wurde, normalerweise in der Größenordnung von 5 bis 20%!
Diese Teile haben alle eine große Anzahl von analogen Eingängen-DA und DB-Serie haben bis zu 22 analoge Eingänge erst unterstützt, wenn MVIO ausgeschaltet ist). Sie können wie bei einem normalen AVR mit analogRead()
gelesen werden, und wir sind standardmäßig eine Auflösung von 10 Bit; Sie können mit analogReadResolution()
in die gesamte 12-Bit () wechseln und die erweiterten analografischen Funktionen verwenden, um automatisch überabtastete, dezimierte Messwerte für eine höhere Auflösung zu erhalten und differentielle Messungen zu ergreifen. Es gibt 4 interne Spannungsreferenzen in 1.024, 2.048, 4.096 und 2,5 V sowie Unterstützung für die externe Referenzspannung (und natürlich VDD). ADC -Messwerte werden dreimal schneller als ein klassischer AVR eingenommen, und diese Geschwindigkeit kann erneut verdoppelt werden, wenn das, was Sie messen, eine geringe Impedanz ist, oder die Stichprobenzeit um einen Faktor verlängert, um Quellen mit sehr hoher Impedanz zu lesen. Dies ist in der analogen Referenz detailliert.
Die Teile der DX-Serie verfügen über einen 10-Bit-DAC, der eine reale analoge Spannung erzeugen kann (beachten