mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega16 Fast PWM


Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich versuche gerade Fast PWM mit Timer 1 zum laufen zu bringen. Der 
Controller ist ein ATMega16 mit externem 16MHZ Quarz.
Ziel ist einen Servotester (Modellbau) zu bauen.

Ausgabe PWM auf OC1A (PD5) mit 50Hz.

High - Zeit des Signals für Mittelstellung 1,5ms

Zur Theorie:

50Hz => 20ms bei 16MHz-> t = 62,5ns ergibt 320.000 für prescaler 1

also prescaler auf 8 --> Overflow bei 40.000 (ICR1)

OCR1A (Compare match): 1,5ms * 40000 / 20ms = 3000

Folgendes hab ich dann programmiert:


DDRD = (1 << PD5);

// Enable fast PWM mode 14 (table 47 page 113 ATMega16 Doc):
TCCR1A    = (1 << COM1A1) | (1 << WGM13) |(1 << WGM12) |(1 << WGM11);
// Set prescaler 8
TCCR1B    = (1 << CS11);
// Set PWM
ICR1     = (uint16_t)40000;
OCR1A    = (uint16_t)3000;


aber an PD5 kommt leider nix raus .......

ich habs dann auch mal mit

for (;;)
{
  PORTD ^= (1 << PD5);
  for (i = 0; i < 3000; i++)
    asm ("NOP");
}

probiert, was wunderbar funktioniert. Muss ich für den Timer1 auch noch 
die Ints freigeben, denn ISR's brauch ich eigentlich nicht ....

Bin für jeden Tipp dankbar !

Grüße,
Michael

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

hab den Fehler! So gehts:

// Enable fast PWM mode 14 (table 47 page 113 ATMega16 Doc):
TCCR1A    = (1 << COM1A1) |(1 << WGM11);
// Set prescaler 8
TCCR1B    = (1 << CS11) | (1 << WGM13) |(1 << WGM12);
// Set PWM
ICR1     = (uint16_t)40000;
OCR1A    = (uint16_t)3000;

Die WGM13 und WGM12 Bits waren im falschen Register gesetzt worden !

Grüße,

Michael

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servotester?

Dazu brauchts keinen Mega16 und auch keine 16MHz Takt:
http://www.hanneslux.de/avr/mobau/7ksend/7ksend02.html
Ein Mega48 mit 1MHz internem Takt reicht für bis zu 6 oder 7 Servos.

Man muss nicht immer mit Kanonen auf Spatzen schießen...

...

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hannes,
ist schon klar, aber das Teil ist nur als "Gimmick" mit in einem anderen 
Gerät, in dem die hohe Taktrate benötigt wird!

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.