Forum: Mikrocontroller und Digitale Elektronik Hilfe bei AVR PWM


von (unknown) (Gast)


Lesenswert?

Guten Abend,

ich habe mich vor längerer Zeit einmal mit dem internen Hardware PWM 
(counter) des Atmega32 beschäftigt. Danach habe ich keine Zeit mehr 
dafür gehabt und nun habe ich es heute noch einmal versucht. Soweit 
alles geschafft, OCR1B bzw OCR1A funktionieren, nur dass der jeweils 
andere PWM-Port (der nicht genutzt wird) auch (ungewollt) ein PWM Signal 
erzeugt. Warum?
Hier der Code:

#include <avr/io.h>

void init_pwm();

void init_pwm()
{
  TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | 
(0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (0<<WGM10);
  TCCR1B = (0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) 
| (1<<CS11) | (1<<CS10);

  ICR1=249;  // top of counter / 2ms pwm

  return;
}


int main(void)
{
  DDRD = 0b11111111;

  init_pwm();

  OCR1B=10;  // PD4 of AVR atmega32


  return(0);
}

MfG

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kannst du deine Bitauswahl näher erklären? Besonders:
(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0)

Um nur Ausgabe an OC1B zu machen, würde ich verwenden:
(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0)

von (unknown) (Gast)


Lesenswert?

Ja kann ich:
laut Datenblatt: Mode: Fast PWM, Clear OC1A/OC1B on compare match, set
OC1A/OC1B at BOTTOM,(non-inverting mode)
Deine Konfiguration ist im Datenblatt leider nicht zu finden, hab sie 
getestet und siehe da: nur OCR1B macht PWM. Es funktioniert also.

Egal, Problem hat sich schon gelöst, weil der Zustand, in dem einer (von 
insgesamt 4 PWM Ausgängen / allerdings anderer AVR) der PWM Ausgänge 
undefiniert bleibt nicht auftritt.

Danke für den Denkanstoß

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ach so. Atmel hat in den Tabellen Platz gespart und und einfach die 
Kombinationen für A/B in eine Tabelle gepackt, statt eine Tabelle für A 
und eine Tabelle für B zu machen.

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.