mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei AVR PWM


Autor: (unknown) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: (unknown) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.