-
        

Ergebnis 1 bis 6 von 6

Thema: Attiny13 PWM problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2007
    Beiträge
    6

    Attiny13 PWM problem

    Anzeige

    Ich hab das Problem dass am OCA0 pin des Attiny13 wenn ich ihn einschalte sofort ein PWM Signal da ist. Was ich jetzt nicht versteh ist wieso
    da ein Signal ist, wenn kein interrupt statt gefunden hat.


    Code:
    #include <util\delay.h>
    #include <avr\io.h>
    #include <avr\interrupt.h>
    
    ISR(INT0_vect){
    	OCR0A += 25;
    }
    
    int main(void){
    
    	DDRB |= (1 << DDB0);
    	PORTB = 0b00000000;
    
    	TCCR0A |= (1 << COM0A1) | (1 << WGM00);
    	OCR0A = 0;                                            
    	TCCR0B |= (1 << CS01);
    	
    	SREG |= (1 << 7);
    	MCUCR |= (1 << ISC01) | (1 << ISC00);
    	GIMSK |= (1 << INT0);
    	
    	while(1){}
    
    	return 0;
    }

  2. #2
    Die PWM Betriebsmodi basieren nicht auf Interrupts. Wenn der Timer einen Takt hat, dann wird das PWM Timing vollständig von der Hardware erzeugt. Du stellst Betriebsmodi und Takt ein, und genau in diesem Moment rennt die PWM los. Willst du das nicht, muss du die CS Bits auf Null lassen, dann steht der Timer, und somit gibts auch keine PWM am Pin


    Edit: Die ISR stand aber eben noch nicht im Code oder!? Ich glaube jetzt ist mir eher klar was du meinst. Du erwartest wegen OCR0 = 0; dauerhaft Low am Ausgang, oder? Sollte eigentlich auch so sein Bist du sicher das kein Interrupt auftritt? Was passiert ohne die ISR im Code? Wie erwartet Low am Pin?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Es könnte sein, dass der INT0 versehentlich ausgelöst wird, zB durch einen floatenden Pin (als Eingang ist er hochohmig) oder durch den Programmer.
    Setze doch mal probehalber PB1 (INT0 Pin) auf Ausgang und 0, bevor Du den INT0 aktivierst oder kommentier die Zeile aus der ISR heraus. Sollte das Problem dann immer noch sein, war es was anderes.
    Gruß

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2007
    Beiträge
    6
    @MichaF

    wenn kein Interrupt eingestellt ist also nur PWM dann habe ich kein signal am OC0A pin

    @Gock

    zwischen den INT0 pin und der Masse habe ich einen 10k Pull-Down Widerstand geschaltet da ich mit
    Code:
    MCUCR |= (1 << ISC01) | (1 << ISC00);
    eine steigende flanke erwarte. Der Eingang ist so wie im Bild beschaltet


  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Hast Du gemacht, was ich vorgeschlagen habe und was kam dabei heraus?
    Hast Du vom Pin nach Masse auch wirklkich durchgemessen? (Wackekontakt...)
    Hast Du mal den Programmer abgezogen und dann eingeschaltet?
    Im Code kann ich auf die Schnelle keinen Fehler finden, daher würde ich die Hardware prüfen.
    Gruß

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2007
    Beiträge
    6
    EUREKA habs gefunden

    @Gock
    war mein Fehler da ich Anfaenger bei programmieren von MCU bin wusste ich nicht dass man zwischen VCC und GND einen 100nF Kondensator anschliesen muss (jetzt weiss ich es) . Dank fuer die Bestatigung fuer den Code dass da kein Fehler ist denn ich haette noch eine Woche daran geschrieben.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •