Forum: Mikrocontroller und Digitale Elektronik STM8S Discovery PWM


von Peter N. (customer23)


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

von Stefan (Gast)


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

von Peter N. (customer23)


Lesenswert?

Hallo Stefan!

Danke für deinen Input.
Du hast recht, wenn ich drüber nachdenke ist ein Interrupt pro µs
doch etwas viel...

Hast du mit diesem µC schon gearbeitet?
Weißt du, welche Register zu setzen sind?

LG,
Peter

von GB (Gast)


Lesenswert?


von Peter N. (customer23)


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

von Michael K. (Gast)


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.

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.