Wenn man PIC uC verwendet hat, wie anders ist es, zu einem anderen uC wie beispielsweise Arduino oder ARM zu migrieren?

Es scheint ziemlich viele Anbieter zu geben, die uC herstellen, und einige uC sind beliebter als andere, zum Beispiel Arduino und PIC wegen ihrer niedrigen Kosten und zahlreichen Funktionen und ARM wegen seiner hohen Leistung. Was ich wissen möchte, ist, wie unterschiedlich es ist, zu ARM uC zu wechseln, nachdem man einen PIC verwendet und seine Peripherie und die Sprache/den Compiler (z. B. C++ mit CCS C Compiler) verstanden hat.

Haben ARM, Arduino oder andere uC von TI und andere vielleicht weniger bekannte Namen einen großen Unterschied in ihren Möglichkeiten im Vergleich zu einem PIC?

Lassen Sie mich die Frage einfacher stellen. Angenommen, ich habe ein Projekt mit PIC durchgeführt, das seine Timer-, ADC-, Komparator-, SPI- und I2C-Peripheriegeräte verwendet. Angenommen, ich möchte insgesamt zu einem neuen Mikrocontroller wechseln, sagen wir ARM oder Arduino. Ich verstehe, dass das Toolset (IDE), das mit diesen anderen Mikrocontrollern zum Kompilieren von Code verwendet wird, anders sein soll, aber was muss man lernen, bevor man ein solches Projekt auf andere Mikrocontroller migrieren kann? Ich bin mir nicht sicher, ob ARM- und Arduino-Mikrocontroller solche Peripheriegeräte haben oder ob sie mehr Peripheriegeräte haben, die nicht in PIC gefunden werden. Ich habe irgendwo gelesen, dass ARM auch eine Grafik-Engine hat, es sah sicher aus wie ein seltsames Blockdiagramm des Prozessors.

Ich vermute, dass man eine neue Fülle von Funktionen und Methoden lernen muss, um ISR usw. zu schreiben, aber ich bin mir nicht sicher über die vollständige Liste, die meiner Meinung nach nicht sehr lang ist.

Es ist unfair, einen Mikrocontroller wie PIC oder ARM mit Arduino zu vergleichen. Arduino ist ein ganzes Ökosystem, das Hardware, Software (Bibliotheken) und eine IDE umfasst. Es wäre besser, es mit AVR zu vergleichen, dem nackten Mikrocontroller, der auf Arduino verwendet wird. Außerdem muss man mit dem ARM-Mikrocontroller vergleichen, nicht mit dem ARM-SoC (System on Chip). Das SoC implementiert tatsächlich Dinge wie eine GPU, tatsächlich ist es ein ganzer Computer, auf dem häufig Linux ausgeführt wird.
Ich fand den Wechsel von PIC zu ARM zunächst etwas beunruhigend, weil ich mit der PIC-Architektur und den Namenskonventionen bestens vertraut war. Nachdem ich mich in ARM vertieft hatte, fand ich es wirklich ziemlich vergleichbar, und ich fühle mich jetzt mit beiden sehr wohl. Der Unterschied wird IMHO sehr schnell transparent.

Antworten (3)

Alle Mikrocontroller können in einer C-ähnlichen Sprache programmiert werden, alle haben die gleichen grundlegenden Peripherietypen und vergleichbare Kerne, was die Funktionen betrifft. Wenn Sie im Bereich der Echtzeit-MCUs bleiben, ist es ziemlich einfach, zwischen ihnen zu wechseln.

Die wohl größten Unterschiede liegen einfach in den Eigenheiten der Tools. Wenn Sie es gewohnt sind, vorprogrammierte Bootloader in Ihren AVRs zu haben (bis hin zu vorprogrammierten USB-Bootloadern in den -U-Teilen), haben Sie möglicherweise Probleme, einen kompatiblen JTAG-Programmierer für bestimmte ARM-Chips kaufen zu müssen. Wenn Sie an die umfangreichen Debugging-Funktionen von JTAG-fähigen Chips gewöhnt sind, kann es ein kleiner Kulturschock sein, zum Inbound-Debugging in Low-End-PICs und AVRs zurückzukehren. Aber das ist etwas, woran man sich gewöhnt hat, nachdem man eine Toolchain eine Weile verwendet hat. Außerdem sind bei einigen Chips erhebliche Kosten mit der Verwendung ihrer Tools verbunden, z. B. Freescale und Renesas.

Scheuen Sie sich nicht, ab und zu einen anderen Chip zu wählen und lernen Sie, damit zu arbeiten. Es wird Ihren Blick erweitern und Sie in die Lage versetzen, in Zukunft optimalere MCUs zu verwenden

Nachtrag: Dies gilt nicht wirklich, wenn Sie zu Nicht-Echtzeitprozessoren wie der ARM A-Serie, x86 und Cell wechseln. Diese sind auf niedrigem Niveau sehr schwer zu programmieren, Werkzeuge sind teuer und die Chips sind schwer zu bekommen und zu implementieren.

