Hallo ich habe eine Soft PWM nach Vorlage des Tutorials gebastelt. Ich möchte 24 LEDs ansteuern. In der ISR des Timers wird die Variable "zaehler" hochgezählt. Die Variable "schwelle" bestimmt ab welchem Wert der Variable "zaehler" der Pin auf high gesetzt wird. In meinem Hauptprogramm sieht das so aus: if (zaehler>schwelle[0]) pwm[0]=0b00000000; else pwm[0]=0b00000001; Das funktioniert soweit. Jetzt müsste ich aber diesen Code Schnipsel ja 24 mal modifiziert im Hauptprogramm stehen haben um 24 LED anzusteueren. Das kann es doch nicht sein , oder? Das geht doch bestimmt schöner und geschickter? Welches Kapitel in meinem C Buch sollte ich studieren um eine bessere Lösung zu finden. Was raten die Profis hier? Vielen Dank!
Ich weiß natürlich nicht wie deine Ports bzw. Pins belegt sind, aber in solchen Fällen bietet sich doch eine Schleife geradezu an.
Das Ganze befindet sich natürlich in einer while(1) Schleife da ja sonst, zumindest so wie ich das verstehe, gar kein PWM generiert wird.
Attila Ciftci schrieb: > Welches Kapitel in meinem C Buch sollte ich studieren um eine bessere > Lösung zu finden. Was raten die Profis hier Array und Index(Zählvariable). mfg.
Die while(1) Schleife ist aber einfach nur eine klassische Endlosschleife, damit dein Controller nicht von "vorne" anfängt. Für Soft-PWM in seiner klassischen Form brauchst du ja einen Timer/Counter Interrupt, welchen du innerhalb einer Interrupt Service Routine abarbeitest. Und dort wäre dann eine Schleife nötig, welche eben für jede LED überprüft, ob der Grenzwert überschritten worden ist oder eben nicht. Abhängig davon schaltest du dann die entsprechende LED ein oder aus. Die konkrete Implementierung hängt ein wenig davon ab, wie du deine LEDs an den Controller angeschlossen hast. Das entscheidet nämlich darüber, ob du jede LED bzw. jeden PIN einzeln schalten willst bzw. musst, oder ob du den gesamten Port schalten willst bzw. kannst.
Attila Ciftci schrieb: > Welches Kapitel in meinem C Buch sollte ich studieren um eine bessere > Lösung zu finden. Was raten die Profis hier? Kapitel 1: For-Schleife Ausserdem musst du natürlich nicht immer den Wert setzten, sondern nur wenn er sich ändert. Das hast du angeschaut? http://www.mikrocontroller.net/articles/Soft-PWM Was ist denn das Problem?
Hallo! Ich habe jetzt dies in meiner ISR stehen: if (zaehler>schwelle[0]) pwm[0]=0b00000000; else pwm[0]=0b00000001; if (zaehler>schwelle[1]) pwm[1]=0b00000000; else pwm[1]=0b00000010; usw usw usw bis if (zaehler>schwelle[7]) pwm[7]=0b00000000; else pwm[7]=0b10000000; Dies "bedient" 8 LEDs. So wie ich das verstanden habe könnte ich die Felder "schwelle" und "pwm" in einer for Schleife innerhalb der ISR hochzählen. Wie aber ändere ich innerhalb dieser Schleife den jeweiligen PIN von pwm der auf high geschaltet werden soll? Ich hoffe dies erklärt das Problem
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.