Die schnellste Zeit, in der ein PIC einen Pin setzen und löschen kann

Was ist die schnellste Zeit, in der ein Mikrocontroller (in diesem Fall PIC16) eingestellt und gelöscht werden kann? Es wird durch die Häufigkeit definiert, aber ich kenne die Formel nicht, um die schnellste Zeit zu berechnen, in der ein einzelner Pin gesetzt und gelöscht werden kann.

Angenommen, die Frequenz (XTAL) beträgt 20 MHz und es gibt keine Verzögerungen dazwischen, wie lange dauert es, bis der Pin gesetzt und gelöscht wird?

Zum Beispiel:

RB2=0;  
RB2=1;  
RB2=0;

Wann ist RB2 hoch?

Antworten (2)

Dies hängt von dem jeweiligen PIC ab, da einige PICs einen Befehl pro Zyklus ausführen können und andere beispielsweise einen Befehl für jeweils vier Zyklen des Systemtakts ausführen.

Obwohl das OP um Informationen zu einem 20-MHz-PIC16 gebeten hat, zeige ich, da dies bereits angesprochen wurde, Informationen für die schnellste Version in allen verschiedenen Familien von PICs. Wo es signifikante Unterschiede zwischen Teilen in verschiedenen Unterfamilien gibt, wie PIC24F/PIC24EP und PIC32MX/PIC32MZ, zeige ich beide getrennt.

Ich habe die Zahlen erhalten, indem ich auf die Digi-Key- Website gegangen bin, nach Teilen für jede Familie gesucht und dann die höchste Geschwindigkeit ausgewählt habe. Ich habe dann ein Datenblatt zu einem Beispielteil hochgezogen, das auch den MIPS-Wert verifiziert hat.

Family       Clock    Speed    I/O toggle time

PIC10F      16 MHz    4 MIPS    250 ns
PIC12F      20 MHz    5 MIPS    200 ns
PIC16F      20 MHz    5 MIPS    200 ns  <--- example in the original question
PIC16F      48 MHz   12 MIPS     83 ns
PIC18F      64 MHz   16 MIPS     62 ns
PIC24F      32 MHz   16 MIPS     62 ns
PIC24EP     70 MHz   70 MIPS     28 ns
dsPIC30     40 MHZ   30 MIPS     33 ns        
dsPIC33EP   70 MHz   70 MIPS     28 ns
PIC32MX    100 MHz  100 MIPS     10 ns
PIC32MZ    200 MHz  200 MIPS      5 ns

Wenn jemand Korrekturen an dieser Tabelle vornehmen möchte, zögern Sie bitte nicht, sie zu bearbeiten.

MIPS sind Millionen Anweisungen pro Sekunde. Die E/A-Umschaltzeit ist die Zeit in Nanosekunden (ns), die der E/A-Pin entweder ein- oder ausgeschaltet wäre, und wird als eine Million geteilt durch die MIPS-Zahl berechnet.

Alle diese Prozessoren haben die Fähigkeit, einen I/O-Pin in einem einzigen Befehl ein- oder auszuschalten. Die Anweisungen selbst variieren je nach Prozessor.

In Abschnitt 18.3 eines Datenblatts der dsPIC30-Familie wird gezeigt, wie sie auf 30 MIPS kommen – nicht von den 40 MHz, sondern unter Verwendung des internen Takts.
Danke. Ich hätte an die PLL denken sollen. Diese Berechnungen können manchmal etwas seltsam werden – wie beim PIC24EP mit einem internen Takt von 7,37 MHz landete ich bei 69,6 MIPS.
Ihre Tabelle ist für die EP-Teile nicht ganz korrekt. Schreibvorgänge in Nicht-CPU-Spezialfunktionsregister dauern zwei Befehlszyklen, nicht 1 wie bei den meisten anderen PICs. Ein 33EP mit der maximalen Geschwindigkeit von 70 MIPS kann nur alle 28,6 ns so etwas wie ein "BSET PORTB, #2" ausführen. Auch einige PICs haben PWM-Generatoren, die Impulse erzeugen können, die kürzer als ein Befehlszyklus sind. Es ist nicht alles ganz so einfach wie dein Tisch.
@OlinLathrop Danke für deine Korrektur. Ich hätte es besser wissen müssen, ich benutze ein 24EP in einem aktuellen Projekt. Ich verwende auch einen PIC32MX (80 MHz, ich habe keinen der neueren 100 MHz), und der kann einen E / A-Befehl pro Zyklus ausführen.

