Forum: Mikrocontroller und Digitale Elektronik Prescaler-Einstellung Atmega 1284p


von Ewald S. (jeew)


Angehängte Dateien:

Lesenswert?

Hallo und ein erfolgreiches Neues Jahr.
Für einen Schrittmotor-Treiber habe ich das anhängende Programm für 
einen Atmega 1284p abgeschrieben. Allerdings erreiche ich nicht die 
angegebene Frequenz von 3333 Hz bei OCR1A =74 und Vorteiler =64
TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10);
hier nur 166,66 Hz
Mit dieser Einstellung
TCCR1B |=  (1 << WGM12) | (1 << CS10);
und OCR1A = 2399 bekomme ich diese Frequenz von 3333Hz.
Am 16 MHz- Quarz kann ich die 16 MHz messen.
Da ich leider kein englisch kann, frage ich hier in diesem Forum nach, 
was ist da falsch?
Dazu noch eine andere Frage, wie kopiert man den Code aus dem 
Atmel-Studio in dieses Textfeld.
mfg E.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

1
166,66 Hz * 64 * 74 = 789 kHz
2
3333 Hz * 8 * 2399 = 64 Mhz

Das sieht alles ziemlich unplausibel aus. Kann es sein, dass du falsch 
gemessen hast oder Abblock-Kondensatoren vergessen hast?

> wie kopiert man den Code aus dem Atmel-Studio in dieses Textfeld.

Wenn du Text schreibst, erscheint direkt oben drüber eine verkürzte 
Anleitung und ein Link zu mehr Anleitung.

von S. Landolt (Gast)


Lesenswert?

Der zweite Fall ist klar:
16.000 MHz /2400 /2 = 3333.33 Hz.
Der erste ist mir unklar - Fehlmessung?

von Ewald S. (jeew)


Lesenswert?

Stefan U. schrieb:
> Das sieht alles ziemlich unplausibel aus. Kann es sein, dass du falsch
> gemessen hast oder Abblock-Kondensatoren vergessen hast?

Der Aufbau ist eine fertig bestückte Kauf-Platine (vor etwa 2-3 Jahren 
von Timo Gruss, leider gibt es diese Firma nicht mehr ??). Gemessen habe 
ich mit dem Oszi und auch mit einem Frequenzzähler. Ich habe nur den 
Schaltplan, aber kein Laoutplan. Im Schaltplan sind für den Quarz 22 pF 
eingetragen und diese sind mit dem Quarz unter dem Ic.
mfg E.

von c-hater (Gast)


Lesenswert?

Ewald S. schrieb:

> Für einen Schrittmotor-Treiber habe ich das anhängende Programm für
> einen Atmega 1284p abgeschrieben. Allerdings erreiche ich nicht die
> angegebene Frequenz von 3333 Hz bei OCR1A =74 und Vorteiler =64

Das kannst du auch nicht, allenfalls die Hälfte davon. Denn mit den 
angegebenen Werten erhältst du zwar näherungsweise die gewünschten 
3.3kHz, allerdings ist das die Überlaufrate des Timers, was 
gleichbedeutend mit der Aufrufrate der ISR ist.

Da du zwei zwei Aufrufe der ISR für eine Periode der Schwingung 
benötigtst, (einmal Pegel hoch, einmal Pegel runter), ergibt sich für 
die erzeugte Schwingung am Ausgang nur die halbe Frequenz der 
Überlaufrate.

> TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10);
> hier nur 166,66 Hz

> TCCR1B |=  (1 << WGM12) | (1 << CS10);
> und OCR1A = 2399 bekomme ich diese Frequenz von 3333Hz.

Das ist beides vollkommen unplausibler Quatsch. Entweder Müll 
programmiert oder Müll gemessen.

von S. Landolt (Gast)


Lesenswert?

Zu den "Vorlagenwerten": diese sind wohl um den Faktor 2 zu groß, denn 
aus dem Umschalten in der ISR resultiert ja eine Halbierung der 
Frequenz.

