LPC2294 integrierter Zähler

OP #1069376
Lesenswert?

Hallo Leute,

gibt es beim LPC 2294 eigentlich einen intregierten Zähler der zum 
Beispiel eine steigende Flanke erkennt und diese dann zählt?
Ich möchte gerne von außen kommendes Signal zählen lassen und mit einer 
Start-Stop Funktion diesen Zähler starten und stoppen und später den 
Wert ausgeben.
Man kann nartürlich auch dieses per Handprogrammieren und in einer 
if-Anweisung auf high-Pegel abfragen. Aber lieber wäre mir eine Fuktion 
wie z.Beispiel der Timer nur halt als Zähler.
Danke schon mal für eure Mühe im voraus.

MFG
Hotte
Gast #1078182
Lesenswert?

@ARM-FAN

Ist ja schon gut. Habe nicht begriffen, dass die Zeile darunter erst 
aussagt um welchen es sich handelt. Musste erst wieder das Erratasheet 
suchen wo folgendes steht:

Identification
The typical LPC2294/01 devices have the following top-side marking:
LPC2294xxxxxx
/01
xxxxxxx
xxYYWW R
Gast #1078518
Lesenswert?

Sieh dir mal das CTCR Register an. Da kann man zwischen Timer
und Counter Mode wählen. Im Counter Mode zählen die Timer je
nach Konfiguration bei steigender/fallender/beiden Flanken
eines externen Signals an den CAPxx Pins.
Dabei ist es egal ob /01 oder nicht.
Gast #1079201
Lesenswert?

Hallo Leute,

hab mir noch mal das Hardware-Manuel durchgelsen. Ich hab jetzt mit dem 
T0CTCR Register einen Counter aktiviert. Dieser zählt auch, aber nicht 
100% konstant. Ich habe eine geringe Abweichungen zwischen meinen 
Zählwerten. Zudem wollte ich gerne, dass er noch einen Interrupt 
auslöst. Dieses passiert allerdings auch nicht. Kann sich jemand den 
Code ansehen und mir sagen wo mein Fehler liegt?
1
#include <stdio.h>                  // standard I/O .h-file           
2
#include <LPC22XX.H>                // Header-Datei LPC2294 einbinden
3

4
long volatile zaehlwert;
5
long volatile zaehlreg;
6

7

8
__irq void tc0 (void) 
9
{
10
  zaehlwert = zaehlwert++;
11
  T0IR        = 1;                            
12
  VICVectAddr = 0;                            
13
  IOCLR0 =0x00000100 ; 
14
}
15

16
void init_timer (void) 
17
{
18
    PINSEL0 |=(1<<9);  //P0.4 auf CAP0 PIN9 auf eins - PIN8 auf Null
19
  PINSEL0 &=~(1<<8);
20
  zaehlwert = 0;
21
  
22
//  T0CCR = 1;
23
//   T0IR =  0x10;    // Interrupt wenn cap0 Ereignis erkennt
24
  T0TCR =2              
25
  T0CTCR = 5;  // Zähler für steigende Flanke 
26
  T0TCR = 1;  // Timer0 aktiviert
27
  
28
    VICVectAddr2 = (unsigned long)tc0; 
29
    VICVectCntl2 = 0x20 | 4;                 
30
    VICIntEnable = 0x00000010;                 
31
}
32

33
int main ()
34
{
35
  zaehlreg = 0;
36
  init_timer();
37
  IODIR0 = 0x00000100;        // LED Port 8 aktiviert
38
  IOSET0 =0x00000100 ; 
39
  
40
  while(1)
41
  {
42
    zaehlreg = T0TC;
43

44
  }
45
}

Schon mal vielen Dank im Vorraus. Könnte echt Hilfe gebrauchen.

MFG
Hotte

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren