mikrocontroller.net

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


Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: xXx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal die Forensuche benutzt?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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

...

Autor: Jörg (Gast)
Datum:

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

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ????

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.