Hallöchen :)
Ich würde gerne eine LED faden lassen und habe dazu auch das Tutorial
von AVR durchgearbeitet
(https://www.mikrocontroller.net/articles/LED-Fading)
Nun gibt es dort eine Stelle, die ich noch nicht so verstanden habe:
1
voidpwm_10_64(uint16_tdelay)
2
{
3
// 10 Bit Fast PWM
4
TCCR1A=0x83|INVERT_PWM;
5
// prescaler 64 -> ~122 Hz PWM frequency
6
TCCR1B=(1<<WGM12)|3;
7
8
pwm_up_down(pwmtable_10,64,delay);
9
}
Leider weiß ich nicht, was die 3 dort macht? Ist das irgendein Faktor?
Welchen Einfluss hat sie auf die Funktion?
Ich hoffe ihr könnt mir das erklären :)
Vielen Dank im Voraus!
Lavy
Svenja S. schrieb:> Leider weiß ich nicht, was die 3 dort macht
Die bits 0 und 1 von TCCR1B auf 1 setzen.
Was die bits in dem Timer Steuerregister für eine Funktion haben ?
Schau ins Datenblatt deines uC, dazu ist es da.
Bei mir CS12 CS11 CS10 und setzen den Vorteiler auf 64.
Steht übrigens auch im Kommentar oben drüber. Aber Kommentare liest eh
keiner. Vor allem nicht, wenn man nicht versteht, was der code an der
Stelle macht.
Svenja S. schrieb:> Leider weiß ich nicht, was die 3 dort macht?
Sieh nach, was der Operator '|' dort macht, und wie die Zahl 3 in
Binärdarstellung aussieht.
Dann erkennst du, dass dort einfach die beiden niederwertigsten Bits
gesetzt werden.
Das ist ein bitweises Oder. Damit werden CS12...CS10 (die 3 unteren
Bits) auf 0b011 (also dezimal 3) gesetzt.
Die Schreibweise ist nicht wirklich schön lesbar, besser (und
verständlicher) wäre:
TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);
Da kann man dann besser ableiten, wie der Prescaler steht
Svenja S. schrieb:> Leider weiß ich nicht, was die 3 dort macht? Ist das irgendein Faktor?> Welchen Einfluss hat sie auf die Funktion?
Es werden die untersten beiden Bits immer gesetzt.
Guck dir mal die BEschreibung zum Register "TCCR1B" an.
Svenja S. schrieb:> // 10 Bit Fast PWM> TCCR1A = 0x83 | INVERT_PWM;
DAS würde mir (als interessierter Laie) eher Kopfzerbrechen bereiten ...
Was ist die 0x83? Wo kommt "INVERT_PWM" her?
MaWin schrieb:> Steht übrigens auch im Kommentar oben drüber. Aber Kommentare liest eh> keiner. Vor allem nicht, wenn man nicht versteht, was der code an der> Stelle macht.
Leider hat mir der Kommentar diesbezüglich garnichts gesagt, deswegen
habe ich ja gefragt. Ich versteh nicht, warum in vielen Foren die Leute
gleich so salty werden :/
Sebastian R. schrieb:> Die Schreibweise ist nicht wirklich schön lesbar, besser (und> verständlicher) wäre:>> TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);
Danke! Damit kann ich was anfangen :) Die Schreibweise mit der 3 ist mir
vorher noch nie untergekommen und war mir deswegen fremd.
Vielen Dank an Alle :D
Svenja S. schrieb:> Leider hat mir der Kommentar diesbezüglich garnichts gesagt, deswegen> habe ich ja gefragt. Ich versteh nicht, warum in vielen Foren die Leute> gleich so salty werden :/
Ach...das ist völlig normal hier.
Wenn man eine Frage hat sollte man die Antwort bereits kennen bevor man
die Frage stellt.
Ich frage mich warum es eigentlich Schulen und Lehrer gibt? Man kann den
Kindern doch einfach sagen: Schaut ins Buch!
Sebastian R. schrieb:> Die Schreibweise ist nicht wirklich schön lesbar, besser (und> verständlicher) wäre:> TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);
Ich habe das mal im Artikel für alle pwm-Funktionen angepasst - je nach
Konstante 3 oder 4.
Axel R. schrieb:> DAS würde mir (als interessierter Laie) eher Kopfzerbrechen bereiten ...> Was ist die 0x83?
Ebenso habe ich die Konstanten 0x81 und 0x83 im Artikel ersetzt, z.B.
für pwm_10_64():
Widerstand schrieb:> Svenja S. schrieb:>> Leider hat mir der Kommentar diesbezüglich garnichts gesagt, deswegen>> habe ich ja gefragt. Ich versteh nicht, warum in vielen Foren die Leute>> gleich so salty werden :/>> Ach...das ist völlig normal hier.> Wenn man eine Frage hat sollte man die Antwort bereits kennen bevor man> die Frage stellt.
Na, wer Fliegen will, bevor er über haut laufen kann(*), braucht sich
bei "dummen" Fragen, nicht über Ohrfeigen wundern.
*)
Svenja S. schrieb:> Die Schreibweise mit der 3 ist mir> vorher noch nie untergekommen und war mir deswegen fremd.
....
Teo schrieb:> Na, wer Fliegen will, bevor er über haut laufen kann(*), braucht sich> bei "dummen" Fragen, nicht über Ohrfeigen wundern.
Wer noch nie gehört hat, dass das Fliegen möglich ist, nun durch nen
dummen Zufall aber an dem Flugzeug schrauben muss, naja dem könnten dann
wohl Fragen zum Laufen einfallen. Einige in diesem Forum sollten
wirklich mal ihr hohes Ross absatteln.
Wobei mir nicht ganz klar ist, wie du alter Perfektionist, der
niieeemals nen Fehler machen würde, darauf kommst, dass Fliegen mit über
Haut laufen zi tun hat. Fliegen ist fliegen, über Haut laufen ist
laufen.
J. T. schrieb:> Wer noch nie gehört hat, dass das Fliegen möglich ist, nun durch nen> dummen Zufall aber an dem Flugzeug schrauben muss, naja dem könnten dann> wohl Fragen zum Laufen einfallen.
Ah, du bist also der TO!
Unter mehreren Nicks zu Posten, ist hier VERBOTEN!³
Teo schrieb:> Na, wer Fliegen will, bevor er über haut laufen kann(*), braucht sich> bei "dummen" Fragen, nicht über Ohrfeigen wundern.
Warum muss man hier ständig als Fragender die Grundlagen beherrschen
bevor man etwas fragt?
Das macht absolut keinen Sinn. Dann würde in keinem der zig tausenden
Foren auch nur irgendeine Frage auftauchen.
Es soll Menschen geben die keine E-Technik gelernt haben und dennoch in
der Lage sind für sich einen µC zu programmieren.
Wenn man nun aus zig Tuts sowas hier liest:
1
TCCR1B=(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
Und dann zum ersten Mal das:
1
TCCR1B=(1<<WGM12)|3;
Ist es vollkommen berechtigt in einem Forum zu fragen was die 3 da soll.
Widerstand schrieb:> Teo schrieb:>> Na, wer Fliegen will, bevor er über haut laufen kann(*), braucht sich>> bei "dummen" Fragen, nicht über Ohrfeigen wundern.>> Warum muss man hier ständig als Fragender die Grundlagen beherrschen> bevor man etwas fragt?
Warum da soviel hinein interpretieren?!
Der Satz ist exakt so gemeint, wie er dasteht!
Wie so, warum, der TO diesen Thread eröffnet hat, hab ich keinen Ahnung.
Aber über die Reaktionen mancher Leser, braucht er und andere, sich
nicht zu wundern.
Frank M. schrieb:> Max B. schrieb:>> Die betroffene Zeile wurde übrigens im Juli in dem Artikel geändert.>> Nö. Da wurde nur Text geändert.
Okay.. Mh, dann steht es in der Versionsgeschichte aber anders.
> Den Code hab ich vor ca. einer Stunde> angepasst, siehe auch> Beitrag "Re: LED Fading - Frage zu einer Funktion" ;-)
Ahhh okay... Glatt überlesen! :)
Teo schrieb:> Warum da soviel hinein interpretieren?!> Der Satz ist exakt so gemeint, wie er dasteht!> Wie so, warum, der TO diesen Thread eröffnet hat, hab ich keinen Ahnung.> Aber über die Reaktionen mancher Leser, braucht er und andere, sich> nicht zu wundern.
Ganz einfach, weil für dich der TO eine dumme Frage gestellt hat.
Und doch, man wundert sich immer wieder über manche Reaktionen.
Wäre der TO E-Techniker, Ing. oder gar Softwareentwickler, joar, dann
wäre die Frage vielleicht dumm. Aber auch nur wenn er es besser wissen
MÜSSTE!
Frank M. schrieb:> dass ich heute morgen bereits
für mich war das zeitnah genug, der Thread war von heute und ich las ihn
morgens, ist bei mir halt später.
Da ich diese Funktionen am AVR auch gerne seit Jahren verwende waren mir
Konstanten aber nicht im Gedächnis, jedenfalls nicht bei pwm_10_64.
Ich schaute sogar noch in den Artikel ob man da eine Änderungsnotitz
sieht, so a la "17.08.2021 11:22: Bearbeitet durch User"
Ist mir aber auch nicht aufgefallen und
Frank M. schrieb:> https://www.mikrocontroller.net/index.php?title=LED-Fading&type=revision&diff=104649&oldid=104611
kannte ich nicht
Teo schrieb:> Ah, du bist also der TO!> Unter mehreren Nicks zu Posten, ist hier VERBOTEN!³
Komm Teo, versuch du erstmal über deine Haut zu laufen, bevor du
Schlüsse aus Informationen ziehst, obwohl die Information nicht
vorhanden ist.
Ich habe die Frage des TO schon 2012 rum gestellt. Und mir wurde sie
damals äusserst zuvorkommend von Karl-Heinz beantwortet. Leider haben es
Leute wie du geschafft, ihn aus diesem Forum zu vertreiben.
J. T. schrieb:> ... Karl-Heinz beantwortet. Leider haben es Leute wie du geschafft, ihn aus> diesem Forum zu vertreiben.
Bist Du sicher, dass er vertrieben wurde? Bist jetzt dachte ich, dass er
bei den den døde ist.
Sebastian R. schrieb:> TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);>> Da kann man dann besser ableiten, wie der Prescaler steht
Was soll diese bitweise Zerstückelung?
Schöner wäre wohl
1
TCCR1B = (1 << WGM12) | 0b011 << CS);
und dazu noch eine Definition von CS als CS10, dto. für WGM.
Und im Kommentar dazu ein Verweis auf die Tabelle im Datenblatt ...
Melba schrieb:> Bist Du sicher, dass er vertrieben wurde?
Nein, dass war nur ne Vermutung.
Melba schrieb:> Bist Du sicher, dass er vertrieben wurde? Bist jetzt dachte ich, dass er> bei den den døde ist.
Dass allerdings würde seine Abwesenheit auch erklären, ist dann aber
irgendwie ne Ecke trauriger, als wenn er "nur vertrieben" worden wäre.
J. T. schrieb:> Komm Teo, versuch du erstmal über deine Haut zu laufen, bevor du> Schlüsse aus Informationen ziehst, obwohl die Information nicht> vorhanden ist.
Ich habe keine Schlüsse gezogen! Ich fand es nur ziemlich anmaßend von
dir, für den TO das Wort zu übernehmen!
PS: Nich das du es immer noch nicht schnallst: Das war Ironisch
gemeint.... Jetzt versteh ich so langsam, warum du so heftig über das
Wort "Dumm" gestolpert bist. :DDD
Wolfgang schrieb:>> TCCR1B = (1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10);>> Da kann man dann besser ableiten, wie der Prescaler steht>> Was soll diese bitweise Zerstückelung?> Schöner wäre wohl
Es ist länger dass ich mal in nem AVR-Datenblatt geschmökert hab, aber
so weit ich mich entsinne, machen die das dort genauso. Ich find es auch
lesbarer als deine Variante.
Teo D. schrieb:> Ich habe keine Schlüsse gezogen! Ich fand es nur ziemlich anmaßend von> dir, für den TO das Wort zu übernehmen!
Doch hast du. Muss ich dir auch noch erklären, was es bedeutet, einen
Schluss aus etwas zu ziehen?
Ich fand es mehr als nur anmaßend von dir, die Frage des TO als dumm
hinzustellen. Es wurde ja sogar der abmildernde Vorschlag gemacht, dass
DU die Frage dumm findest, woraufhin du nochmal bekräftigt hast, dass
die Frage dumm ist.
Och Leute... Kloppt euch gefälligst im Sandkasten.
Das Thema hätte so schön sein können.
1. Klare Frage
2. Klare Antworten mit Erklärung
3. Anpassung der Dokumentation, um die Frage nicht mehr aufkommen zu
lassen
Perfekt eigentlich.
Bitte beim Thema bleiben.
Meines Erachtens ist die ursprüngliche Frage für einen Anfänger durchaus
berechtigt. Es ist auch unschön und inkonsequent, definierte Konstanten
wie WGM12 mit Zahlen wie 3 zu mischen. Wenn Konstanten für die Register
definiert sind, dann sollte man sie auch nutzen.
Das fördert auch die Portabilität. Es gibt duchaus AVRs, wo solche
Bitgruppen mal an ganz anderer Stelle im Register oder sogar in einem
ganz anderen Register stecken. Hier ist man dann mit den "magischen"
Zahlen aufgeschmissen.
Von daher hat die Frage durchaus eines bewirkt: Nämlich den Artikel
derart anzupassen, dass diese Frage nun nicht mehr gestellt werden muss.