Was bedeutet hier Nicht-Echtzeitprozessor? Ich kenne harte Echtzeit-Soft-Echtzeit- und Nicht-Echtzeit-Betriebssysteme, aber keine Prozessoren.
Es ist ein Prozessor, der ausschließlich mit einem Nicht-Echtzeit-Betriebssystem verwendet wird. Echtzeitprozessoren hingegen werden häufig ganz ohne Betriebssystem oder möglicherweise mit einem sehr Bare-Metal-Echtzeit-Betriebssystem verwendet.

Zuerst ein paar Begriffe aufräumen.

Arduino ist eine Reihe von Entwicklungsboards, die sich hauptsächlich um einen Atmel AVR-Mikrocontroller (typischerweise der ATMega328) drehen. Es produziert nicht den Mikrocontroller. Denken Sie, Arduino ist wie Dell, sie nehmen verschiedene Teile und produzieren ein vollständiges Produkt. Vergleichbare PIC-Entwicklungsboards sind die Parallax Basic Stamps und sogar PICAxe (PIC-Chips mit einem proprietären Basisemulator)

ARM ist eine Art Architektur, keine bestimmte Reihe von Mikrocontrollern. Es ist wie bei x86-Prozessoren. Und ARM-basierte Mikrocontroller sind normalerweise 32-Bit oder höher und können kaum als Mikrocontroller bezeichnet werden, genauso wenig wie ein x86-basiertes IC. Mit ARM steigen Sie in Mikroprozessoren, SBCs und vollwertiges Computing ein.

Mehrere Unternehmen stellen ARM-Chips her, darunter Atmel, TI, NXP (Phillips), Freescale (Motorola), Broadcom, AMD, Samsung usw.

Microchip hat keine ARM-basierten Chips, aber sie haben PIC32s (MIPS-basiert), die technisch mit ARM konkurrieren, aber nicht wirklich. Es ist schwer, jemals ein Verbraucherprodukt mit einem darin zu finden.

Wenn Sie sagen, dass Sie an PICs gewöhnt sind, werden die meisten Leute annehmen, dass Sie PIC16/18 und kleiner meinen. Vergleichbare (und Verbraucher/Bastler bekannte) beliebte Chips mit PICs wären die verschiedenen MSP430-Linien von TI, die ATtiny/ATMega-Linien von Atmel und Intel 8051-kompatible MCUs.

Als Analogie sind all dies Spielzeugautos im Vergleich zu ARMs Sportwagen in voller Größe.

(kleiner Nachtrag) PIC32 basiert auf dem MIPS-Kern der Firma MIPS, die man technisch gesehen als Konkurrent von ARM bezeichnen könnte.
Es gibt ARM-Chips, die definitiv Mikrocontroller sind. Nehmen Sie als Low-End einen LPC1114: 4k RAM, 32k Flash, kein externer Adress-/Datenbus.

Die meisten Unterschiede zwischen dem PIC und dem ARM stellen Ärgernisse dar, die der ARM beseitigt, aber es gibt ein paar Ausnahmen.

Auf den 18xx-PICs kann man LATxx- und TRISxx-Bits im Hauptleitungscode sicher lesen und schreiben und auch andere Bits desselben Ports in einem Interrupt schreiben. Auf ARM-Prozessoren ist das im Allgemeinen nicht sicher. Eine Anweisung wie: LATC |= 2;würde als einzelne Anweisung übersetzt. Das direkte Äquivalent eines typischen ARM PTC->PODR |= 2;würde zu einer Anweisungssequenz, die äquivalent ist uint32_t temp = PTC->PDOR; temp |= 2; PTC->PDOR = temp;. Wenn ein Interrupt, der zwischen der ersten und der dritten Anweisung dieser Sequenz auftritt, das PORTC-Ausgangsregister modifiziert, wird eine solche Modifikation durch die dritte Anweisung der obigen Sequenz rückgängig gemacht.

Um dieses Problem zu mindern, haben die meisten ARM-Varianten spezielle „Port Bit Set“- und „Port Bit Clear“-Adressen. Zum Beispiel könnte man verwenden, PTC->PSOR=2;um ein Bit von PORTC hoch zu zwingen, ohne irgendetwas anderes zu beeinflussen, oder PTC->PCOR=2;`, um ein Bit niedrig zu zwingen. Dieser Ansatz ist selbst dann sicher, wenn eine Interrupt-Routine versucht, ein anderes Bit auf den Port zu schreiben. Obwohl die meisten Teile eine solche Logik für das Hauptdatenausgangsregister bereitstellen, sind sie unglücklicherweise in ihrer Unterstützung für das Setzen oder Löschen einzelner Bits anderer E/A-Register inkonsistent.

Ein weiteres Detail, auf das Sie achten sollten, ist das Schlafen. Der Schlafmodus auf dem PIC ist ziemlich einfach; Während der ARM-Kern standardmäßig einen Schlafmodus unter allen ARM-Teilen unterstützt, bieten die meisten Anbieter zusätzliche Modi an, die erhebliche zusätzliche Stromeinsparungen bieten, aber nicht alle auf die gleiche Weise. Während der PIC im Allgemeinen mit jedem seiner asynchronen Interrupt-Eingänge aufgeweckt werden kann, scheinen viele ARM-Geräte separate Hardware für die Behandlung von Interrupts zu verwenden als für das Aufwachen aus stromsparenden Schlafmodi. Erwarten Sie, dass der Schlafmodus mit dem ARM viel schwieriger ist als mit dem PIC.