mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ich such mich noch doofer, als ich schon bin. tiny2313 pwm C


Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frohes Wochenende! Draußen scheint die Sonne, und was mache ich?
Ich halte mich für zu blöd, um PWM nachzuvollziehen. Also das Prinzip
ist ja einigermaßen klar.

Ich weiß, die Rätsel tauchen hier oft auf, und es gibt dementsprechend
viele Threads mit Bascom, ASM, und C, im AVR-GCC-Tutorial wird die
Funktionsweise und die Register beschrieben, und schließlich und
endlich gibt es das Datenblatt.

Aber ich sehe die Parallelen irgendwie nicht (zu doof? zu blöd? :-).

Z.B. frage ich mich, wo ich überhaupt anfangen soll. Das Tutorial
versteckt das Thema PWM unter "DAC (Digital Analog Converter)" und
spricht vom  "16-Bit Zähler", im Datenblat zum tiny2313 taucht PWM
zum ersten Mal unter "8-bit Timer/Counter0 with PWM" auf.

Dann gibt es ungefähr vier verschiedene Modi, von denen ich nicht weiß,
ob ich sie möchte, viele Register, von denen ich nicht wirklich
verstehe, in welcher Reihenfolge ich sie definieren sollte (wird wohl
teilweise egal sein?), und keinen mir ersichtlichen Hinweis darauf, wo
das Signal eigentlich 'rauskommt.

Ich suche also im Grunde eine Anleitung/Übersicht for Dummies, die mir
erzählt nach welchen Kriterien und in welcher Reihenfolge ich die für
meinen Anwendungszweck geeigneten Modi in die passenden Register
schreibe, und wo dann das Signal rauskommt.

Und das möglichst kostenlos und im www. Ich bin so anspruchsvoll.

Hat jemand sowas schonmal gesehen oder weiß anderweitig Rat?

Ich habe vorerst keine großen Ansprüche an 'mein' Hardware PWM, und
möchte eigentlich nur mal sehen, ob wahlweise mein Piezo-Buzzer (OC0B)
bei 4KHz piepst, oder meine LEDs (OC1A,OC1B) dimmbar sind.
Die sind auch alle als Ausgang konfiguriert.

Danke, Leif

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"...ob wahlweise mein Piezo-Buzzer (OC0B) bei 4KHz piepst..."


Du solltest erstmal wissen, was eine PWM ist.

Frequenz erzeugen ist nämlich keine PWM !!!

Geht aber auch und zwar mit dem Toggle-Pin-Modus.


Und dann ist die Sache gar nicht so schwer. Ich gehe ins Datenblatt und
klappere dann jedes Timerregister durch, welche Bits ich wie setzen
muß.


Und was ist denn daran nicht zu verstehen, daß der 8Bit T0 nur 8Bit PWM
kann, der 16Bit T1 aber bis zu 16Bit ?


Immer ruhig Blut und einfach der Reihe nach.


Peter

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

danke für Deine Antwort.

Ich erwarte im Falle meines Piezo Buzzers nicht, daß ein Sinus
entsteht.  Aber wenn ich eine PWM-Frequenz von ca. 4KHz erzeugen kann,
mit 50% Duty-cycle, müsste ich doch schon was hören können, oder
nicht?

> Frequenz erzeugen ist nämlich keine PWM !!!

Kann man das wirklich so sagen?

> Und was ist denn daran nicht zu verstehen, daß der 8Bit T0 nur 8Bit
> PWM kann, der 16Bit T1 aber bis zu 16Bit ?

Gar nichts :-) Die Namen sind schon eindeutig, aber es hilft mir leider
nichts, wenn ich den 8-Bit'er nutzen möchte, im Tutorial aber vom 16
Bit'er die Rede ist, und vice versa.

> .. einfach der Reihe nach.

Genau das möchte ich ja, aber ich finde den Anfang nicht. Schön wäre
ein Kochrezept PWM, das die Möglichkeiten aufführt, und anhand dessen
ich notwendigen Entscheidungen und Schritte entsprechend meiner
Anwendung zu treffen lernen kann.

Ich weiß nicht, wie ich es anhand des Datenblattes machen kann. Um den
Anfang zu finden, enthält es zuviele Informationen, die ich als
Anfänger nicht richtig bewerten kann.

Und die Codebeispiele erläutern höchstens nur das, was gemacht wird,
und nicht, was in einem anderen Fall gemacht werden könnte.

Ich suche weiter, aber wenn Dir noch was einfällt, wie ich den Anfang
finden könnte, würde ich mich freuen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Aber wenn ich eine PWM-Frequenz von ca. 4KHz erzeugen kann,"

Kannst du nicht, die PWM Frequenz ist automatisch festgelegt durch den
Vorteiler und die Auflösung (Stufenzahl) der PWM.

Eine PWM erzeugt Amplituden und keine Frequenzen.

Natürlich kann man mit entsprechend hoher PWM-Frequenz z.B. einen 50Hz
Sinus per Amplitudentabelle erzeugen.


"Kann man das wirklich so sagen?"

Nein, kann man nicht, sondern muß man, sonst ist es falsch.

Die PWM-Frequenz ist nicht das Ziel sondern ein (meist) unerwünschter
Nebeneffekt des PWM-Prinzips und deshalb wird sie auch ausgefiltert
(Tiefpaß).


