www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fast PWM initialisieren


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi @all,

Habe ne kleine Frage: Ich verwende einen ATMega8 und bekomme nur ne PWM
mit 4kHz hin. Der Controller arbeitet mit dem internen Clock von 8MHz.
Daher mache ich entweder bei der "normalen" PWM was falsch oder ich
benötige die Fast PWM. Könnte mir bitte bei der initialisierung jemand
behilflich sein. Eine PWM mit 40-50kHz sollte ich erreichen.
MFG
Thomas

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja wie machst du den die PWM das wäre mal interessant ;)
mit 8Mhz kannst du (rechnerisch) bis zu 4mhz erreichen

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so habe ich die pwm initialisiert:

/* normale 8-bit PWM aktivieren ( nicht invertiert ),
     Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
  TCCR1A = (1<<COM1B1)|(1<<WGM10);

  /* Prescaler = 1 also CPU Takt */
  TCCR1B = (1<<CS10);

  // Alle Timer Interrupts deaktivieren
  //TIMSK &= ~0x3c;

OCR1BL = x;

in x schreibe ich einen von zwei AD-Wandlungen berechneten Wert. Umso
höher der Wert, umso größer soll die Einschaltzeit sein.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Läubi: PWM mit 1 Bit Auflösung, oder wie?!


Also mit ´ner vernünftigen Auflösung von 8Bit läuft ein PWM im Mega8
bei 8MHz gerade mal mit maximal 31.25 kHz (fclk / 256).

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso ein bit auflösung?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die 31,25 kHz würden mir für den Anfang vollkommen ausreichen.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Initialisierung ist insoweit richtig, wenn Du da eine PWM-Frequenz
im MHz-Bereich haben willst. Auf Seite 89 im Datenblatt steht, wie man
die Frequenz berechnet.

Ich persönlich habe bisher nur den Fast-PWM-mode genutzt. Mit denen
lässt sich auch einfacher arbeiten. Denn der Phase-Correct-Mode ändert
ja immer die Richtung des Timers, was beim FastPWM nicht so ist.

Was mir allerdings auffällt, dass Du nur den Low-Wert des
Counterregisters änderst und nicht das komplette Register.

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
loop:
sbi PORTD, 1
cbi PORTD, 1
jmp loop:

;)
1 Takt an, 1 Takt aus, 1 Takt branch sind Takt/3 oder seh ich das
falsch?
Ok nicht sehr sinnvoll aber ich weiß ja nicht was er vor hat :D

War auch mehr sone... naja kreative Art zu sagen er soll mal etwas mehr
infos rausrücken :D

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zwei AD-gewandelte Werte multipliziere ich miteinander. Umso höher der
Wert, umso größer soll die Einschaltzeit sein. Da das ganze dann einen
MOSFET (Tiefsetzstelle) ansteuert, sollte die PWM zwischen 30 und 50kHz
liegen. Mit der oben geposteten Initalisierung bekomme ich allerdings
nur 4kHz raus. Das verstehe ich nicht so wirklich.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Läubi:

Ein jmp braucht drei Taktzyklen. Wenn du einen rjmp draus machst,
werden es zwei.

@Ronni:

Warum sollte phase-correct schwieriger sein? Man wählt bei der
Initialisierung den phase-correct-Modus, der Rest ist dann gleich.

@Thomas:

Bei 8Mhz Takt sind bei fast-PWM mit 8 Bit maximal 31,25kHz PWM-Takt
möglich, bei phase-correct ist es die Hälfte. Bist du sicher, daß du
den Controller auf 8Mhz hochgetaktet hast?
Um die 40-50 kHz zu erreichen, müßtest du deinen Controller höher
takten - mindestens mit ca. 10Mhz.

Übrigens: Wenn du 8bit-PWM machst, warum nimmst du dafür eigentlich
nicht gleich den 8bit-Timer?

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre jetzt auch meine Frage gewesen, Timer 2 könnte das, aber sicher
hast Du schon alles an OC-Pin1B angeklemmt, auf jeden Fall mußt Du noch
Bit WGM12 in TCCR1A setzen. Damit hast Du dann schonmal die doppelte
Frequenz, weil das wäre dann 8-Bit Fast-PWM. Jetzt guckst Du nochmal
Deinen Prozessortakt an.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meinte WGM12 in Register TCCR1B!!!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
am internen Takt lags! Jetzt habe ich bei der normalen PWM 16kHz. Das
ist schon mal ganz ok. könnte ja jetzt einen externen quarzoszillator
mit 16MHz anlöten, dann hätte ich schon mal 32kHz. Bei der fast pwm
habe ich noch ein kleines problem: 33kHz habe ich, aber irgendwie
funktioniert das mit dem gewandelten adwert (der wert, den ich in x
schreibe) nicht so recht.

TCCR1B = 0x00;                   // stop Timer
TCCR1A = (1<<COM1B1)|(1<<WGM11);        // Prescaler = 1 also CPU Takt
TCCR1B = (1<<CS10)|(1<<WGM12)|(1<<WGM13);
//TIMSK &= ~0x3c;                // Alle Timer Interrupts deaktivieren
OCR1B = X;

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Öhem, wer hat denn gesagt, daß Du nun auch noch das WGM13 Bit in TCCR1B
setzen sollst? Damit läuft Dein PWM bis zum im OCR1A oder ICR1
enthaltenen Wert. Das willst Du doch nun wohl nicht wirklich , oder?!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt.danke für eure Hilfe. werd es morgen gleichmal testen.

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.