www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mit 8052 Frequenz erzeugen


Autor: Norbert L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin allerseits,

ich muss an einen Portpin vom ADuC814(8052core) eine Frequenz wie folgt
ausgeben:

1. Frequenzbereich von 1200Hz bis 1600Hz, variabel über Software.
2. Die Lowphase muss immer konstant ca.350µsec sein.
3. Die Frequenz wird folglich nur über die Highphase gesteuert, und
zwar im Bereich von 475µsec(für 1200Hz) bis300µsec(für ca.1600Hz).
4. Es muss Timerinterrupt gesteuert sein, damit das Hauptprogramm wenig
gestört wird.

Nun hab ich keinen Plan wie ich die Timer konfiguieren soll.

Kann mir jemand einen Tipp zum prinzipiellen Vorgehen geben?
Vielen Dank!

Gruß Norbert

Autor: schudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norbert,

du kannst wie folgt vorgehen:

- Richte einen Timer ein, mit einem Zeitwert, der ein gemeinsames
Vielfaches mit deinen Referenzwerten hat, z.B. 5us oder 25us (nicht zu
klein, da sonst zu hohe Prozessorbelastung).

- Dann zählst du je eine Zählvariable für die Low- und die Highphase
bei jedem Timerinterrupt hoch und vergleichst, ob dein gewünschter
Zeit-Sollwert erreicht ist.

- Wenn ja, schaltest du den Port-Pin entsprechend high oder low.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde es soweit möglich, mit der Timer-Hardware machen.
Ganz so stecke ich nicht mehr in der 8052-Archtektur drin, aber
ungefähr so:
Timer 2 Betriebsart reload
Beim Timerüberlauf wird automatisch der in RCAP2 stehende Wert als
neuer Timeranfangswert benutzt.
Die ISR macht nun nichts anderes, als jeweils 2 verschiedene Werte nach
RCAP2 zu schreiben. und einen Portpin zu toggeln.

PORT_PIN=!PORT_PIN;
if (!PORT_PIN) RCAP2=puls_low; //Konstante 350µs
   else RCAP2=puls_high      //Variable für high puls

Nun kannst du jederzeit vom Hauptprogramm aus neue Werte nach puls_high
schreiben, alles andere läuft automatisch.

Autor: Norbert L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe. Damit kann ich mir was drunter vorstellen.

Schönen Gruß   Norbert L.

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, bei den LPC900 Controllern kannst du eine genau Frequenz ausgeben
indem du den Timer auf Auto Reload stellst und die Option Toggle T0 /
bzw. T1 on Timer Overflow einstellst!

Autor: akw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, bei den LPC900 Controllern kannst du eine genau Frequenz
ausgeben
indem du den Timer auf Auto Reload stellst und die Option Toggle T0 /
bzw. T1 on Timer Overflow einstellst!

Aber warsch. net mit variabler High/Low Phase oder?

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.