uint8_tpwm_phase=10;// Laufwert der Schleife 0..100
12
while(1)
13
{
14
if(pwm_soll==pwm_phase)
15
{
16
PORTA|=(1<<PINA3);// LED 4 aus
17
}
18
pwm_phase++;
19
if(pwm_phase==100)
20
{
21
pwm_phase=0;
22
PORTA&=~(1<<PINA3);// LED 4 ein
23
}
24
}
25
return0;
26
}
Das Programm läuft auf meinem Attiny. Die LED verändert seine Helligkeit
je nach angebenen Wert von pwm_soll. Auf pwm_phase scheint sich nichts
zu ändern. Was macht pwm_phase? Was macht pwm_soll eigentlich? Da sich
die Helligkeit der LED verändert macht pwm_soll etwas aber was?
LG Klaus
Zu dumm zum lesen:
steht doch da:
https://www.mikrocontroller.net/articles/AVR_PWM
//Initialisierung
pwm_phase = 0 // von 0 bis 100(99) ergibt ein moduliertes Signal
pwm_soll = 30 // Tastverhältnis in Prozent (Werte von 0..100)
//alle s Sekunden tue:
wenn pwm_soll = pwm_phase dann
ausgang = LOW
wenn pwm_phase++ = 100 dann
pwm_phase = 0
ausgang = HIGH
lass das mit dem Programmieren lieber bleiben!!
Heiner schrieb:> //alle s Sekunden tue:> wenn pwm_soll = pwm_phase dann> ausgang = LOW> wenn pwm_phase++ = 100 dann> pwm_phase = 0> ausgang = HIGH
Das habe ich gelesen. Wenn da pwm_phase++ steht, dann könnte man ja da
von ausgehen das was gezählt wird oder eine Zeit eingestellt wird.
Wollte eigentlich nur wissen wie das funktioniert. Leider schweigt sich
mein C-Buch dazu aus.
Rolf M. schrieb:> Wie kommst du darauf? Laut Code ändert es sich bei jedem> Schleifendurchlauf.
Das sehe ich auch, aber in der Anzeige der LED ist nichts zu sehen. Die
Frage dazu ist wieder, wie oder was funktioniert in diesem Programm?
Da mein C-Bich nichts dazu sagt und im Netz auch nichts zu finden ist,
frage ich halt danach.
Es ist leicht auf die kurze Erklärung zu verweisen. Man könnte ja fast
denken das du es auch nicht weisst.
Georg M. schrieb:> Zeichne dir ein Zeitdiagramm
Gute Idee, Diagramm eigentlich kein Problem, doch was steht an den
Achsen? Eine ist die Zeit und die andere?
Klaus schrieb:> Gute Idee, Diagramm eigentlich kein Problem, doch was steht an den> Achsen? Eine ist die Zeit und die andere?
Entweder du bist ein Troll oder du bist wirklich so doof. Denken wir mal
positiv und nehmen Letzteres an.
Die andere Achse ist für die Spannung. Also, ob die Led leuchtet oder
nicht.
Bei Phase = 0 wird die Spannung eingeschaltet und bei Phase = Soll
ausgeschaltet. Dann läuft Phase bis 99 weiter und geht dann statt auf
100 wieder auf 0 und das Spielchen beginnt von vorne. Das sollst du
grafisch darstellen. Wenn du es richtig machst, erhältst du eine PWM,
wie sie im Buche steht.
Klaus schrieb:> Georg M. schrieb:>> Zeichne dir ein Zeitdiagramm>> Gute Idee, Diagramm eigentlich kein Problem, doch was steht an den> Achsen? Eine ist die Zeit und die andere?
Sag mal - bist Du ein Troll oder stellst Du Dich nur dumm oder bist Du
wirklich doof? Weißt Du, was ein Diagramm ist?
Eine Achse ist die Zeit, die andere Achse ist dann ja wohl pwm_phase,
oder?
Klaus schrieb:> Heiner schrieb:>> //alle s Sekunden tue:>> wenn pwm_soll = pwm_phase dann>> ausgang = LOW>> wenn pwm_phase++ = 100 dann>> pwm_phase = 0>> ausgang = HIGH>> Das habe ich gelesen. Wenn da pwm_phase++ steht, dann könnte man ja da> von ausgehen das was gezählt wird oder eine Zeit eingestellt wird.
Ja, ist auch so. Diese Zeile erhöht den Wert von pwm_phase um 1. Da das
in einer Endlosschleife passiert, wird also offenbar pwm_phase permanent
hochgezählt und zu bestimmten Zeiten wieder auf 0 zurückgesetzt (siehe
zweite if-Abfrage). Deshalb ja meine Frage, wie du darauf kommst, dass
sie das nicht ändere.
> Wollte eigentlich nur wissen wie das funktioniert. Leider schweigt sich> mein C-Buch dazu aus.
Da steht nicht drin, was der Operator ++ macht? Dann wirf es weg.
> Rolf M. schrieb:>> Wie kommst du darauf? Laut Code ändert es sich bei jedem>> Schleifendurchlauf.>> Das sehe ich auch, aber in der Anzeige der LED ist nichts zu sehen.
Welche Anzeige? Ich denke, die LED ändert ihre Helligkeit abhängig von
pwm_soll. Das wäre auch genau das, was sie tun soll.
> Es ist leicht auf die kurze Erklärung zu verweisen.
Viel mehr gibt's dazu nicht zu erklären. Das beste in so einem Fall ist,
sich Papier und Bleistift zu nehmen und dann das Programm von Hand
Schritt für Schritt durchzugehen und dir dabei anzusehen, was z.B. mit
pwm_phase und dem Ausgang passiert. Natürlich musst du nicht die 100
Schritte alle durchlaufen, denn du wirst das Muster sicherlich schnell
erkennen.
Warum sollte ich ein Troll sein. Nur wenn man etwas nicht kennt und um
Hilfe fragt ist es kein Verbrechen.
War es nach dem C-Buch gewohnt das es eine Zählschleife gibt. Der Aufbau
steht ja im Buch. Dachte so an Startwert, Endwert und Schrittweite. Das
andere kannte ich bisher nicht.
Das C-Buch hat mir schon oft geholfen, ist von Wolf und soll eines der
besten sein, hat ja so ca. 1000 Seiten voller Wissen.
Diagramme kenne ich, so mit Zeitachse und Ausgang oder Wert an der
anderen. Mir ist nur nicht klar, wenn ich die Zählschleife nicht erkenne
wie das dann im Diagramm steht.
Nimm Dir einen Privatlehrer, der Dir Alles erklärt.
Dir fehlt jegliches Wissen und Verständnis um in der Lage zu sein,
jemals etwas selbstständig zu programmieren.
Du magst wohl ein Buch haben, bist aber nicht fähig, das Gelesene zu
verstehen geschweige denn umzusetzen.
Programme einfach kopieren und Andere um Erläuterung der Programme zu
bitten ist nicht zielführend.
Das ist die bittere Wahrheit
Klaus schrieb:> War es nach dem C-Buch gewohnt das es eine Zählschleife gibt. Der Aufbau> steht ja im Buch. Dachte so an Startwert, Endwert und Schrittweite. Das> andere kannte ich bisher nicht.
Hier hast du keine Zählschleife, sondern eine Endlosschleife. Sie läuft
für immer durch. Schließlich willst du ja, dass dein PWM-Zyklus nicht
nur einmal oder zehn mal läuft, sondern für immer. Zählen kann man
innerhalb dieser Schleife natürlich trotzdem, ganz unabhängig davon, was
im Schleifenkopf steht. Und genau das passiert hier. Wie gesagt: Spiele
einfach mal Mikrocontroller und gehe das Programm Schitt für Schritt
selber durch und überlege dir, was da passiert.
Klaus schrieb:> if( pwm_phase == 100 )> {> pwm_phase = 0;> PORTA &=~(1<<PINA3); // LED 4 ein> }
Hatte mich schon gefragt warum pwm_phase = 0. Bei einer Endlosschleife,
ja klar.
Warum soll ich einen Privatlehrer nehmen?
Mir war es nicht vergönnt ein Studium zu machen und die entsprechenden
Sachen zu lernen. Lernen durch Fehler ist vielleicht das bessere Konzept
für mich. Bin aber nicht so grössen Wahnsinnig mein Halbwissen in
irgendwelche Videos zu packen und die Welt zu beglücken. Wenn ich aus
dem Datenblatt keine Antwort bekomme farge ich hier im Forum.
Ist das nicht Sinn dieses Forums Laien und Suchende weiter zu helfen?
Klaus schrieb:> Klaus schrieb:>> if( pwm_phase == 100 )>> {>> pwm_phase = 0;>> PORTA &=~(1<<PINA3); // LED 4 ein>> }>> Hatte mich schon gefragt warum pwm_phase = 0. Bei einer Endlosschleife,> ja klar.> Warum soll ich einen Privatlehrer nehmen?> Mir war es nicht vergönnt ein Studium zu machen und die entsprechenden> Sachen zu lernen. Lernen durch Fehler ist vielleicht das bessere Konzept> für mich. Bin aber nicht so grössen Wahnsinnig mein Halbwissen in> irgendwelche Videos zu packen und die Welt zu beglücken. Wenn ich aus> dem Datenblatt keine Antwort bekomme farge ich hier im Forum.> Ist das nicht Sinn dieses Forums Laien und Suchende weiter zu helfen?
Du scheiterst an den einfachsten Programmschritten.
Wenn ein Grundschüler denkt, er würde die Infintesimalrechnung ohne
weiteres Hintergrundwissen durchdringen ist er zum Scheitern verurteilt-
und bei Dir ist es ebenso.
Beschäftige Dich zuerst mit den Grundlagen der Programmierung und erst,
wenn Du diese beherrschst, solltet Du Dich mit AVRs beschäftigen.
Sonst wirst Du nie in der Lage sein, ein funktionsfähiges Programm zu
erstellen, das mehr macht als nur ein LED an/aus.
SCNR
Sag mal, willst du was von mir? Du beleidigst mich mit jedem Satz in
einer Art und Weise, die unterhalb des guten Geschmacks liegt.
Macht es dir irgendwie Freude andere Menschen zu beleidigen oder geht
dir einer dabei ab.
Ich versuche einen Attiny 44 zu begreifen und du hast nichts weiter zu
tun als mich dabei zu beleidigen.
Wo sind den die "Aufpasser" dieser Seiten? Könnt ihr nicht solche Sachen
verhindern?
Das ganze hat mit einem Forum nichts mehr zu tun.
Klaus
Ich will Dich weder beleidigen noch “geht mir einer ab”.
Die Art und Weise Deiner Fragen zeigt aber, dass Du weder die Grundlagen
der Programmierung beherrschst noch die Datenblätter liest / verstehst -
Siehe Fragen bezüglich Schleife.
Lerne die Grundlagen der Programmierung und versuche, die Datenblätter
zu verstehen
Klaus
Und nebenbei- es reicht nicht, Programmschnipsel zusammenzukopieren ohne
Ahnung zu haben, was die Schnipsel machen (wobei PWM - siehe Deinen link
- sehr gut erklärt wird - setzt aber voraus, dass man die Grundlagen der
Programmierung beherrscht).
Und “Lernen durch Fehler” - naja.