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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.