Anfängerfrage, Soft PWM, Atmega8,C

OP #2614480
Lesenswert?

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!
Gast #2614667
Lesenswert?

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.
OP #2616323
Lesenswert?

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

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