mikrocontroller.net

Forum: Compiler & IDEs PWM_Atmega 88


Autor: _Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen, ich wollt ein wenig mit PWM rumspielen! nutze dafür den 
8bit timer0 vom at88!
nur leider lauft der code nicht! ich habe testweise eine led 
angeschlossen!
die led bleibt dunkel!


#include <avr/io.h>
void main(void)
{
  DDRD |= (1<<DDD6 ) ;
  // Timer/Counter Control Register A
  TCCR0A |= (1<<COM0A1);
  TCCR0A |= (1<<WGM00);
  TCCR0B |= (1<<WGM02);
  TCCR0B |= (1<<CS02 ) //clkI/O/256 (From prescaler)

  TCNT0 = 0;
  OCR0A = 0;

  while(1)
  {
    _delay_ms(500);
                OCR0A=OCR0A+10;
  }

}

kann mir jemand weiter helfen?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du variierst ja auch nur die PWM-Frequenz und nicht den Duty-Cycle.

Also bitte nochmal ins Datenblatt schauen, welchen PWM-Mode du da 
ausgewählt hast und wie der funktioniert.

Autor: sd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1A = (1<<COM1A1) | (1<<WGM11);
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);

//  den Endwert (TOP) für den Zähler setzen
//  der Zähler zählt bis zu diesem Wert
ICR1 = 0x28C0;

  // der Compare Wert
  // Wenn der Zähler diesen Wert erreicht, wird mit
  // obiger Konfiguration der OC1A Ausgang abgeschaltet
  // Sobald der Zähler wieder bei 0 startet, wird der
  // Ausgang wieder auf 1 gesetzt
  //
  // Durch Verändern dieses Wertes, werden die unterschiedlichen
  // PWM Werte eingestellt.

 // OCR1A = XXX; // 0x0400;

So hab ich das mal gemacht. Ist zwar für Timer 1. Aber umbauen für Timer 
0 sollte ja möglich sein.

Beispiel findest Du aber auch im Tutorial.

Gruß

SD

Autor: _Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die antwort :) ich habe jetzt   "TCCR0B |= (1<<WGM02); " 
weggelassen und somit

Mode:1 PWM, Phase Correct

TOP: 0xFF
Update of OCRx at :TOP
TOV Flag Set on :BOTTOM

so funitoniert es auch!
Nur jetzt wird mir noch nicht ganz so klar, wozu ich überhaupt diesen 
mode:5 brauche! ich denke ich wühl mich nochmal durch das datenblatt! 
mir fehlt da noch iwas grundlegendes!

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
_Tom schrieb:

> Nur jetzt wird mir noch nicht ganz so klar, wozu ich überhaupt diesen
> mode:5 brauche

Um die PWM-Frequenz feiner einstellen zu können.

Autor: _Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand evt nen kleines beispiel um das zu verdeutlichen ?

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

Bewertung
0 lesenswert
nicht lesenswert
Was willst du da verdeutlichen?
Die Tabelle auf Seite 99 zeigt es doch ganz deutlich:

Der einzige Unterschied zwischen Mode 1 und Mode 5 besteht darin, dass 
in Mode 1 der Timer immer bis 0xFF zählt ehe er wieder runterzählt und 
im Mode 5 kannst du einen anderen Wert als 0xFF über das Register OCRA 
vorgeben. Schreibst du also in OCRA den Wert 0xF0 hinein, dann zählt der 
Timer eben nicht mehr bis 0xFF sondern nur noch bis 0xF0 hoch und dann 
wieder runter. Schreibst du 0x40 hinein, dann zählt der Timer nur bis 
0x40 und dann wieder runter etc.

Je weniger hoch er zählen muss, desto schneller geht das auch.
Wenn du in 1 Sekunde immer um 1 weiter zählst, dann dauert es 100 
Sekunden bis du bei 100 angelangt bist, aber nur 45 Sekunden ehe du bei 
45 bist. Und da f = 1/T ist, besteht ein indirekter Zusammenhang 
zwischen der Zeit zum Zählen und der Frequenz die dabei herauskommt, 
wenn man bei bestimmten (gleichen) Zählerständen etwas macht.

Autor: _Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das hab ich soweit auch gesehen!
nur ist mir noch klar,in welchen register ich den wert, wo PD6 ein bzw. 
ausgeschaltet werden soll, eintrage!
das habe ich ja im mode 1 im register OCR0A gemacht! nur ist dieses 
register im mode:5 jetzt TOP !?!
ich glaub ich sollte ma leben kurz den kram beiseite legen und da nacher 
nochmal raufgucken

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.