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


von Stephan B. (s_bronco)


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?

von spess53 (Gast)


Lesenswert?

Hi

Controller? Timer?

Bei AVRs ist im allgemeinen kein Preload notwendig.

MfG Spess

von Stephan B. (s_bronco)


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.

von Flo (Gast)


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

von spess53 (Gast)


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

von Stephan B. (s_bronco)


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

von Stephan B. (s_bronco)


Lesenswert?

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

von spess53 (Gast)


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

von AVRuser (Gast)


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.

von Stephan B. (s_bronco)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.