Forum: Mikrocontroller und Digitale Elektronik LPC2294 integrierter Zähler


von Hotte M. (marvinthevirus)


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

von Frank N. (arm-fan)


Lesenswert?

>gibt es beim LPC 2294 eigentlich einen intregierten Zähler

Schon mal das Datenblatt befragt?

von Hotte M. (marvinthevirus)


Lesenswert?

Ja habe ich. Nur bin ich mir nicht ganz sicher ob das Count Control 
Register(CTCR) einfach ein Zähler ist denn ich extern beschalten kann, 
oder ob dieser nur in Verbindung mit dem Timer läuft. Deshalb meine 
allgemeine Frage!

MFG
Hotte

von Robert T. (robertteufel)


Lesenswert?

Der LPC2294 hat keinen externen Zaehleingang, der LPC2294/01 sollte aber 
einen haben, wenn ich mich richtig erinnere.

Gruss, Robert

von Hotte Meyer (Gast)


Lesenswert?

Hallo Robert,

so etwas habe ich auch gelesen. Aber wie kann ich dem Chip entnehmen ob 
es ein LPC2294/01 ist oder ein LPC2294?

von ARM-Fan (Gast)


Lesenswert?

>Aber wie kann ich dem Chip entnehmen ob es ein LPC2294/01 ist
>oder ein LPC2294?

Draufschau'n!

von Gast (Gast)


Lesenswert?

wie wärs mit dem auslösen eines externen Interuptes bei Flanke oder 
Pegel, damit dann einen Zähler bedienen oder so?

von Hotte Meyer (Gast)


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

von Hotte Meyer (Gast)


Lesenswert?

@ Robert

Beim LPC2294/01 habe ich zwar das Erratasheet gefunden, aber niergens 
ist von einem Zähler erwähnt. Wäre verdammt freundlich wenn du noch 
genau wüßtest wo ich die Anleitung dafür finden würde.

MFG
Hotte

von Gast (Gast)


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.

von Hotte Meyer (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.