Forum: Mikrocontroller und Digitale Elektronik Atmega2560 Programm zu langsam


von A. R. (redegle)


Lesenswert?

Hallo,

ich habe folgendes Programm auf einen Atmega 2560 übertragen.
1
 #include <avr/io.h>
2
3
int main(void)
4
5
{
6
7
  DDRA = 0b11111111;
8
  DDRL = 0b11111111;
9
  TCCR5A = 0b10100010;  //PWM
10
  TCCR5B = 0b00011001;  //PWM
11
  TCCR5C = 0b00000000;  //PWM
12
  ICR5   = 255;         // Zähler auf den Endwert 255 gestellt
13
  OCR5A = 10;        // PINL3 
14
  OCR5B = 50;        // PINL4
15
16
  int i = 0;
17
  while(1)
18
  {
19
  PORTA= i;
20
  i++;
21
  }
22
23
return 0;
24
}

Der Atmega wird mit einem 16Mhz Takt betrieben.
Die Periodendauer beträgt 62,5ns.
Laut Simulation dauert die while-Schleife 4Takte.
Der Pin0 am PortA müsste also alle 250ns umgeschaltet werden.
--> f=2Mhz

Leider beträgt die Frequenz 250Khz. Sie ist also um den Faktor 8 zu 
langsam.

Die PWM ist auch um den Faktor 8 zu langsam.

Gibt es vielleicht einen internen Vorteiler, welcher die Taktfrequenz 
runterteilt?

von Spess53 (Gast)


Lesenswert?

Hi

>Die PWM ist auch um den Faktor 8 zu langsam.

CKDIV8 Fuse

MfG Spess

von Thomas E. (thomase)


Lesenswert?

Faktor 8 sieht immer danach aus, daß in den Fuses das entsprechende 
Häkchen gesetzt ist.

mfg.

von A. R. (redegle)


Lesenswert?

Danke Ihr zwei.

Habe gerade das selbe im Datenblatt gelesen^^.

War die CKDIV8 Fuse.

Wobei ich mich Frage, warum das Standart ist.

von Spess53 (Gast)


Lesenswert?

Hi

>Wobei ich mich Frage, warum das Standart ist.

Da musst du Atmel fragen.

MfG Spess

von Philipp B. (philipp_burch)


Lesenswert?

A. R. schrieb:
> Wobei ich mich Frage, warum das Standart ist.

Ganz einfach: Wenn jemand den Prozessor in einer Schaltung mit 1.8V 
betreibt, dann könnte er ihn möglicherweise gar nicht in der Schaltung 
programmieren, weil die Betriebsspannung für 8MHz (Interner Clock) dann 
zu niedrig wäre. Ausserdem wird man ohnehin (fast) immer die Fuses 
verstellen müssen, wenn man etwas entwickelt, da spielt es dann auch 
keine Rolle mehr, ob das Häkchen noch eben entfernt wird.

von A. R. (redegle)


Lesenswert?

Klingt logisch danke.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Spess53 schrieb:
> Hi
>
>>Wobei ich mich Frage, warum das Standart ist.
>
> Da musst du Atmel fragen.
>
> MfG Spess

Nö das steht sogar im Datenblatt:

>> 8.2.1 Default Clock Source
>>  The device is shipped with internal RC oscillator
>>  at 8.0 MHz and with the fuse CKDIV8 programmed,
>>  resulting in 1.0 MHz system clock. The startup time
>>  is set to maximum and time-out period enabled.
>>  (CKSEL = "0010", SUT = "10", CKDIV8 = "0").
>> The default setting ensures that all users can make
>> their desired clock source setting using *any*
>> available programming interface.

von Hannes L. (hannes)


Lesenswert?

Davon abgesehen kann man den Systemtaktvorteiler auch per Software 
einstellen. Die CKDIV8-Fuse wirkt lediglich auf die Voreinstellung. Es 
gibt also keinen zwingenden Grund, die CKDIV8-Fuse zu verändern.

...

von Thomas E. (thomase)


Lesenswert?

A. R. schrieb:
> Wobei ich mich Frage, warum das Standart ist.

Weil die Controller für eine Spannung von 1,8 bis 5,5, Volt ausgelegt 
sind.
Bei der niedrigsten Spannung aber nur mit reduziertem Takt laufen.
Würde man die mit hohem Takt ausliefern, und das sind beim Attiny 45 
immerhin 16,5 MHz, würden sie mit 1,8V gar nicht oder fehlerhaft laufen.
Deshalb werden die mit 1 MHz ausgeliefert. Damit läuft es immer.

OK. der 2560 läuft sowieso erst ab 4,5 V. Aber alle sind eben gleich 
eingestellt. Und den Fehler mit der Clock-Fuse hast du heute auch 
zweimal gemacht: Das erste und letzte Mal. Ich denke, damit kann man 
leben.

mfg.

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.