mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Signal Zählen


Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde auf meinem AT89S52 gerne den Counter Mode des Timer0 
verwenden.
Dazu habe ich mir das Datenblatt durchgelesen und folgende Einstellung 
getroffen:
///
sbit PIN=0xB3;
sfr led=0x80;
void main (void)

{
TMOD=0b00000100;//Timer 0, Gate0,Countermode, 16Bit-Mode(P3.4 wird 
gezählt)
TF0=0;//OF Flag
TH0=0x00;//Startwert auf Null setzen!
TL0=0x00;
TR0=1;
for(;;)
{

PIN=1;
led=TL0;

}
}
///
In meinem Hauptprogramm habe ich dann einfach in einer endlosschleife 
den Pin 3.4 auf 1 gesetzt.
Dann sollte ja ein auf masse legen des Pins in den TL0 geschrieben 
werden.
Und diesen wert wiederrum schreibe ich in mein port 0x80, woran leds 
hängen.

Tut sich aber leider nix.

Weshalb?

Gibt es sinnvollere Lösungen eine Zeit zu messen?
Also z.B. das Gating umstellen, sodass bei Positiver Flanke angefangen 
wird zu zählen und bei Negativer aufgehört wird?
Den Wert, den ich dann im Register stehen habe, also die gezählte Zeit, 
muss ich mir dann nurnoch so verwursten, dass sie korrekt angezeigt 
wird.
(Also nachschauen, wie lange man z.B. von 0x00-0xAB braucht).

Für Tipps bin ich danbar!

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne deinen C-Compiler zwar nicht, aber meiner (Keil µVision) kann 
keine binären Zahlen verarbeiten.
Also musst du
TMOD=0b00000100;
umformen.
TMOD=0x04;

Weiter weiß ich nicht, wie deine for-Schleife arbeiten soll.
Versuch doch mal
while(1)
{
  led=TL0;
}
anstatt von
for(;;)
{

PIN=1;
led=TL0;

}

Autor: Oliver D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, aber prinzipiell ist das doch korrekt "gedacht" oder?

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert dein Programm jetzt?
Was möchtest du denn genau machen? Einmal sagst du, du möchtest ein 
Signal zählen, woanders sagst du, du möchtest eine Zeit messen?!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Countermode werden die 1-0 Flanken am Takteingang gezählt.

Im Gatemode wird solange gezählt, wie der Gate-Eingang auf 1 ist.
Zusätzlich kann man noch einen externen Interrupt erzeugen lassen, wenn 
der Gateeingang auf 0 geht.


Was möchtest Du?


Peter

Autor: Oliver D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaalso,

ich habe ein TTL Rechteck Signal, dessen Frequenz ich bestimmen möchte.

Dafür gibt es ja mehrere möglichkeiten und ich suche eine möglichst 
genaue.
Was ich mir gedacht habe ist, 10ms lang Veränderungen auf einem Portpin 
zu zählen.
Dummerweise wird dabei aber nur die durchschnitts Frequenz angezeigt, 
wenn während der 10ms eine Veränderung auftritt.
Das möchte ich vermeiden und suche nach einer guten möglichkeit dazu.

Ich hatte mir gedacht z.B. einen Timer der Gategesteuert zählt, zu 
verwenden.
Bei Positiver Flanke am Gate, geht er an, und bei negativer aus. Die 
Zählzeit müsste ich dann mit 2 multiplizieren, da ich ja nur den "high" 
teil des signals habe und der low teil noch fehlt.
Glücklicherweise sind die beiden exakt gleich lang. Also x2 rechnen.


Naja, ein paar nette vorschläge wären dazu hilfreich...

gruß
Oliver D.

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.