PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny13 PWM problem



qubico
28.08.2010, 11:36
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.




#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;
}

MichaF
28.08.2010, 11:58
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?

Gock
28.08.2010, 14:01
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ß

qubico
28.08.2010, 18:29
@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

MCUCR |= (1 << ISC01) | (1 << ISC00);
eine steigende flanke erwarte. Der Eingang ist so wie im Bild beschaltet

http://www.mikrocontroller.net/wikifiles/a/a2/Active_High.gif

Gock
28.08.2010, 19:23
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ß

qubico
28.08.2010, 21:09
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.