mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer CAPTURE Interrupt LPC23xx.h


Autor: Mueller Best's (frankyfarell)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich versuche über Timer Capture siese Signal auszuwerten, ich will ein 
DC motor über Gabellichtschranke steuern uzw. Vorlauf,rücklauf, .dafür 
brauche ich den Timer Capture, kann mir bitte jemand helfen wir ich mich 
damit umgehen kann?
 - wie soll ich mein Timer so einstellen dass jeder 1,53ms ein abfrage 
ankommt?(über T1PR? oder wie? ich habe keine ahnung
 - wie solle ich nach diese abbildung mein Motor über timer Stopen, 
Vorfahren, rückfahren?

Danke
hier ist die quelleCode für timer1

 void Timer_init (void)
   {

//   PCLKSEL1 = 1<<4|1<<5;
             PINSEL1 = 0x00000000;
   PINSEL3 = 0x00000000;
   FIO2DIR |=1<<11|1<<12;
   FIO2CLR |=1<<11|1<<12;
                //Pclk to ??
   PINSEL3 |= (1<<4)|(1<<5)|(1<<6)|(1<<7);  //CAP1.0 and CAP1.1
   T1PR    = 0x00007530;   // Load prescaler for 1mSec   //or to 1mSec 
(Pclk)
   T1TCR   = 1<<1;                    //Reset Counter and Prescaler
             // generate interrupt on falling and rising edge of cap1.0 
and CAP1.1
   T1CCR   = 1<<0|1<<1|1<<2|1<<3|1<<4|1<<5;
            //Timer increment on Both edge on CAP input pin,CAP1.1 is 
sampled for clocking:
  // T1CTCR   = 1<<0|1<<1;//|1<<2;
   T1TCR  = 1<<0;            //Enable Timer
           //Set Timer0(CAP0) interrupt vector Addresse
   VICVectAddr5 = (unsigned long)Timer1_ISR;
   VICVectCntl5 = 0xE;             //Set Channel
              VICIntEnable = (1 << 5);//|(1<<26);
   }

int main (void)
{
      // long val = 0;
       Timer_init();                             /* Initializiere Timer 
*/
  while (1) {}//loop
}

void Timer1_ISR (void)__irq
{


   NewL1 = T1CR0 ;//save Capture valuer of Timer1 CAP1.0
   NewL2 = T1CR1 ; //save Capture valuer of Timer1 CAP1.1
  //Output doese Valuer
   FIO2SET  = 1<<NewL1;
   FIO2SET  = 1<<NewL2;
     T1IR |= 0x10;             // reset Counter
              VICVectAddr =0x00;            // Acknowledge Interrupt
}

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass den prescaler mal auf null gestzt (T1PR=0). Machst Du ja auch, 
nachdem Du ihn gesetzt hast (T1TCR = 1<<1) :O)

die Timerzeit wird mit einem Matchregister eingestellt.

T0MR0 = ((FOSC*PLL_M)/(1000))-1;
T0MCR = TxMCR_RESET_ON_MR0;

hier ein Beispiel:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.