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
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.
Der zweite Fall ist klar: 16.000 MHz /2400 /2 = 3333.33 Hz. Der erste ist mir unklar - Fehlmessung?
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.
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.
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.
c-hater schrieb: >> TCCR1B |= (1 << WGM12) | (1 << CS10); >> und OCR1A = 2399 bekomme ich diese Frequenz von 3333Hz. > ... unplausibler Quatsch Wieso das?
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.
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.
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...
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?
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
> 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.
Nein, der abgeschriebene Code ist nicht falsch.
1 | 16Mhz / (64 * 74) = 3378 Hz |
Durch dein Toggeln in der ISR halbierst du die Frequenz nochmal.
an StefanUs Nur am Rande - Sie vergessen immer das +1 bei Berechnungen mit OCR.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.