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.
Gast
#5262218
1 | |
2 | |
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.
Gast
#5262239
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.
Gast
#5262254
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.
Gast
#5262255
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.
Gast
#5262261
c-hater schrieb: >> TCCR1B |= (1 << WGM12) | (1 << CS10); >> und OCR1A = 2399 bekomme ich diese Frequenz von 3333Hz. > ... unplausibler Quatsch Wieso das?
Gast
#5262262
Das war falsch:
1 | |
Der Prescaler ist hier 1 nicht 8, also
1 | |
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.
Gast
#5262266
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.
Gast
#5262268
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...
Gast
#5262274
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
Gast
#5262322
> 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.
Gast
#5262423
Nein, der abgeschriebene Code ist nicht falsch.
1 | |
Durch dein Toggeln in der ISR halbierst du die Frequenz nochmal.
Gast
#5262426
an StefanUs Nur am Rande - Sie vergessen immer das +1 bei Berechnungen mit OCR.
Gast
#5262434
Danke für den Hinweis.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
