Forum: Mikrocontroller und Digitale Elektronik PWM Frequenz ATTiny85


von Burak K. (burak_k)


Lesenswert?

Guten Abend,
ich versuche aktuell einen PIN am Attiny85 mit einer PWM Frequenz von ca 
200Hz einzustellen.

Ich habe online viel gelesen, jedoch verstehe ich nicht ganz was ich da 
Code mäßig abtippen muss.

Kann mir da jemand mit dem Code helfen und evtl. auch erklären ?

Hauptsächlich denke ich sollte eine Veränderung des Prescalers reichen 
und das am besten an Timer1, da ja millis und so weiter von Timer0 
abhängig sind.

Vielen Dank für eure Zeit!

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Vielleicht möchtest du das Datenblatt des Tiny85 befragen.
Ich glaube kaum, dass hier irgendjemand viel mehr über den Tiny weiß, 
als da drin steht.

Burak K. schrieb:
> da ja millis und so weiter von Timer0
> abhängig sind.
Arduino?
Die Antwort heißt wohl, ja...

Und dennoch:
Möchtest du abweichen, dann Datenblatt!

von Christian S. (roehrenvorheizer)


Lesenswert?


von m.n. (Gast)


Lesenswert?

Burak K. schrieb:
> Ich habe online viel gelesen, jedoch verstehe ich nicht ganz was ich da
> Code mäßig abtippen muss.

Soweit will ich es nicht treiben. Aber wie man niedrige Frequenzen mit 
hoher Auflösung und variablem Tastverhältnis erzeugen kann, kannst Du 
hier sehen und vielleicht auch verstehen: 
http://mino-elektronik.de/Generator/takte_impulse.htm

von Falk B. (falk)


Lesenswert?

Burak K. schrieb:
> Guten Abend,
> ich versuche aktuell einen PIN am Attiny85 mit einer PWM Frequenz von ca
> 200Hz einzustellen.

Hier wird das gemacht, old school mit direktem Registerzugriff.

> Ich habe online viel gelesen, jedoch verstehe ich nicht ganz was ich da
> Code mäßig abtippen muss.

Soso, abtippen. Die meisten Leute wollen eher verstehen, was dabei 
abläuft.  Das "Abtippen" ist die allerkleinste Arbeit.

Beitrag "Re: Terminator-LED"

von launcher (Gast)


Lesenswert?

Abtippen ist gegenüber Copy&Paste schon eine Entwicklung!?

von Stefan F. (Gast)


Lesenswert?

launcher schrieb:
> Abtippen ist gegenüber Copy&Paste schon eine Entwicklung!?

Ja sicher, die anderen gucken nur noch Youtube Videos :-)

von Peter D. (peda)


Lesenswert?

Die Registerbeschreibung im Datenblatt sollte alle Fragen beantworten. 
Such Dir einen PWM-Mode raus und stelle dann den Prescaler so ein, daß 
200Hz rauskommen.
Wenn es genau 200Hz sein sollen, mußt Du den Endwert der PWM verkürzen. 
Ansonsten nimm einfach den Prescaler, wo bei 8Bit (Endwert = 255) 
200Hz..400Hz rauskommen.

von Burak K. (burak_k)


Lesenswert?

Vielen Dank erstmal.

Ne ne ich will wirklich das Thema schon verstehen. Abtippen ist ein 
doofes Wort dafür.

Was ich hauptsächlich auch meine ist das ich die Syntax nicht ganz 
verstehe.

Hab mir das Datenblatt angeschaut, jedoch merke ich das ich mit so etwas 
noch nie gearbeitet habe.

Ich programmiere echt viel aber nicht auf Registerebene.

von Stefan F. (Gast)


Lesenswert?

Burak K. schrieb:
> Was ich hauptsächlich auch meine ist das ich die Syntax nicht ganz
> verstehe.

Die Grundlagen der Programmiersprache kannst du zum Beispiel hier gut 
lernen: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Ich empfehle Dir, auf einem PC zu üben und erst dann Mikrocontroller zu 
programmieren. Wenn ich unsicher bin, mache ich das heute noch so mit 
einzelnen Programmteilen - vor allem bei C++ wo ich noch etwas unsicher 
bin.

Darüber hinaus gibt es einige Spezialitäten auf Mikrocontrollern. Dazu 
würde Dir die Artikelsammlung als Einstiegspunkt empfehlen: 
https://www.mikrocontroller.net/articles/Kategorie:Avr-gcc
und die Doku der AVR libc: 
https://www.nongnu.org/avr-libc/user-manual/pages.html

