Forum: Mikrocontroller und Digitale Elektronik ATMega16 Fast PWM


von Michael K. (mmike)


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

von Michael K. (mmike)


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

von Hannes L. (hannes)


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...

...

von Michael K. (mmike)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.