Industriell

Verwendung von Timern in dsPic-Mikrocontrollern

Autor: Peter Berry
Erstelldatum: 11 Juli 2021
Aktualisierungsdatum: 16 November 2024
Anonim
Timer & PWM [06 | AVR - Mikrocontroller C] by Fusel
Video: Timer & PWM [06 | AVR - Mikrocontroller C] by Fusel

Inhalt

Der Autor schloss sein letztes Ingenieurjahrsprojekt mit den dsPic-Mikrocontrollern ab und erhielt umfassende Einblicke in diese Geräte.

Ein Timer-Modul ist ein wichtiges Peripheriegerät in einem dsPic-Mikrocontroller und kann in einer Vielzahl von Anwendungen verwendet werden.

In diesem Lernprogramm werden fertige C-Sprach-Codebeispiele verwendet, die in MplabX IDE codiert und auf einem Microchip dsPic30f4011-Mikrocontroller getestet wurden, um Sie durch den Prozess der Initialisierung und Konfiguration von Timern für Ihre dsPic-Anwendungen zu führen.

Einführung in das Timer-Modul in dsPic30f- und dsPic33f-Geräten

Das Timer-Modul in Geräten der dsPic30f-Serie enthält insgesamt fünf 16-Bit-Timer, nämlich:

  • Timer 1 bis 5.

In ähnlicher Weise enthält ein Gerät der dspic33f-Serie bis zu neun 16-Bit-Timer, nämlich:


  • Timer 1 bis 9.

Jeder dieser Timer ist abhängig von seinen besonderen Eigenschaften in drei Typen unterteilt: Typ A, Typ B und Typ C.

Zusammenfassung der besonderen Merkmale von Timern des Typs A, B und C.
* Bei Typ B wird die Synchronisation nach der Division durch den Pre-Scaler durchgeführt, und bei Typ C wird die Synchronisation vor der Division durch den Pre-Scaler durchgeführt.
* * Für einen dspic30f können Timer 2/4 p sein

Tippe ATyp - B.Typ - C.

Kann mit einem 32-kHz-Oszillator mit geringer Leistung betrieben werden.

Kann mit dem Typ-C-Timer verkettet werden, um einen 32-Bit-Timer zu bilden. * *

Kann mit dem Timer vom Typ B verkettet werden, um einen 32-Bit-Timer zu bilden. * *

Kann im asynchronen Modus mit externer Quelle ausgeführt werden.

-

Hat die Fähigkeit, eine A / D-Wandlung auszulösen.

Die externe Taktquelle kann mit der internen Uhr synchronisiert werden

Die externe Taktquelle wird immer mit der internen Uhr synchronisiert. *


Die externe Taktquelle wird immer mit der internen Uhr synchronisiert. *

Timer-Betriebsmodi in dsPic30f- und dsPic33f-Geräten

Jeder Timer kann nicht nur in Typ A, B oder C gruppiert werden, sondern auch in vier verschiedenen Modi betrieben werden:

  1. Timer-Modus
  2. Gated Timer-Modus
  3. Synchroner Zählermodus
  4. Asynchroner Zählermodus

Zusammenfassung der Timer-Betriebsarten.

Timer-ModusGated Timer-ModusSynchroner ZählermodusAsynchroner Zählermodus

Inkrementiert um eins bei jeder ansteigenden Flanke des Eingangstakts

Inkrementiert um eins bei jeder ansteigenden Flanke des Eingangstakts, solange das externe Gate-Signal am TxCK-Pin hoch ist

Inkrementiert um eins bei jeder ansteigenden Flanke des Eingangstakts

Inkrementiert um eins bei jeder ansteigenden Flanke des Eingangstakts

Interne Uhr wird verwendet

Interne Uhr wird verwendet


Die externe Uhr wird am TxCK-Pin verwendet

Die externe Uhr wird am TxCK-Pin verwendet

_

_

Externe und interne Geräteuhr werden synchronisiert

Externe und interne Geräteuhr sind nicht synchronisiert

Interrupt wird bei Periodenübereinstimmung generiert

Bei fallender Flanke des TxCK-Pins wird ein Interrupt erzeugt

Interrupt wird bei Periodenübereinstimmung generiert

Interrupt wird bei Periodenübereinstimmung generiert

Beispielcode zum Initialisieren eines Timers für dsPic30f und dsPic33f

