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
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
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
Hier lesen: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00296680.pdf
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.