mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM - Bascom; kann ich PRELOADen?


Autor: Stephan B. (s_bronco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gern eine PWM mit 25KHz erzeugen, PWM an sich ist klar.

Nur, komm ich bei 16MHz Quarz nur auf ca 7800KHz bei 8bit, ich will aber 
25KHz.

Mit 8bit, Prescale 8, PreLoad 173 komm ich auf 1,219% pro step ab 173 
bis 255 100%
also repräsentiert der Preload von 173 = 0% PWM bzw 100%, und 214 = 50%.

Meine Frage ist jetzt, kann ich da überhaupt preloaden? oder läuft der 
Timer im PWM Modus immer von 0 hoch?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Controller? Timer?

Bei AVRs ist im allgemeinen kein Preload notwendig.

MfG Spess

Autor: Stephan B. (s_bronco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atmega324, Timer1 und Timer2

nur mal um mein Verständniss zu überprüfen:
pro Takt Zählt der Counter um 1 hoch, 256 Takte ein Zyklus/ Puls für 
8Bit Counter.
also maximal erreichbare Frequenz für PWM bei uC@16MHz = 62,5KHz?
bei Prescale 8 = 7812,5KHz?
oder blick ichs doch ned, dachte eigentlich Verstanden zu haben wie das 
funktioniert.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prescaler heißt, dass die Eingangsfrequenz geteilt wird.

Prescaler 8 :
der Timer wird mit 16MHz / 8 = 2 MHz getaktet, also ist die Frequenz der 
Überläufe bei 8 bit (256 Takte) 2MHz / 256 ungefähr 8 kHz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>...blick ichs doch ned, dachte eigentlich Verstanden zu haben wie das
>funktioniert.

Na ja, nicht ganz.

Wenn du auf deinen 25kHz bestehst, hast du 2 Möglichkeiten

-passenden Quarz nehmen.

-PWM mit verkleinerter Auflösung.
 Bei den Timer-Mode 5/7 (Timer 0/2) oder den Timer-Mode 8/9 oder 14/15
 (Timer1) lässt sich die Auflösung über ein Register (OCRx/ICRx) 
einstellen.
 Mit einem Top-Wert von $4F (Prescaler () bekommst du genau deine 25kHz.
 Beim Timer1 und Prescaler = 1 geht auch eine höhere Auflösung (Top 
$27F).

MfG Spess

Autor: Stephan B. (s_bronco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, für die Antworten.

es müssen nicht exakt 25KHz sein, +-4KHz ist laut Spezifikation drin.
Ich Teste das ganze Prog im Mom. auf einem ATmega32, Angela liefert die 
324 erst diese Woche irgendwann...

Quintessenz ist, Preload geht.
Ich habe nur keine Ahnung wie der richtige Bascom Befehl dazu lautet 
(Preload womöglich?), und muß ich den nach jedem Puls neu setzen oder 
bleibt der gesetzt?
Oder muß ich das direkt in ein Register schieben?
Bei dem Timer0 den ich als Zeitbasis mit 10ms (+0,16% oder so) verwende, 
muß ich bei jedem Interrupthandling den Preload neu setzen

@ Flo:
mit ungefähr 8 kHz meinst du bestimmt die 7812,5KHz die ich errechnet 
hatte...

mfg sB

Autor: Stephan B. (s_bronco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FEHLER: nicht 7812,5KHz sondern 7812,5Hz, da war wohl ein Kilo zuviel, 
sry

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Quintessenz ist, Preload geht.

Wozu? Preload ist notwendig, wenn der Timer nur auf einen 'Overflow' 
reagieren kann. Die Timer des Atmega324 haben aber die Möglichkeit den 
Wert vorzugeben, ab dem der Timer wieder mit 0 anfängt. Damit ist ein 
Preload überflüssig.
Woher kommt diese Idee mit dem Preload bei AVRs überhaupt?

MfG Spess

Autor: AVRuser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

spess53 schrieb:
> Die Timer des Atmega324 haben aber die Möglichkeit den Wert vorzugeben, ab
> dem der Timer wieder mit 0 anfängt.

Allerdings; auch der CTC-Modus eignet sich sehr gut, um eine PWM zu 
erzeugen (die dann natürlich nicht mehr genau 8 Bit Auflösung hat, 
sondern weniger).

In deinem Fall wäre der CTC-Modus mit Prescaler 4 und Reload-Wert von 
159 (also 160 Schritte) geeignet; das ergibt sogar genau die 25kHz 
PWM-Frequenz.

Den dafür nötigen BASCOM-Aufruf weiss ich nicht genau; aber auch mit 
BASCOM kann man die Timer-Register direkt beschreiben und damit die 
Konfiguration "von Hand" festlegen (setzt natürlich Lesen des 
Datenblatts voraus) ...
Der PWM-Wert (zwischen 0 und 159) wird ins Register OCR0B geschrieben; 
der PWM-Pin ist dementsprechend OC0B.

Autor: Stephan B. (s_bronco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, Klatsch (HandtrifftStirn)
Enstschuldigt, bin wohl irgendwo wichtiges draufgestanden..., schäm

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.