mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM mit Attiny2313


Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe fogendes Problem bei der PWM-Sognalerzeugung, dass ich am 
Ausgang gar nichts tut. Wahrscheilich habe ich was versehen.

So sieht mein Programm aus:
#include <avr/io.h>
//#define F_CPU 8000000UL

int main()
{
   // Timer 1 PWM Init
   //define TOP or value to compare
  ICR1 = 499;
  DDRB   |= (1 << PB3);                  // OC1A PWM Port
  // Set to Fast Phase Mode OCR1 = TOP
  TCCR1A = (1 << WGM11) ;
  TCCR1B = (1 << WGM12)   | (1 << WGM13) ;
  //Set to Toggle on OC1A
  TCCR1A |= (1 << COM1A0);
  //Set Prescaler to
  TCCR1B |= (1 << CS10) | (0 << CS11) | (0 << CS12);  //Prescaler 1
  while(1);
  return 1;
}
Danke im Voraus

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Any suggestion!!!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Any suggestion!!!

An welcher Stelle lädst du dein OC-Register?

MfG Spess

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Spess53,

was meinst Du?
MfG

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Spess53,

Du meist die Register OCR1A und OCR1B.

Ich benutzte den Modus 14 mit ICR1, dafuer kann man die Beide Register 
ignorieren. So steht mindestens auf Datenblatt.

MfG

Autor: AVRuser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was hat das Toogeln des Ausgangs OC1A mit einer PWM zu tun?? So hast du 
immer ein Verhältnis von 50%. Eine "echte" PWM sieht anders aus ...

Ausserdem kann ich spess53 nur recht geben: Wo werden die Register OCR1A 
und/oder OCR1B zugewiesen? Ohne die hast du eine PWM von Null ...
(Mit diesen Registern wird das PWM-Verhältnis vorgegeben; ICR1 ist der 
maximal mögliche Wert.)

Gruss

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tetef El schrieb:
> Ich benutzte den Modus 14 mit ICR1, dafuer kann man die Beide Register
> ignorieren. So steht mindestens auf Datenblatt.

Du hast falsch gelesen

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich gebe euch recht,
ich habe die beiden Register eingefuegt, jetzt tut er was.

Mit den Beiden Register kann ich meine Duty definieren.

Einverstanden

Sorry

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

mal eine Frage, ist das Ausgangsignal kontinuerlich oder nicht?

Meine Ausgangsignal hat eine Frequenz vom 20kHz. ich bekomme mein Signal 
als Sigmenten, und wenn ich eine in die Lupe anschaue, dann entspricht 
die gleiche Freuquenz, die ich eingestellt habe.

So sieht mein Programm aus:
#define F_CPU 8000000UL
#include <avr/io.h>

int main()
{
   // Timer 1 PWM Init
   //define TOP or value to compare

  DDRB   |= (1 << PB3);                  // OC1A PWM Port
  // Set to Fast Phase Mode OCR1 = TOP
  ICR1 = 399;
  OCR1A = 199;
  OCR1B = 199;
  TCCR1A = (1 << WGM11) ;
  TCCR1B = (1 << WGM12)   | (1 << WGM13) ;
  //Set to Toggle on OC1A
  TCCR1A |= (1 << COM1A0) | (1 << COM1A1);
  TCCR1A |= (1 << COM1B0) | (1 << COM1B1);

  //Set Prescaler to
  TCCR1B |= (1 << CS10) | (0 << CS11) | (0 << CS12);  //Prescaler 1

  while(1);
  return 1;
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tetef El schrieb:
> Hallo zusammen,
>
> mal eine Frage, ist das Ausgangsignal kontinuerlich oder nicht?

Das Ausgangssignal ist eine Rechteckschwingung.

Autor: Leandro Leandro (tetef)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
noch mal,

das Bild1 zeigt, dass das PWM-Signal als Segment dargestellt und wenn 
ich es in die Lupe anschaue, dann entspricht meine Rechnung. Meine 
Frage, warum gibt es eine tote Zeit dazwischen??

Gruss

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<weit aus dem Fenster lehn>

könnte es sich dabei um einen Messfehler deines Digital-Ossis handeln? 
Das der den Eingang eine zeitlang genau dann sampelt, wenn die PWM auf 0 
ist.

Welche Samplefrequenz benutzt dein Ossi beim linken Bild?


Setz mal die OCR Werte auf 390. Sind die Lücken dann kleiner?

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl,

wenn ich OCR auf 390 einstelle, dann sind die Luecken kleiner.

Ich verwende die Samplefrequenz bei beiden Bilder, nur die sec/Div 
anderes Bild 1 20 ms Bild2 5ous.

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.