void init_Timer (void) {T1CONbits.TON = 1; // Aktiviere das Timer Modul T1CONbits.TCKPS = 0; // Eingangstakt-Prescaler als 1: 1 auswählen T1CONbits.TGATE = 0; // Gate Time Accumulation Mode deaktivieren T1CONbits.TCS = 0; // Interne Uhr als Timer-Taktquelle auswählen T1CONbits.TSYNC = 0; // Externe Taktquelle bleibt nicht synchronisiert PR1 = 0xFFFF; }}

Allgemeine Vorgehensweise zum Initialisieren eines Timers in dsPic30f und dsPic33f MicroController

Das folgende allgemeine Verfahren kann befolgt werden, wenn ein Timer für eine beliebige Anwendung initialisiert wird:

  1. Entscheiden Sie, welchen Timer Sie verwenden möchten.
  2. Entscheiden Sie, ob ein 16-Bit-Timer oder ein 32-Bit-Timer erforderlich ist.
  3. Legen Sie den Timer-Betriebsmodus fest.
  4. Stellen Sie den Uhrenskalierer ein.
  5. Entscheiden Sie, ob ein Timer-Interrupt oder ein anderer besonderer Ereignisauslöser erforderlich ist.

1) Welcher Timer soll verwendet werden?

Jeder der Timer kann durch das TON-Bit im TxCON-Register aktiviert werden, wobei 'x' die Anzahl der Timer ist, die aktiviert werden sollen.

In unserem Beispielcode haben wir Timer 1 aktiviert, indem wir das TON-Bit im T1CON-Register auf 1 gesetzt haben.

2) 16-Bit-Timer oder 32-Bit-Timer?

Timer vom Typ B und Typ C können kombiniert werden, um als ein einziger 32-Bit-Timer zu arbeiten. In Kombination hat die Konfiguration des Typ-B-Timers Vorrang vor dem Typ-C-Timer.

  • In einem dsPic30f-Gerät können die Timer 2 und 3 in einem 32-Bit-Timer verkettet werden.
  • dsPic33f-Geräte verfügen über mehr als ein 32-Bit-Zeitgeberpaar, wobei die Zeitgeber 2/3, 4/5, 6/7 und 8/9 auch 32-Bit-Zeitgeberpaare bilden können.

Zu diesem Zweck sollte das T32-Bit im TxCON-Register eines Typ-B-Timers auf 1 gesetzt werden.

* x sollte nur ein Timer vom Typ B sein.

TxCON.T32 *Timer-Konfiguration

1

Verkettet mit seinem anderen Timer-Paar.

0

Funktioniert als unabhängiger 16-Bit-Timer.

3) Timer-Betriebsart

Der Timer-Betriebsmodus kann gemäß der folgenden Tabelle ausgewählt werden.

Auswahl des Timer-Betriebsmodus.
* Das TSYNC-Bit ist nur in einem Typ-A-Timer verfügbar. Typ-B / C sind standardmäßig synchronisiert.

BitnameBitwertAusgewählter Modus

TxCON.TCS

0

Timer-Modus

TxCON.TGATE, TxCON.TCS

1, 0

Gated Timer-Modus

TxCON.TCS, TxCON.TSYNC *

1, 1

Synchroner Zählermodus

TxCON.TSYNC

0

Asynchroner Zählermodus

4) Clock-Prescaler

Ein Taktvor-Skalierer kann verwendet werden, um die Frequenz zu erhöhen oder zu verringern, bei der die Taktquelle den Zeitbasiswert erhöht.

Sie kann mit Hilfe der folgenden Tabelle ausgewählt werden.

* x ist die Anzahl der Timer.

TxCON.TCKPS *Prescaler-Wert

3

1 : 256

2

1 : 64

1

1 : 8

0

1 : 1

5) Initialisieren Sie den Timer-Interrupt

Jeder Timer kann so programmiert werden, dass er einen Interrupt auslöst.

  1. Vergleichen Sie die Übereinstimmung zwischen dem Wert des Timer-Zählerregisters (TMRx) und des Periodenregisters (PRx).
  2. Erkennen einer fallenden Flanke im Gated Time Accumulation-Modus.

Dieser Interrupt kann mit Hilfe der folgenden Register und Bits in dsPic-Mikrocontrollern initialisiert werden.

