Atmega48 PWM

  • Ok, danke euch beiden für die Ausführlichen Beiträge.
    aber langsem steige ich aus ?( , hab da grad gar keine Ahnung, wie das realisiert wird.
    Kann mir das beschriebene mal jemand in Form eines Bsacom Codes zeigen?
    vllt. steig ich dann wieder durch.

  • Pesi:
    Bei der Manchester-Codierung des RC5-Protokolls würde man dann statt nur mit einer Flanke eben mit dem Pin-Change-Interrupt (bzw. beidflankig) arbeiten und in der ISR dann jeweils auch den Pin-Zustand speichern. Dann könnte man analog zu vorher die Zeiten bestimmen, nur jetzt eben für Low- und High-Pulsweiten getrennt. Mit dieser Information liesse sich dann auch ein RC5 dekodieren.
    Bei HW-PWM sind nur die beiden Modi Phase-Correct und Phase-and-Frequency-Correct (bei beiden zählt der Timer rauf und wieder runter) für LED-Dimm-Anwendungen geeignet, da der Fast-PWM-Modus (hier zählt der Timer hoch und macht nen Überlauf) bei Compare-Wert = Bottom-Wert (= 0) immer noch einen ganz kurzen Spike von 1 Timer-Taktzyklus Länge produziert, also z.Bsp. eine LED eben nicht ganz ausschalten würde.
    In den beiden anderen Modi ist es nun aber so, dass der Timer-Overflow nur beim 'unteren Überlauf' stattfindet. Eine Auswertung von beiden Zähl-Umdrehungen (also bei BOTTOM und bei TOP) ist nur mit Timer1 und auch nur dann möglich, wenn für TOP nicht die drei vordefinierten Bereiche (8, 9 und 10 Bit) sondern entweder das Register ICR1 oder aber OCR1A gewählt werden. Dann wird der dem jeweiligen Register zugehörige Interrupt Flag gesetzt, sobald Timer1 den eingetragenen Wert dieses Registers (dann der TOP-Wert des Timers) erreicht. Somit kann man dann bei beiden Extremen einen Interrupt erfassen und damit auch für die korrekte Anzahl-Takte-Ermittlung berücksichtigen.


    Gruss
    Neni

  • Ha,



    habe mich geirrt es sind 2441 Hz PWM !



    Als erstes hier mal die Datenstruktur:


    Code
    typedef struct 
    { 
      uint16_t address;
      uint8_t  command;
      uint8_t  nrepeat;
      uint8_t  valid;
    } IR_DATA;


    'address' enthält die Geräteadresse der FB und kann beim Extended NEC Protokoll 16 Bit enthalten.


    'command' ist ja klar


    'nrepeat' Zählt die Anzahl der Wiederholungen


    'valid' ist 1 wenn die Daten korrekt sind 0, wenn ein Fehler auftrat.



    Hier wird die IR/PWM routine initialisiert:




    Timer overflow wird wie folgt behandelt, es werden in g_nTicks die Anzahl der 0.5ms gezählt, solange die < 255 sind ansonsten wurde kein korrekte Übertragung empfangen:



    IR PIN Change Interrupt:




    Ist zwar nicht das RC5 Protokoll und man könnte noch die Verbesserung von synvox einbauen, aber vielleicht eine hilfreiche Anregung .


    Folgende Übersichten sind übrigens auch sehr Hilfreich und übersichtlich für PWM


    ATMega32,ATMega168


    lg. Sol