Wenn Sie einen 20-MHz-Quarz verwenden, bedeutet dies, dass Sie 5 MIPS (5 Millionen Anweisungen pro Sekunde) haben, da die 20 MHz intern durch 4 geteilt werden.

Das bedeutet, dass eine Einweisung dauert 1 S 5000000 = 200 N S .

Sie können in der Montage erreichen, was Sie wollen, wie folgt:

bcf PORTB, 2   // Sets the pin state to 0
bsf PORTB, 2   // Sets the pin state to 1
bcf PORTB, 2   // Sets the pin state to 0

Dies zeigt, dass das Ändern des Pin-Status eine Anweisung erfordert, daher beträgt die Mindestzeit, die der Pin eingeschaltet ist, 200 ns (wenn Sie ihn direkt wieder löschen).

Ich habe nur Erfahrung mit PIC16 und PIC18, bei dsPIC, PIC32 und allen anderen Varianten bin ich mir nicht sicher. Aber im Allgemeinen, wenn Sie die Anzahl der Anweisungen pro Sekunde kennen (Sie können sie aus der Oszillatorkonfiguration berechnen), können Sie die minimale Einschaltzeit berechnen, wie Sie es sagen.

Danke für die schnelle Antwort. Ich werde es als Antwort akzeptieren. Ich verwende PIC16 im aktuellen Projekt. Beginnt die dritte Zeile des Codes mit bcf oder bsf ?
@Triak hilft gerne. Bitte hetzen Sie nicht mit dem Akzeptieren der Antwort, niemand hat es eilig, und wenn Sie die Antwort nicht so schnell akzeptieren, werden Sie mehr Aufmerksamkeit (und möglicherweise bessere Antworten) auf Ihre Frage lenken. Sie können Antworten, die hilfreich waren, auch jederzeit positiv bewerten.
Seltsamerweise arbeitet der PIC10 mit einem Befehl pro Zyklus. Der PIC18 ist wie der PIC16 (ein Befehl pro vier Zyklen), und der PIC24 und PIC32 sind beide ein Befehl pro Zyklus. So kann der PIC32MX bei 80 MHz Pins in 12,5 ns nach oben und unten umschalten - ich habe es auf einem Oszilloskop beobachtet.
@tcrosley Es tut mir leid, dass Sie Ihre Antwort gelöscht haben. Wir hätten dies zu einer allgemeinen Frage zu den Mindestunterrichtszeiten in verschiedenen Zweigen machen sollen, und Sie hätten sie viel besser beantworten können.
Während ich meine Antwort schrieb, bemerkte ich, dass das in einem Kommentar erwähnte OP einen PIC16 verwendete (der in der ursprünglichen Frage nicht erwähnt wurde), sodass meine Antwort nicht anwendbar war. Ich habe die Spezifikationen für die anderen Haupt-PIC-Familien in einem Kommentar oben angegeben.
@tcrosley ja, vielen Dank dafür. Ich hatte einfach das Gefühl, ich würde dir den Donner stehlen.
@tcrosley Es tut mir leid, dass ich die PIC-Klasse, die ich im Projekt verwende, nicht angegeben habe. Ich dachte, alle PICs funktionieren auf die gleiche Weise.
@tcrosley das pic10 (ich denke, du meinst pic10f200 usw.) ist ein 12-Bit-Kern, arbeitet also mit 4 Takten / Anweisungen, genau wie pic12 und pic 16 (12- und 14-Bit-Kerne).
@WoutervanOoijen ja, da habe ich mich geirrt - ich lösche meine Antwort und gebe (hoffentlich korrekte) Informationen zu allen PIC-Familien.
Großartig. Ich habe die Frage bearbeitet, um sie allgemein zu machen. @Triak, bitte akzeptieren Sie stattdessen tcrosleys Antwort, wenn er sie wiederhergestellt hat. Es wird für zukünftige Besucher hilfreicher sein.
Nur ein Gedanke, aber würden die Ausgangskapazität und die begrenzte Treiberstärke des Ausgangspins des Mikrocontrollers die maximale Frequenz auf etwas langsameres begrenzen als theoretisch erreichbar, wenn Sie nur die Taktgeschwindigkeit des Mikrocontrollers berücksichtigen?
@gbmhunter Es tut mir leid, ich würde es nicht genau wissen, obwohl es so klingt, als hätten Sie Recht. Aber das sollte eine eigene Frage haben ;-)