Forum: Mikrocontroller und Digitale Elektronik PWM Signal mit ATtiny 13 (???)


von Jörg (Gast)


Lesenswert?

Hallo zusammen,

bin ein absoluter Rookie auf dem Gebiet der
Mikrokontrollerprogrammierung und arbeite mich gerade in deren
Funktionsweise ein. Nun möchte ich gerne mit einem ATtiny13 zwei PWM
Signale generieren, dass ganze soll in Assembler programmiert werden.
Kann mir evtl einer helfen bzw. hat jmd einen funktionsfähigen
Beispielcode ?
Wäre um jede Hilfe dankbar.

Vielen Dank im Vorraus.

Jörg

von xXx (Gast)


Lesenswert?

Schon mal die Forensuche benutzt?

von Hannes L. (hannes)


Lesenswert?

> Nun möchte ich gerne mit einem ATtiny13 zwei PWM
> Signale generieren, dass ganze soll in Assembler programmiert
> werden.

Der Tiny13 hat doch einen Timer mit 2 Compare-Einheiten, die direkt die
PWM-Ausgänge (OC0A, OC0B) schalten können. Einzelheiten findest du im
Datenblatt des Tiny13 ab Seite 55. Die Register und deren Bits sind ab
Seite 66 erklärt.

Wie du die einzelnen Bits konfigurieren musst (also welcher PWM-Mode),
ist von deiner konkreten Anwendung abhängig. Einen Motor kannst du im
Fast-PWM-Mode steuern, einen Servoimpuls erzeugst du am besten per
Software-PWM.

...

von Jörg (Gast)


Lesenswert?

@unbekannt: JA, die forensuche hab ich benutzt und alle beiträge bis
2003 durchforstet....

@HanneS: das datenblatt hab ich auch mehrfach gelesen. nur ist es so,
dass wenn man noch NIE etwas mit assembler programmiert hat, dann fällt
es schwer das sofort auf anhieb zu coden. von daher fragte ich nach
einem beispielprogramm....

von Hannes L. (hannes)


Lesenswert?

> nur ist es so,
> dass wenn man noch NIE etwas mit assembler programmiert hat, dann
> fällt
> es schwer das sofort auf anhieb zu coden. von daher fragte ich nach
> einem beispielprogramm....

Also wenn dir die Beispiele in der Codesammlung und im AVR-Tutorial
nicht zusagen oder nicht reichen, dann kannst du dich auch gern mal
hier umsehen: www.hanneslux.de/avr/
Mit Tiny13 habe ich zwar auch noch nichts gemacht, aber etwas Einblick
in AVR-ASM kannst du dort schon bekommen. Fang am besten hier an:
http://www.hanneslux.de/avr/divers/index.html

...

von Jörg (Gast)


Lesenswert?

Sehr feiner Link.
Vielen Dank.
Denke, dass mir das weiter helfen wird.
Allein schon die Erklärungen auf deutsch sind prima.

von Jörg (Gast)


Lesenswert?

Hab nun zwei PWM Signale generiert, die jeweils mit der Frequenz der
internen clk, sprich 37,5kHZ laufen.
Der nächste Schritt wäre nun die beiden PWM Signale versetzt
voneinander zu betreiben und eine gewisse Totzeit zwischen ihnen
herzustellen. Hat da evtl jemand einen Tipp für mich wie ich das mit
Assembler programmieren kann ?

von Jörg (Gast)


Lesenswert?

Es fehlt mir nur noch eine Totzeit zwischen den Signalen.
Hab da aber noch eine allgemeine Frage zum ATtiny 13. Er schwingt in
der Regel mit einer Frequenz von 9,6MHz. Ich habe mich nun schon für
den Fast-PWM Mode entschieden und erreiche damit eine Frequenz von etwa
37,5kHz. Würde aber gerne eine Frequenz von 50kHz haben. Ist das
überhaupt möglich ????

von johnny.m (Gast)


Lesenswert?

Schau Dir mal den Modus Fast PWM mit OCRA als TOP Value an (WGM Modus
Nr. 7). Damit kommste im Prinzip auch höher, allerdings dann mit
geringerer Auflösung. Sonst gibts bei 9,6MHz keine Möglichkeit.

von Jörg (Gast)


Lesenswert?

Das sieht dann nicht so gut aus, werde dann wohl auf einen anderen
ATtiny zurückgreifen müssen.
Hast du denn eine Idee, wie ich eine Totzeit zwischen meine PWM Signale
einbauen kann ?

von Rahul (Gast)


Lesenswert?

90°Phasenverschiebung könnte man dadurch hinbekommen, dass man in der
ISR des ersten Timers den 2. startet. Fällt natürlich flach, wenn man
nur einen Timer benutzt.

von Jörg (Gast)


Lesenswert?

Hab jetzt 180° Phasenverschiebung erzeugt, da dies für mein
Gegentaktsignal notwendig ist. Momentan habe ich allerdings einen
Tastgrad von 50%, sprich keinerlei Totzeit. Dies wäre nun noch
einzubringen, nur weiss ich noch nicht wie das zu implementieren ist.

von Rahul (Gast)


Lesenswert?

stimmt... müssen natürlich 180° sein...
Sonst müsste man die Startwerte der Timer (Low-Phase, wenn sie die
"Standby-Phase" ist) so wählen, dass die Totzeit erreicht wird.
Beim ersten Interrupt muß man sie dann auf die "richtige" Zeit
einstellen.

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.