- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 22

Thema: Atmega Timer problem

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hallo Technik_Amateur,
    den Ablauf der Timerkonfiguration sehe ich folgendermaßen:

    TCCR1A = (1<<COM1A1) | (1<<WGM11); //clear OC1A on compare match, set at bottom (non-inverting)
    TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS11); //WGM12,WGM13,WGM11 -> Mode14 -> Fast PWM, ICRn, set OCR1A at Bottom | prescaler = 8

    Der Timer läuft durch das CS11 los, ICR1 ist aber noch auf seinem Initialwert 0.

    ICR1 = 19999; // ICR1 = 19999 als TOP-Wert, hier werden die 20ms gebildet (8MHz / 8 * (1 + 19999)) = 50Hz
    Erst hier wird der richtige TOP-Wert definiert. Keine Ahnung was passiert, wenn der Timer versucht mit TOP Wert 0 loszulaufen. Wird vermutlich keine spürbaren Auswirkungen haben. Logischer wäre, das ICR1 vor Start des Timers zu setzten.

    OCR1A = 1499; // OCR1A = 1499, Servomittelstellung, (8MHz / 8 * (1 + 1499)) = 666,6Hz = 1,5ms
    1499 für 1500µs Pulsweite stimmt. Hab ich mal mit einem Mega88 getestet; ist zwar ein anderer µC aber die Timerbeschreibung ist sehr ähnlich, wenn nicht gleich. Ist in meinem ersten Post falsch aufgeführt

    EDIT: Wenn der Timer läuft und OCR1A auf 0 ist und bleibt, gibt es in diesem Fall 1µs spikes bei jedem Durchlauf am OC1A Pin (alle 20ms).

    Man sollte auch noch beachten, wann das OCR1A Register upgedatet wird. Im Mode 14 ist es bei TCNT1=0 (BOTTOM). Wenn der Timer schon läuft, wird beim Schreiben auf OCR1A der wert gepuffert und erst bei Erreichen von TCNT1=BOTTOM dann übernommen und aktiv.

    Logischer wäre auch hier, das OCR1A vor Starten des Timers zu initialisieren.

    Auch könnte man sich überlegen, ob man das COM1A1 Bit erst zum Schluß setzt und damit PD5 auf die Compare Unit/waveform Generation Unit durchschaltet, wenn der Timer komplett initialisiert ist und läuft.

    Das meiste ist für den Betrieb nicht so wichtig, da es nur den ersten Timerzyklus betrifft und man hier Unsauberkeiten am Servo wahrscheinlich nicht erkennen kann. Könnte aber hilfreich bei der Bugsuche sein.

    Möchte noch sagen, daß ich auch noch Amateur bei der µC Programmierung bin und nicht alles richtig sein muß, was ich hier geschrieben habe. C verstehe ich auch nur rudimentär und enthalte mich auch erstmal einem Kommentar zu Deinem restlichen Programm.

    Gruß
    Searcher
    Geändert von Searcher (20.11.2013 um 13:06 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. ATMEGA 16 TIMER-Problem
    Von fulltime im Forum C - Programmierung (GCC u.a.)
    Antworten: 29
    Letzter Beitrag: 16.03.2012, 15:36
  2. [ERLEDIGT] ATMega 16 Timer 1 CTC Probleme
    Von Franky55555 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 14.06.2011, 18:18
  3. Atmega 8 Timer
    Von woodeye im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 25.09.2009, 16:44
  4. Atmega mit >3 Timer
    Von manhunt im Forum AVR Hardwarethemen
    Antworten: 12
    Letzter Beitrag: 14.12.2008, 15:10
  5. Atmega 32 8-Bit Timer Interrupt
    Von Benni im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 23.07.2007, 22:08

Berechtigungen

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

LiFePO4 Speicher Test