STM8S Discovery PWM

OP #3730047
Lesenswert?

Hallo!

Ich habe mir vor kurzem ein STM8S Discovery-Board gekauft.
(µC: STM8S105C6T6)

Momentan arbeite ich an einem Programm, dass an einem Port 
hintereinander unterschiedliche PWMs ausgibt.
z.B.
1) 60s lang: Perdiodendauer: 280µs ; Pulsedauer:   3µs
2) 60s lang: Periodendauer: 1,2ms  ; Pulsdauer:  450µs
3) 10s pause

Mein Plan war, einen Timer zu erstellen, der jede µs einen Interrupt 
auslöst.
In der Interrupt Service Routine arbeitet eine State-Machine, welche 
einen Zähler hinaufzählt und damit die vergangene Zeit bestimmt.
Daraus wird dann die PWM generiert.

Da ich einer absoluter ST-Neuling bin und mit den Konfigurationen der 
Register meine Schwierigkeiten habe, wollte ich mal nachfragen, ob 
jemand mal etwas ähnliches programmiert hat bzw sich bei den Registern 
auskennt.
Die Dokumentation in den Datenblättern ist meiner Meinung nach nicht 
besonders genau - jedenfalls wurde ich nicht ganz schlau daraus.

Danke im Voraus!
LG,
Peter
Gast #3730068
Lesenswert?

Jede us einen Interrupt? Ich glaube, Du überforderst Deinen STM etwas. 
Für solche Aufgaben gibt es Hardware-PWMs. Nimm einen Timer, der 
komplett selbstständig eine PWM erzeugt. Und einen 2.Timer, der Dir alle 
Sekunde einen Interrupt generiert. In diesem zählst Du bis 60, änderst 
Dann die PWM-Parameter, zählst nochmal 60s, schaltest die PWM ab, zählst 
nochmal 10s, und schaltest dann die PWM-Parameter des ersten Mals wieder 
ein.

Gruß, Stefan
OP #3733510
Lesenswert?

Hallo!

Danke für eure Antworten!

Eine weitere Frage habe ich dennoch.
In der StandardLib gibt es die Funktion "GenerateEvent".
Ich konnte nirgends ein "ClearEvent" oder ähnliches finden.

Ich würde gerne mitzählen, wie oft der Capture Compare Event 
(TIM2_EVENTSOURCE_CC1)  ausgelöst wird, damit ich nach einer gewissen 
Zeit auf die zweite PWM umschalten kann.

LG
Gast #3734290
Lesenswert?

Hat mir damals beim Einstieg sehr geholfen:
http://benryves.com/tutorials/stm8s-discovery/

Die STM Libs sind nur begrenzt verwendbar.
Schnapp Dir das Datenblatt und los gehts:
- Konfiguration Taktgeber
- CPU CLK
- Peripherie CLK
- Timer wählen und konfigurieren (nicht alle timer können alles)
- Rückladewert des Timers in Abhänggeit des Peripherie CLKs eintragen
- Aufzurufende Routine in entsprechender Stelle der STM8S_it.c eintragen
- in main() Timer IRQ freigeben, Timer starten
Nun sollte alle xx ms die Routine angesprungen werden.

Will man besondere Eigenheiten der Hardware für sich nutzen geht der Lib 
schnell die Puste aus.
Um zu begreifen was genau die Lib eigentlich tut muss man öfters in den 
code schauen, ins Datenblatt schauen, Register durchspielen, den Kopf 
kratzen, dreimal laut fluchen und das dann gleich per Hand erledigen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren