-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: ATmega32 mit externem Quarz, PWM falsch

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36

    ATmega32 mit externem Quarz, PWM falsch

    Anzeige

    Hallo zusammen!

    Ich habe einen ATmega32 und kann mit dem internen 8MHz-Quarz ein relativ gutes PWM Signal erzeugen (1-2ms, Wiederholung alle 20 ms, typisch für Modellbau).

    Aber die Genauigkeit weicht einige Prozent vom Sollwert ab, das "sagen" einerseits die Servos und andererseits mein Oszi.

    Deshalb habe ich mir gedacht ich schließe einen externen Quarz an. Ich habe einen 14,7456 MHz-Quarz gewählt, da der für die serielle Schnittstelle optimal ist.

    Ich arbeite wieder mit einem Prescaler 8, Mode 14 Fast PWM, nicht invertiert. ergibt also ca. 36864 Takte je 20ms.

    Im AVR Studio habe ich als Takt gewählt: Ext. Crystal/Resonator HF, Startuo 16K CK +64ms

    Ich bekomme nun eine Ausgabe Frequenz von 1Hz, statt der rund 50Hz.
    Der Fehler ist also Faktor 50, was irgendwie systematisch zu sein scheint.

    Hat von Euch vielleicht jemand eine Idee?

    Liebe Grüße und Danke!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    28
    Beiträge
    607
    1Hz ist schon echt viel!
    Hast du den Quarz mit 20pF Kondensatoren gegen GND richtig beschaltet?
    Hast du im Makefile die neue Taktfrequenz eingestellt?
    Prescaler sicher richtig gewählt?

    Was passiert, wenn du den Maximalwert im Timer halbierst? Halbiert sich dann auch die PWM-Frequenz? (kann ja sein, dass der Fehler woanders liegt)

    Gruß, Yaro

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Ich habe gerade im Datenblatt nochmal nachgeschaut, dort steht bei externem Quarz über 1 MHz sollte man den Quarz mit 12-22 pF verschalten. Das hatte ich auch gemacht, beide Füße mit GND verbunden. nun habe ich diese durch 15pF ersetzt und das Problem ist das gleiche geblieben.

    Prescaler habe ich auf dem Papier nachgerechnet und zum Vergleich nochmal den internen Quarz zum Vergleich hergenommen. das scheint zu passen.

    Quarz 14745600 Hz
    Prescaler 8
    ergibt prescaled Frequency 1843200 Hz
    bei gewollter Periode von 20ms (50Hz)
    ergibt sich 36864 Takte je 20ms (ICR1) oder 50 Hz Ausgabefrequenz
    bei mir leider nur 1,irgendwas Hz...

    Die Taktfrequenz habe ich im AVR Studio ausgewählt, das setzt mir die Fuses und ersetzt damit ja mein Makefile.

    Halbiere ich den maximalen Wert des Timers (ICR1), verdoppelt sich die Frequenz (sollte sie ja auch).

    Grüße,
    emmPunkt

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Ich habe jetzt bei der Suche nach einer anderen Sache etwas entdeckt. Im Thread "Atmega32 führt Program nicht aus [gelöst]" schreibt Kollege _R2D2, dass das AVR Studio beim Atmega die falschen Fuses schreibt, ist das wahr bzw. ein bekanntes Problem, oder Gegenfrage: Nutzt jemand den Atmega32 erfolgreich mit externem Quarz und schreibt seine Fuses mit AVR Studio?

    Ich arbeite jetzt mit dem internen Quarz und mache ja nach Raumtemperatur ein anderes Offset. Das ist aber ganz klar nur eine Notlösung.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Nutzt jemand den Atmega32 erfolgreich mit externem Quarz und schreibt seine Fuses mit AVR Studio?
    Ja, mach ich und hatte eigentlich noch keine Probleme damit.
    Ich nutze sehr oft externe 8MHz Quarze am ATMEGA 16 und 32.
    Auch mit einem 16MHz Quarz hat bei mir bis jetzt immer alles geklappt.

    Ich nutze dabei die Einstellung:
    Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms

    Ich hab die AVR Studio Version 4.17 Built 666 und den AVR ISP MKII als Programmer.
    Du hast aber schon die Fuses richtig gesetzt bevor Du das .elf File abgespeichert hast ?

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    So, da haste mich erwischt
    Die Einstellung wie Du sie beschrieben hast, nutze ich auch.
    Allerdings: Fuses habe ich nicht gesetzt, nur die Einstellung gewählt (bin so ein typischer User der denkt, dass es dann funktioniert).
    *.elf habe ich in meinem Leben noch nicht gehört oder gesehen.
    Nutze AVR Studio 4.18 b692 mit AVR ISP MK II.

    Scheinbar könnte das Problem hier liegen.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Am .elf File kann es dann eigentlich nicht liegen.
    Du musst natürlich die Einstellungen im Fuses Fenster machen und dann "Program" in diesem Fenster anklicken.

    Das .elf File ist eine Art Steuerdartei.
    Man macht alle benötigten Einstellungen ( Fuses Pfande usw. ) und macht dann ein neuse .elf File.

    Will man dann mehrere Controller nacheinander Programmieren, braucht man nur dieses gespeicherte .elf File starten und alle Einstellungen und Programmierungen am Controller werden erledigt.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Nun ich klicke den Program Button, siehe auch das angehängte Bild.
    Nun ist mir gerade aufgefallen, dass im Build-Fenster aber DF_CPU 8MHz versteckt ist. Das dürfte dann doch nicht mehr der Fall sein, oder?

    Build-Meldung:
    avr-gcc -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT MG_S.o -MF dep/MG_S.o.d -c ../MG_S.c

    Fuses-Fenster: s. Anhang

    Was ist denn da nun los? Da liegt doch der Fehler...
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken unbenannt_295.jpg  

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    07.04.2010
    Beiträge
    36
    Ok: ich kann nun meine Frequenz in der Build-Zeile sehen!
    Grund: Unter Project...Configuration...General stand noch immer 8MHZ, da steht nun meine neue Frequenz, aber statt 50Hz PWM Signal messe ich noch immer rund 1Hz.

    Mein Latein ist zu Ende

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Mein Latein ist zu Ende
    Mir fallen noch ein paar Sachen ein.

    1. Du solltest die JTAGEN Fuse deaktivieren.
    Kann zwar mit deinem Problem eigentlich nichts zu tun haben, belegt aber einzelen Pins des Ports C.

    2. Hast Du in Deiner Software irgendwo den Watchdog aktiviert und es komt nicht rechtzeitig der "WDR"

    Die beiden Sachen fallen mir dan noch ein.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •