Mit 8052 Frequenz erzeugen

Gast #322284
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
Gast #322285
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.
Gast #322286
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.
Gast #322289
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

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.