mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gleichzeitige Erzeugung von Frequenz und PWM


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board

ich versuche momentan ein Programm zu erstellen, das mit Timer 1 
(Frequenzerzeugung) und Timer 3 (PWM) realisiert wird. Das Programm habe 
ich zuerst mit Beispielprogramm zusammen aufgebaut und die erzeugten
Signale werden mit HIlfe von Oszi dargestellt. Es funktioniert bei 
Frequenzerzeugung aber nicht bei PWM.

Das Programm von Frequenzerzeugung :

// FRQ1: Frequenzerzeugung (16 Bit)
// Über den Ausgang wird eine Signal mit einer entsprechend 
eingestellter
// Frequenz ausgegeben.
// Über den Timer Prescaler wird das Teilungsverhältnis 
(Oszillatorfrequenz/ps/2)
// festgelegt.(14,7456MHz/ps/2)
/*
Vorteiler (prescaler)   Zeitbasis (Dauer eines Ticks)
PS_1    (1)    136 ns
PS_8    (2)  1,085 µs
PS_64   (3)  8,681 µs
PS_256  (4)  34,72 µs
PS_1024 (5)  138,9 µs
*/
void Frequenzerzeugung(void)
{
    Timer_T1FRQ(10,PS_1024);   // Der Timer erzeugt ein Signal mit
                             // Periode=34,72 µs*10=347,2 µs
    while (1);
}

Das Programm von PWM:

// PWM3: Pulsweitenmodulation
// Berechnung der Pulsweitenmodulation
// Timer_T3PWM(Par1,Par2,PS);
// Periode=Par1*PS/FOSC (100*64/14,7456MHz=434 µs)
// Pulsweite=Par2*PS/FOSC (25*64/14,7456MHz=108 µs)
// Über den Timer Prescaler wird das Teilungsverhältnis 
(Oszillatorfrequenz/ps)
// festgelegt. (14,7456MHz/ps)
/*
Vorteiler (prescaler)   Zeitbasis (Dauer eines Ticks)
PS_1    (1)   67,8 ns
PS_8    (2)  542,5 ns
PS_64   (3)   4,34 µs
PS_256  (4)  17,36 µs
PS_1024 (5)   69,4 µs
*/

// Dieses Demo Programm ist nur für Mega128
#ifdef MEGA32
#pragma Error "Timer3 nur für Mega128"
#endif

void PWM(void)
{
    Timer_T3PWM(100,20,PS_256);  // Berechnung siehe oben
    while (1);
}

und das Hauptprogramm:

void main(void)
{
    Frequenzerzeugung ();
    PWM ();
}

oder sollte ich mit Multithreading realsieren?

vielen Dank im Voraus.

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johannes

versuch es mal ohne die while(1) Schleifen in den Subroutinen!

Gruß
JJ

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo JJ,

es funktioniert. vielen Dank.

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.