"Genau das möchte ich ja, aber ich finde den Anfang nicht."

Nun, wenn Du eine 8Bit PWM willst, fängst Du mit dem Kapitel über T0 an
bzw. bei über 8Bit eben mit T1.


Aber wenn Du eine Rechteckfrequenz erzeugen willst, nimmst Du den
CTC-Mode und den Toggle-Pin-Mode.


Peter

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke..so langsam blick ich durch -l

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
! Ich erzeuge erfolgreich einen Ton (980Hz) mittels PWM und T/C 0.
Meine LEDs kann ich dimmen, und morgen/nachher werde ich rausfinden,
wie ich mein Programm noch steuern kann, wenn die Timer schon benutzt
werden. :-)
Und bei Gelegenheit spendiere ich dem Wiki ein PWM Kochrezept für
Anfänger. N8!

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>! Ich erzeuge erfolgreich einen Ton (980Hz) mittels PWM und T/C 0.

Genau das richtige für'n Wahlsonntag, wa? ;-)

Kannst Du in wenigen Stichworten beschreiben, wie Du den Ton erzeugst?
Hintergrund: T/C0 ist gar nicht PWM-fähig!  Möglicherweise verwendest Du
hier den Begriff PWM für etwas, das gar keine PWM ist, d. h.
vielleicht gibt es hier noch eine Unklarheit zu beseitigen.

>Meine LEDs kann ich dimmen,

Das deutet allerdings auf eine "echte" PWM hin.

>wie ich mein Programm noch steuern kann, wenn die Timer schon benutzt
>werden. :-)

Richtig, diese Frage will beantwortet sein.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> T/C0 ist gar nicht PWM-fähig!

Also bei mir sagt das Datenblatt was anderes. Wo hast du diese
Information her?

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Fehler, hatte den ATmega8 im Kopf. Sorry! (T/C0 beim ATmega8 ist
tatsächlich nicht PWM-fähig, nur T/C1 und T/C2).

>Meine LEDs kann ich dimmen,

Ja, alles klar. Du hast mit dem PWM-fähigen T/C0 des ATtiny2313 eine
echte PWM erzeugt, mit dieser die LED(s) betrieben und ihre Helligkeit
durch Variation der pulse width gesteuert.  Sehr gut.

Autor: Jörn G. aus H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schritt Nummer eins sollte immer sein, darüber nachzudenken, was man
eigentlich genau will. Wie soll das Signal am Ausgang aussehen?
Was will man am Signal verändern können (1-zeiten, 0-zeiten,
frequenz,...).
Vielleicht einfach mal aufmalen, wie es aussehen soll.

Danach dann erst das Datenblattkapitel durchgucken und dann ruhig auch
mal was wegblättern - man braucht nicht immer alles zu verstehen.

Einfacher ist es auf jeden Fall immer (und dringend anzuraten!) mit
einem kleinen AVR zu beginnen - so ist z.B. der ATtiny13 sehr
geeignet.

Man muß ihn auch nicht unbedingt nutzen, nur eben mit dem sein
Datenblatt anfangen, anstatt gleich ins ATmega128 Datenblatt zu gucken
und vor lauter Funktionen sofort zu verzweifeln!!

Wenn man dann in dem beschränkteren Funktionsumfang das gewünschte
gefunden hat und grob den Sinn der Register, die wichtigsten Modes,
TOP, usw verstanden hat, dann ist es ein leichtes, genau dasselbe auch
beim ATmega128 oder ähnlich einzustellen.

Auf diese Weise müßt ihr nicht selber das wichtige vom unwichtigen
trennen, und es ist nicht immer alles gleich 3 mal vorhanden, sondern
es gibt nur eine PWM!

jörn

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fast hätte ich geglaubt, ich habe das Unmögliche geschafft!

Aber danke für das Loben etwas nicht außergewöhnlichen! Allerdings
laufen die LEDs mit Timer 1.
Ich habe aus irgendeinem Grund gedacht, daß ich jeden beliebigen PWM
Pin (der in Wirklichkeit ein OC Pin ist) mit 'der PWM Funktionalität'
nutzen kann..und so sorg- und arglos meine Schaltung gebaut :-)

Aber nachdem das bei mir reingegangen ist, hat auch das Anpassen des
Codes aus dem Tutorial funktioniert (LEDs), und etwas später dann mit
Timer 0.

Ist tatsächlich nicht so schwer, wenn man's nur verstanden hat! Und
weil einem als Anfänger die Zusammenhänge nicht so klar sind, habe ich
angefangen (als Ergänzung zum GCC-Tutorial) eine kleine
Anleitung zum Verwenden der PWM für Anfänger wie mich
zusammenzustellen. Ist noch lange nicht fertig, aber falls das mit
gleichzeitigem Editieren kein Problem ist (ich mache jetzt weiter,
während ich auf Hilfe hoffe), seid ihr herzlich eingeladen, meine
Fehler rot anzustreichen!

http://www.mikrocontroller.net/articles/AVR_PWM

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörn,

danke für die Tipps!

Autor: leif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das Hoffen auf Hilfe bezieht sich auf
http://www.mikrocontroller.net/forum/read-1-235092.html

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.