PWM Frequenz ATTiny85

OP #5890370
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!
Gast #5890380
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!
#5890484
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"
#5890524
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.
OP #5891075
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.
Gast #5891091
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.
Gast #5891230
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.
Gast #5891338
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.
Gast #5891374
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.
Gast #5891433
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!
Gast #5891467
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)
Gast #5891487
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];
Gast #5891491
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren