www.mikrocontroller.net

Forum: Compiler & IDEs PWM-Problem - Hilfe gesucht


Autor: Egon Müller (kpc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

meine ersten Versuche, mit einem Atmega16 hardwaremäßig über
PD7 = OC2 eine PWM-Frequenz auszugeben, waren unbefriedigend.

Ich hatte mir vorgestellt, man könne die hardwareimplinentierte
PWM-Einheit irgendwo anstoßen und sie liefe dann unabhängig
vom Programm weiter, bis man sie wieder abstellt.

Das scheint aber nicht richtig zu sein - oder meine Programmsequenz ist 
nicht richtig?

Ich habe am Anfang des main-Programms eingefügt:

   TCCR2 = (1<<WGM20) | (1<<WGM21) | (1<<COM21) | (1<<CS21) | (1<<CS20);
   TCNT2 = 254;
   OCR2 = 80;

D.h., es sollte in fast-PWM-Mode mit dem Prescaler 32
der Port OC2 (=PD7) ein- und ausgeschaltet werden. Zur Kontrolle
ist erst einmal eine LED angeschlossen. Man sieht aber nichts.
Die Sequenz wird ein einziges mal durchlaufen, irgendwelche
Interrupts sind nicht gesetzt.

Kann mir jemand erklären, was hier falsch ist.

Vielen Dank schon mal
Egon

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann mir jemand erklären, was hier falsch ist.

gerne, aber:
poste bitte etwas mehr Code, aus den 3 Zeilen ist nicht zu erkennen mit 
was der M16 sonst noch so beschäftigt ist. Kurz und knapp evtl. 
compilierbar. Dieses können wir uns anschauen und dann bestimmt auch 
helfen.

Autor: Egon Müller (kpc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
>> Kann mir jemand erklären, was hier falsch ist.
>
> gerne, aber:
> poste bitte etwas mehr Code, aus den 3 Zeilen ist nicht zu erkennen mit
> was der M16 sonst noch so beschäftigt ist. Kurz und knapp evtl.
> compilierbar. Dieses können wir uns anschauen und dann bestimmt auch
> helfen.


Da ist bei diesem Versuch nicht viel Code, die drei fraglichen Zeilen 
und Versatzstücke aus einem anderen Programm:

// allererster PWM-Versuch:     9.1.09

#include <avr/io.h>
#include <util/twi.h>
#include <stdint.h>
#include <stdio.h>
#include <util/delay.h>

void ring(void)       // Anrufvisualisierung
  {
  int n=9;
    while(n-- >1)
  {
  DDRB |= 1;
  PORTB &= 254;     // LED  ein
  _delay_ms(50);
  PORTB |= 1;       // LED  aus
  _delay_ms(50);
  }
  return;
  }

void main(void)
 {
  ring();
  // TCCR2 = 107;
  TCCR2 = (1<<WGM20) | (1<<WGM21) | (1<<COM21) | (1<<CS21) | (1<<CS20);
  TCNT2 = 254;
  OCR2 = 80;
  }

mfg
Egon

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat Datenblatt:
However, note that the Data Direction Register (DDR) bit corresponding
to OC2 pin must be set in order to enable the output driver.

Autor: Egon Müller (kpc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst wrote:
> Zitat Datenblatt:
>
However, note that the Data Direction Register (DDR) bit
> corresponding
> to OC2 pin must be set in order to enable the output driver.

Ja, sehr peinlich. Ich hatte es auch im Datenblatt gelesen, aber 
schließlich nicht mehr daran gedacht.

Vielen Dank!
Egon

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.