Anfängerfrage, Soft PWM, Atmega8,C

OP #2614480
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.