Alles, was da steht, trifft auch auf Arduino zu, weil Arduino darauf 
aufbaut. Auch ich habe mich vor ein paar Jahren darum bemüht, eine 
Einsteiger-Anleitung zu schreiben, die deutlich tiefer geht, als fertige 
Module zusammen zu stecken und fertige Libraries zusammen zu klöppeln: 
http://stefanfrings.de/mikrocontroller_buch/index.html
Dort wird viel mit dem Datenblatt gearbeitet, ich denke, das wird für 
Dich hilfreich sein. PWM wird in Band 3 Kapitel 7.3 thematisiert, auch 
deine Sache bezüglich der Festlegung einer bestimmten Frequenz. Aber 
fange bitte vorne an, sonst verstehst du nur die Hälfte.

Des Weiteren bekommst du hier am ehesten Hilfe, indem du konkrete Fragen 
stellst. Was verstehst du denn "an der Syntax" nicht?

> Ich programmiere echt viel aber nicht auf Registerebene.

Wenn das so bleiben soll, dann musst du dich auf die Basics beschränken, 
die im Arduino Framework vorgesehen sind. Frage dich selbst: Will ich 
für immer nur fertige Legosteine zusammen stecken oder bearbeite ich sie 
mit Säge, Bohrer, Kleber, Feile, etc. Mein Sohn hat schon sehr früh 
angefangen, seine Legosteine zu modifizieren und ich finde das völlig in 
Ordnung.

von Georg M. (g_m)


Lesenswert?

Stefanus F. schrieb:
> Ja sicher, die anderen gucken nur noch Youtube Videos :-)

https://www.youtube.com/watch?v=O_Yqf_cugwE

von Einer K. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Die Grundlagen der Programmiersprache kannst du zum Beispiel hier gut
> lernen: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Davon möchte ich vorsichtig abraten...
1. es ist ein C, kein C++ Buch. Hilft also in der Arduino Welt kaum 
weiter
2. es sind da einige grobe Schnitzer drin, die einem gründlich den Tag 
versauen können, wenn man sich darauf verlässt und so das falsche lernt

Das meiste, in dem Buch, ist völlig ok.
Aber die paar kritischen Stellen, sind richtig böse.
Es ist also eher ein Buch, um die Wachsamkeit zu schulen, nicht so sehr 
um die C++ Kenntnisse zu verbessern.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> 1. es ist ein C, kein C++ Buch. Hilft also in der Arduino Welt kaum
> weiter

Ja für Arduino muss man eigentlich erst C und dann C++ obendrauf lernen. 
Kannst du dafür passende Literatur empfehlen? Die zwei Bücher, mit denen 
ich es gelernt habe, gibt es nicht mehr zu kaufen.

von Oliver S. (oliverso)


Lesenswert?

Na ja, die Fragestellung hat jetzt mal genau überhaupt nichts mit C++ zu 
tun. Dem TO ist vermutlich mit jedem Buch, das irgendwelche 
Programmiergrundlagen behandelt, geholfen.

Vielleicht hilft aber auch das hier:

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Zähler_des_AVR

Oliver

von Einer K. (Gast)


Lesenswert?

Oliver S. schrieb:
> Na ja, die Fragestellung hat jetzt mal genau überhaupt nichts mit C++ zu
> tun. Dem TO ist vermutlich mit jedem Buch, das irgendwelche
> Programmiergrundlagen behandelt, geholfen.
Vermutlich... stimmt das.

Aber dennoch ist es sicherlich kein Fehler, genau die Sprache zu lernen, 
welche man auch verwendet.

Stefanus F. schrieb:
> Kannst du dafür passende Literatur empfehlen?
Ein bisschen sollt man darauf achten, dass min. C++17 mit erfasst wird.
Arduino ist offiziell noch auf C++11.
Aber C++17 wird in Bälde unterstützt.(bei mir jetzt schon)

Also der erste Vorschlag:
Die Literatur vom C++ Erfinder!
Leider etwas trocken und unübersichtlich.
Es werden recht tiefgreifende Grundlagen erwartet, sonst schwer zu 
verstehen.
Wenn man schon in etwa weiß, wie der Hase läuft, dann ist man damit gut 
bedient.

Und der Zweite:
Dieses ist da schon eher für Anfänger geeignet.
http://www.cppbuch.de/
Die erste Hälfte kümmert sich um OOP und sonstige C++ Grundlagen.
Die zweite Hälfte um die STL und andere Erweiterungen.

Die STL ist für 8Bit µC eher uninteressant.
Bei den 32Bittern steht sie meist/immer zur Verfügung

Ansonsten gibts noch einige weiter führende Bücher zum Thema Template 
Design, und auch zu den OOP Design Pattern.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ein bisschen sollt man darauf achten, dass min. C++17 mit erfasst wird.

