PWM-Problem (PINs beim Tiny13 zeigen keine Reaktion)

OP #2132342
Lesenswert?
• ▲
▼
Brauche wieder einmal eure Hilfe!
Irgendwie funktioniert dieser Code nicht so richtig. Die Pin's reagieren 
nicht. Nur wenn ich den "IRQs enable" ausschalte, dann geht's plötzlich. 
Was mache ich falsch?
Danke!
Lg Mad

Anbei mein Code:

#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

/* Software PWM mit 8-Bit Timer 0
 *
 * Dimmt eine LED an PB3
 * Prescaler: 1/256
 */

// Timer/Counter0 Overflow
ISR (TIMER0_OVF_vect)
{
     PORTB |= (1 << PB3);                // PB3 ein
}

// Timer/Counter0 Compare Match
ISR (TIMER0_COMP_vect)
{
     PORTB &= ~(1 << PB3);      // PB3 aus
}

int main()
{

  DDRB |= (1 << PB3);   // PORTB is OUTPUT
  PORTB |= (1 << PB3);  // Pullup OFF

         TIMSK0 |= (1 << TOIE0) | (1 << OCIE0A);  // IRQ bei Überlauf 
TCCR0B |= (1 << CS02);         // Prescaler: 1/256
  OCR0A = 168;                 // Vergleichswert (0 = dunkel 255 = 
hell);
  sei();                       // IRQs enable

while (1)                      // endlos
{
   // Code ...
}
}
OP #2133110
Lesenswert?
• ▲
▼
Hallo Spanner,
nein, es gibt keinen speziellen Grund, warum ich diese Art der PWM 
gewählt habe. Blicke bei dieser Sache nicht ganz durch. Vielleicht 
kannst du mir das Programm ("Grundkonfig." so abändern, damit ich jeden 
Pin (sind ja nur 8 einschließlich Spg.-Vers.) Pin als Ausgang verwenden 
kann. Mir fehlt das Grundverständnis. Danke Mad
#2133156
Lesenswert?
• ▲
▼
Madang Madang schrieb:
> Irgendwie funktioniert dieser Code

Selbstgeschrieben oder irgendwo "gefunden"?

> nicht so richtig.

Wo funktioniert er nicht, im Tiny13 oder im Simulator?

> Die Pin's reagieren
> nicht.

Wieso "Pins", es wird doch nur ein Pin angesprochen?

> Nur wenn ich den "IRQs enable" ausschalte, dann geht's plötzlich.

Was geht plötzlich? (Simulation? Realer Tiny13?)
Wie erkannt? (Oszilloskop? Frequenzmesser? LED? ...?)

> Was mache ich falsch?

Du gibst vermutlich zuwenig Infos.

...
Gast #2133394
Lesenswert?
• ▲
▼
Ich schreib dir nicht dein Programm. Aber falls deine Absicht ist eine 
LED auf eine bestimmte Helligkeit einzustellen per PWM, dann lösche 
deine Interrupt Routinen, benutze einfach einen Timer im "Fast PWM" 
Modus. That's it. Keine Interrupts benötigt und das sei() kannst du dir 
dann auch sparen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.