Signal Zählen

OP #827762
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!
Gast #827842
Lesenswert?

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

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

4
PIN=1;
5
led=TL0;
6

7
}
Gast #827921
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

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