Ich denke nicht, dass man die ganzen neuen Features alle kennen und 
mitmachen muss, um erfolgreich programmieren zu können.

Die Sprache hatte schon vor 20 Jahren alles, was man braucht. Seit dem 
kamen Sachen hinzu, die einem das Leben erleichtern sollen, aber es geht 
auch ohne sie.

von Einer K. (Gast)


Lesenswert?

Hach...
Wenn man schon lernt, dann doch bitte das "bessere".
Ein veraltetes Buch zu kaufen, nunja....

Aber an sich stimmt zumindest, dass es einige Zeit dauert, bis die 
Änderungen in den Köpfen angekommen ist.

Es steht nicht zu erwarten, dass so nützliche (C++11) Features, wie 
Range-Based-For-Loops, die vielfältige using Anwendung, auto, constexpr 
usw. wieder abgeschafft werden.

Ja, auto ist so ein Kamerad, welcher etwas mit Vorsicht zu genießen ist.
auto wurde in C++17/C++14 nochmal deutlich erweitert.

auto und decltype() können einem viel Template Gewurstel ersparen

Stefanus F. schrieb:
> Die Sprache hatte schon vor 20 Jahren alles, was man braucht.
Das möchte ich nicht unterschreiben!

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wenn man schon lernt, dann doch bitte das "bessere".
> Ein veraltetes Buch zu kaufen, nunja....

Die alten Bücher über C/C++ können gar nicht veralten, weil die 
Eigenschaften der Sprache nie verändert wurden (mal abgesehen von ganz 
wenigen Sonderfällen). Es sind nur neue Features hinzu gekommen.

>> Die Sprache hatte schon vor 20 Jahren alles, was man braucht.
> Das möchte ich nicht unterschreiben!

Jeder darf natürlich eine andere Meinung haben.

Mir ist nicht bekannt, dass ich in den vergangenen 25 Jahren jemals auf 
irgendein Problem gestoßen wäre, dessen Lösung durch die 
Programmiersprache C/C++ behindert oder verhindert wurde. Nicht ein 
einziges. Deswegen bin ich damit sehr zufrieden.

Es gibt zweifellos schönere Programmiersprachen, das will ich gar nicht 
bestreiten.

Ich muss dazu sagen, dass meine C/C++ Kenntnisse weitgehend beim Stand 
von 1999 hängen geblieben sind, weil ich seit 2000 mein Geld mit anderen 
Programmiersprachen verdiene. C++ ist nur noch Hobby. Du kannst ja mal 
nach QtWebApp googeln, dann siehst du dass man auch mit einem Bruchteil 
des Sprachumfangs weit kommen kann.

"Wir greifen hier auf die von Stefan Frings entwickelte 
QtWebApp-Bibliothek zurück, die sich als Quasistandard im Bereich 
Webserver für Qt etabliert hat." (entwickler.de Magazin)

von Einer K. (Gast)


Lesenswert?

Ja gut...
Es kann wirklich sein, dass dich diese Neuerungen nicht interessieren.
Aber eine Empfehlung, für Anfänger sollte das dann aus meiner Sicht 
nicht sein.

Beispiel: Der schon genannte Range-Based-For-Loop

1
 const byte pins[] {3,5,9};
2
 
3
 for(byte p:pins) pinMode(p,INPUT)

Auf den ESP geht dann auch
1
for(byte p: {3,5,9}) pinMode(p,INPUT);

Das ist doch viel einfacher, als das Gehampel mit i und sizeof().
Nahezu ideal!

Oder using...
1
 using Buffer = int[20];
2
3
 Buffer buffer;
4
5
 void druckeEs(Buffer &buffer)
6
 {
7
   for(auto value:buffer) Serial.print(value);
8
 }
9
10
// in einer Funktion
11
druckeEs(buffer);


Fells man dann meint, dass int jetzt nicht der Richtige Datentype für 
den Buffer ist, dann ist es nur eine einzige Stelle, die man anfassen 
muss
1
using Buffer = float[125];

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Es kann wirklich sein, dass dich diese Neuerungen nicht interessieren.
> Aber eine Empfehlung, für Anfänger sollte das dann aus meiner Sicht
> nicht sein.

Natürlich, Empfehlungen sind immer gut. Welches Buch war das doch 
gleich?

Sorry, aber für den Fragesteller läuft das gerade sicher nicht allzu 
hilfreich. Wir schwafeln hier nur rum, das hilft ihm nicht weiter. Ich 
halte mich jetzt besser raus, bin ja mit daran Schuld.

Beitrag #5891495 wurde von einem Moderator gelöscht.
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.