PWM Fehler blinkt

Gast #1604017
Hallo,
ich versuche mich gerade an der PWM programmierung, zu der Funktion ich 
lege an einen Pin ein Signal an und sobald dieses Signal da ist, soll 
die entsprechende RGB-LED hoch gedimmt werden sobald das Signal wegfällt 
sollen die LEDs heruntergedimmt werden.

if ( (u8_rot == 1) || (u8_gelb==1) )
{
  if(OCR1A < 256)
 {
  OCR1A = OCR1A+5;
  _delay_ms(70);
  }
}

else
{
  if (OCR1A > 0)
  {
  OCR1A = OCR1A-5;
  _delay_ms(50);
  }
}

Leider blinken jedoch meine LEDs sobald ich das Signal anlege und dimmen 
nicht hoch und bleiben dann eingeschaltet.
Wechsel ich das signal, so dimmen sie herunter und die richtige andere 
Farbe z.b. grün erscheint jedoch wenn sie ganz grün sind gehen die roten 
LEDs wieder an und es dimmt wieder herunter dieser Vorgang geschieht 2 
mal und dann bleiben die LEDs grün.

Die Anweisung für die grünen LEDs ist identisch mit der der roten LEDs 
nur, dass ich hier mit dem OCR1B Register arbeite.

Für Hilfe wäre ich sehr dankbar
Gast
TCCR1A = _BV(WGM11);       //  PWM, phase correct
TCCR1B =_BV(CS10) | _BV(CS11);   // clock select clk/64
ICR1 = 0xFF;      // Endwert Counter

/* OC1A als PWM-Port setzen */
    TCCR1A |= _BV(COM1A1);
    OCR1A = 0;

/* OC1B als PWM-Port setzen */
    TCCR1A |= _BV(COM1B1);
    OCR1B = 0;
Gast
Und weiter? Wie ist die Taktung? Ohne die, kann man nur erraten, wie 
schnell die PWM ist.

Außerdem hatte ich nach dem Kontext des zuerst geposteten Codes 
gefragt-> WO und WANN wird das ausgeführt? In einer ISR oder in der 
main?

Und, schau doch mal bitte, wenn du Code postest unter "Formatierung" und 
nimm Code-Tags.
Mach dir doch nicht soviel Arbeit damit, dass du aussuchst welchen Code 
du zeigen willst und welchen nicht.
Übertrage mittels Copy&Paste einfach alles hier ins Forum

a) vermindert das die lästigen Nachfragen nach Details
b) sehen die Helfer hier alles und kriegen den Gesamtüberblick
c) sitzt der Fehler des öfteren ganz woanders als du vermutest
d) hast du weniger Arbeit:
   Im Editor Strg+A (für alles markieren), dann Strg+C (für kopieren)
   ins Forum wechseln, Strg+V (füer einfügen)
   Noch
1
[C]
 davor und
1
[/C]
 dahinter und fertig.

Lauter gute Gründe, warum sich das ausschnittweise posten von Code bis 
zu einer gewissen Codegröße einfach nicht lohnt
Gast
Willst du die Lösung vielleicht KNAPP erklären? Dann können andere 
Leute, die ein ähnliches Problem haben und dieses Forum durchsuchen auch 
davon profitieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.