Zusammenfassung der Bits, die zum Initialisieren des Timer-Interrupts verwendet werden.

BitnameRegister- und BitidentifikationWert

Interrupt Enable Control Bit

IEC0 / 1.TxIE

1 = Aktivieren 0 = Deaktivieren

Interrupt Flag Status Bit

IFS0 / 1.TxIF

Dieses Bit muss nach jedem Interrupt-Trigger in der Software zurückgesetzt werden

Interrupt Priority Control Bit

IPC0 / 1 / 5.TxIP

6 - 0 je nach Priorität

Dieser Beispielcode kann verwendet werden, um eine Interrupt-Serviceroutine für Timer 1 zu initialisieren. (Wählen Sie die Timer-Initialisierungsfunktion von oben aus und rufen Sie die Funktionen in main () entsprechend auf.)

Befolgen Sie die Anweisungen für Interrupts

Beispielcode zum Initialisieren des Interrupts in den Controllern dsPic30f und dsPic33f

void Interrupt_Init (void) {IEC0bits.T1IE = 1; IPC0bits.T1IP = 6; } void __attribute __ ((Interrupt, auto_psv)) _T1Interrupt (void) {// Dein Code hier IFS0bits.T1IF = 0; }}

Vollständiges Codebeispiel zum Initialisieren und Testen eines Timers und eines Timer-Interrupts für dsPic30f und dsPic33f

[Getestet vom Autor am: 22/09/2018]

Der folgende Code kann verwendet werden, um Timer 1 im Betriebsmodus 'Timer' zu initialisieren und zu testen. Es wird durch Einbeziehen der beiden oben angegebenen Codefragmente erstellt.

Dieser Code erzeugt einen Interrupt, wenn eine Vergleichsübereinstimmung zwischen dem Wert des PR1-Registers und den TMR1-Registern auftritt.

  • Der Interrupt wurde so programmiert, dass eine LED 10 Millisekunden lang blinkt.
  • Wert des PR1-Registers: 0x8FF4 wurde so eingestellt, dass alle 20 Millisekunden eine Vergleichsübereinstimmung erfolgt.

Daher sollte die LED 10 Millisekunden lang eingeschaltet sein (solange der Programmzähler in der Interrupt-Funktion bleibt) und weitere 10 Millisekunden lang ausgeschaltet sein, wenn der Programmzähler den Interrupt verlässt. Die Ausschaltzeit wird von Timer 1 gesteuert.

#define FCY 1842500 #include xc.h> #include delay.h> #include libpic30.h> #include p30F4011.h> _FOSC (CSW_FSCM_OFF & FRC); // Fosc = 7,37 MHz, interner schneller RC-Oszillator void init_Timer (void) {T1CONbits.TON = 1; // Aktiviere das Timer Modul T1CONbits.TCKPS = 0; // Eingangstakt-Prescaler als 1: 1 auswählen T1CONbits.TGATE = 0; // Gate Time Accumulation Mode deaktivieren T1CONbits.TCS = 0; // Interne Uhr als Timer-Taktquelle auswählen T1CONbits.TSYNC = 0; // Externe Taktquelle bleibt nicht synchronisiert PR1 = 0x8FF4; } void Interrupt_Init (void) {IEC0bits.T1IE = 1; IPC0bits.T1IP = 6; } void __attribute __ ((Interrupt, auto_psv)) _T1Interrupt (void) {_LATD0 = 1; __delay_ms (10); _LATD0 = 0; IFS0bits.T1IF = 0; } void main (void) {init_Timer (); Interrupt_Init (); während (1) {}}

Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.

Interessant Auf Der Website

Artikel Des Portals

So verbessern Sie Ihre 3D-Renderings
Computers

So verbessern Sie Ihre 3D-Renderings

M. T. Dremer i t ein autodidakti cher 3D-Kün tler. Er hat DAZ tudio vor mehr al acht Jahren entdeckt und rendert eitdem.Kun t i t ubjektiv. Man könnte ich einen Farbtupfer an ehen und agen: ...
Überlagern von Text auf Fotos in Adobe Photoshop
Computers

Überlagern von Text auf Fotos in Adobe Photoshop

Ich bin Web Marketing Manager, Grafikde igner, Webentwickler, Internet Marketing Manager und Eventfotograf.Haben ie jemal die e chönen Foto mit noch chöneren Zitaten und prüchen ge ehen...