Forum: Mikrocontroller und Digitale Elektronik PWM- OC0A ist Eingang?


von Norbert (Gast)


Lesenswert?

Hallo,

ich programmiere mit dem AVR-Studio 4.
Den Timer0 habe ich als Fast-PWM programmiert und möchte diese am OC0A 
ausgeben. Im Timoer0-Overflow Interrupt wird das Compare-Register immer 
mit dem gleichen Wert beschrieben..aber nur jetzt zur vereinfachung..

Code:
/* PD6 als Ausgang */
DDRD = 0x40;
PORTD = 0x00;

/* PWM */
TIMSK0 = ((1<<OCIE0A) | (1<<TOIE0));
TCCR0A = ((1<<COM0A1) | (1<<WGM01) | (1<<WGM00));
TCCR0B = ( (1<<CS01));
OCR0A = 0x00;

....

ISR(TIMER0_OVF_vect)
{
  OCR0A = 0x2A;
}

Man sieht, wenn man es im AVR-Studio debuggt, dass PIND6 toggelt. Aber 
es sollte doch eigentlich PORTD6 toggeln, da es doch als Ausgang 
konfiguriert ist, oder nicht? So würde ja jetzt PIND6 ein Eingang sein.

von AVR-Fan (Gast)


Lesenswert?

Das im Studiosimulator könnte auch ein Darstellungsproblem sein,
PWM und Co. Teste ich lieber in der Realen HW oder,
wenn es nicht anders geht mit dem STK500.

In der realen Hardware wird der Port D6 automatisch als
Ausgang konfiguriert, wenn du die PWM konfigurierst,
egal ob der vorher als Eingang oder Ausgang definiert war.

Wird die PWM "Abgeschaltet", also als "nicht mehr PWM"
umgestellt, wird die vorige Konfiguration wieder wirksam.

Man kann also z.B. den Pin als Ausgang mit L definieren,
dann die PWM betreiben, (Pin schaltet) und wenn man die
PWM "ausschaltet" wird der Portpin automatisch immer auf L
gehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.