von S. Landolt (Gast)


Lesenswert?

c-hater schrieb:

>> TCCR1B |=  (1 << WGM12) | (1 << CS10);
>> und OCR1A = 2399 bekomme ich diese Frequenz von 3333Hz.

> ... unplausibler Quatsch

Wieso das?

von Stefan F. (Gast)


Lesenswert?

Das war falsch:
1
3333 Hz * 8 * 2399 = 64 Mhz

Der Prescaler ist hier 1 nicht 8, also
1
3333 Hz * 1 * 2399 = 8 Mhz

Das könnte stimmen. Du hast wohl die Frequenz an PD1 gemessen, die ist 
halb so hoch wie die Anzahl der Interrupts (pro Sekunde) weil du den Pin 
bei jedem Interrupt toggelst.

> Der erste ist mir unklar - Fehlmessung?
Ja, da komme ich auch immer noch nicht auf einen grünen Zweig, egal wie 
ich die Zahlen drehe und Wende.

Du hast meine Frage zu den Abblock Kondensator nicht beantwortet. Jedes 
IC sollte mindestens einen möglichst nahe an VCC und GND haben.

> ... unplausibler Quatsch
Nein, das passt absolut zum Datenblatt.

von Stefan F. (Gast)


Lesenswert?

Mir ist gerade was aufgefallen. Und zwar setzt du die Konfigurationsbit 
mit der Oder Funktion "|=". Das funktioniert nur, wenn das Register 
vorher den Wert 0 hatte. Nach einem Reset ist das der Fall, allerdings 
könnte ich mit vorstellen, dass ein eventuell vorhandener Bootloader 
eine andere Ausgangslage schafft.

von c-hater (Gast)


Lesenswert?

Stefan U. schrieb:

>> ... unplausibler Quatsch

> Nein, das passt absolut zum Datenblatt.

Stimmt, da habe ich dann beim Eintippen in den TR wiederum nicht an den 
Faktor 2 gedacht...

von S. Landolt (Gast)


Lesenswert?

Da der zweite Fall funktioniert, kann ich mir nicht vorstellen, dass 
Probleme durch fehlende Abblockkondensatoren vorliegen; dito in Bezug 
auf eventuellen Bootloader, welcher Wert für welches SFR sollte da 
vorbelegt sein, um einen solchen Fehler hervorzurufen?

von Ewald S. (jeew)


Lesenswert?

Hallo zusammen.
Bevor ihr weiter diskutiert, ich wollte nur wissen, ob an dem 
abgeschriebenen Code was falsch ist. so wie ich jetzt verstehe, ist er 
falsch. Und mein experimentell gefundener Code ist richtig.
Abblockkondensatoren sind ganz kurz unterhalb des Ic verschaltet.
Ich habe jetzt noch eine Frage. Gibt es eine Möglichkeit so, dass für 
meine benötigte Frequenz (3333Hz) der Wert von OCR1A größer ist um eine 
feinstufigere Frequenzeinstellung zu erhalten? Es muss nicht so 
programmiert sein wie ich es vorgab.
mfg

von S. Landolt (Gast)


Lesenswert?

> so wie ich jetzt verstehe, ist er falsch
Ja, siehe:
Beitrag "Re: Prescaler-Einstellung Atmega 1284p"

> Gibt es eine Möglichkeit so...der Wert von OCR1A größer ist
Nicht dass ich wüsste, schließlich steht der Prescaler schon auf 1.

von Stefan F. (Gast)


Lesenswert?

Nein, der abgeschriebene Code ist nicht falsch.
1
16Mhz / (64 * 74) = 3378 Hz

Durch dein Toggeln in der ISR halbierst du die Frequenz nochmal.

von S. Landolt (Gast)


Lesenswert?

an StefanUs
Nur am Rande - Sie vergessen immer das +1 bei Berechnungen mit OCR.

von Stefan F. (Gast)


Lesenswert?

Danke für den Hinweis.

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.