mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2294 integrierter Zähler


Autor: Hotte Meyer (marvinthevirus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank N. (arm-fan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibt es beim LPC 2294 eigentlich einen intregierten Zähler

Schon mal das Datenblatt befragt?

Autor: Hotte Meyer (marvinthevirus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robert Teufel (robertteufel)
Datum:

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

Gruss, Robert

Autor: Hotte Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ARM-Fan (Gast)
Datum:

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

Draufschau'n!

Autor: Gast (Gast)
Datum:

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

Autor: Hotte Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hotte Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hotte Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

#include <stdio.h>                  // standard I/O .h-file           
#include <LPC22XX.H>                // Header-Datei LPC2294 einbinden

long volatile zaehlwert;
long volatile zaehlreg;


__irq void tc0 (void) 
{
  zaehlwert = zaehlwert++;
  T0IR        = 1;                            
  VICVectAddr = 0;                            
  IOCLR0 =0x00000100 ; 
}

void init_timer (void) 
{
    PINSEL0 |=(1<<9);  //P0.4 auf CAP0 PIN9 auf eins - PIN8 auf Null
  PINSEL0 &=~(1<<8);
  zaehlwert = 0;
  
//  T0CCR = 1;
//   T0IR =  0x10;    // Interrupt wenn cap0 Ereignis erkennt
  T0TCR =2              
  T0CTCR = 5;  // Zähler für steigende Flanke 
  T0TCR = 1;  // Timer0 aktiviert
  
    VICVectAddr2 = (unsigned long)tc0; 
    VICVectCntl2 = 0x20 | 4;                 
    VICIntEnable = 0x00000010;                 
}

int main ()
{
  zaehlreg = 0;
  init_timer();
  IODIR0 = 0x00000100;        // LED Port 8 aktiviert
  IOSET0 =0x00000100 ; 
  
  while(1)
  {
    zaehlreg = T0TC;

  }
}

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

MFG
Hotte

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.