mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 Bit PWM ATtiny2313 Mode9


Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi @ all !!

Habe leider das Problem, den 16 T/C vom ATtiny2313 nicht zu verstehen.

Phase and Frequency Correct PWM Mode9

Will eine Led mittels 16 Bit Timer Mode9 am Ausgang OC1A an PB.3 Dimmen.
(Varibles Puls Pausen Verhälnis einstellbar)

Lt. Datenblatt vom ATtiny2313 läuft TCNT1 bis zum Compare Match was im 
OCR1A einstellbar ist hinauf, kehrt die Richtung um, und läuft wieder 
Richtung Bottom (Null). (Seite 102 vom PDF des ATtiny 2313)

Leider ist in meinem Beispielcode das Puls/Pausenverhältnis immer 
gleich,
da ich es bis Dato nicht geschafft habe ein variables PulsPausen 
Verhälnis hinzbekommen.

Frage:
Wie kann ich das PulsPausenVerhälnis Variabel gestalten ??

Ihr sollt keinesfalls meine Hausaufgaben erledigen, dennoch Bitte ich 
Euch um eine Hilfestellung, da ich schon mehrere Tage vor diesem Problem 
sitze. Vielleicht mit Beispielcode.

Hier der Quellcode.
.nolist
.include "tn2313def.inc"
.list

.def  mpr = r16

   rjmp  RESET             ; Reset Handler
   reti  ;INT0             ; External Interrupt0 Handler
   reti  ;INT1             ; External Interrupt1 Handler
   reti  ;TIM1_CAPT        ; Timer1 Capture Handler
   rjmp  TIM1_COMPA        ; Timer1 CompareA Handler
   rjmp  TIM1_OVF          ; Timer1 Overflow Handler
   reti  ;M0_OVF           ; Timer0 Overflow Handler
   reti  ;USART0_RXC       ; USART0 RX Complete Handler
   reti  ;USART0_DRE       ; USART0,UDR Empty Handler
   reti  ;USART0_TXC       ; USART0 TX Complete Handler
   reti  ;ANA_COMP         ; Analog Comparator Handler
   reti  ;PCINT            ; Pin Change Interrupt
   reti  ;TIMER1_COMPB     ; Timer1 Compare B Handler
   reti  ;MER0_COMPA       ; Timer0 Compare A Handler
   reti  ;TIMER0_COMPB     ; Timer0 Compare B Handler
   reti  ;USI_START        ; USI Start Handler
   reti  ;USI_OVERFLOW     ; USI Overflow Handler
   reti  ;EE_READY         ; EEPROM Ready Handler
   reti  ;WDT_OVERFLOW     ; Watchdog Overflow Handler


reset:
   ldi   mpr, low(ramend)
   out   spl, mpr

   sbi   DDRB, 1              ; Led für Interrupt Anzeige (Toggle)
   sbi   PortB,1

   sbi   DDRB, 3              ; OC1A Led (Dimmbar)
   sbi   PortB,3

; Toggle on Compare Match / Mode9 / Prescaler1 / TOIE1 und OCIE1

   ldi   mpr, 0<<COM1A1|1<<COM1A0|0<<COM1B1|0<<COM1B0|0<WGM11|1<<WGM10
   out   tccr1a, mpr

   ldi   mpr, 0<<ICNC1|0<<ICES1|1<<WGM13|0<<WGM12|0<<CS12|0<<CS11|1<<CS10
   out   tccr1b, mpr

   ldi   mpr, 1<<TOIE1|1<<OCIE1A|0<<OCIE1B|0<<ICIE1
   out   timsk, mpr

   sei                     ; Interrupts freigeben

   rjmp main

;##### Tim1_CompA #####

TIM1_COMPA:
   cli
   ldi   mpr, high(9216)   ; 1. High Byte schreiben
   out   ocr1ah, mpr
   ldi   mpr, low(9216)    ; 2. Low Byte schreiben
   out   ocr1al, mpr

   reti                    ; ***** Tim1_CompA Ende *****

;##### TIM1_OVF #####

TIM1_OVF:                  ; Toggle Led + Timer1 Vorladen
   cli
   ldi   mpr, high(2000)   ; 1. High Byte schreiben  
   out   tcnt1h, mpr
   ldi   mpr, low(2000)    ; 2. Low Byte schreiben
   out   tcnt1l, mpr

   sbic  PortB, 1          ; Toggle Led  an PB.1
   rjmp  ClrBit_Now
   sbi   PortB, 1
   rjmp  BitReady
ClrBit_Now:
   cbi  PortB, 1
BitReady:

   reti                   ; ***** TIM1_OVF Ende *****

main:

   rjmp main

In diesem Fall beträgt die High und Low Phase ohne den Timer Vorzuladen 
je 5 ms. Macht also 100 Hz.
Mit Vorgeladenem Timer bleibt jedoch das PulsPausenVerhälnis gleich !

Ich wollte nicht mit allen meinen gescheiterten Versuchen diesen Beitrag 
ZUMÜLLEN! Ich bitte um Verständnis

Danke schon mal an dieser Stelle für Euer Bemühen !

mfg Roland

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Dir mal den entsprechenden Teil des AVR Tutorials angeschaut?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM

Volker

Autor: Marc Donner (cosinus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso leadst du das OCR1A bei jedem CompareMatch immer neu? Und fuer ein 
einfaches Dimmern einer LED sollte auch die Fast-PWM gehen. Set Output 
on Bottom, clear Output on compare Match.
Schreib doch mal ein ganz simples Program um das zu testen. So nach dem 
Motto:

init_timer
load value in OCR1A
while 1

Interrupts muessen fuer die Hardware PWM nicht aktiviert sein, ausser du 
brauchst unbedingt den Preload.

Gruss
Marc

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Im Timer Mode 9 ist OCR1A dein Top-Wert. Damit wird die Frequenz der PWM 
bestimmt. Dein Taktverhältnis wird mit OCR1B eingestellt. Der Wert von 
OCR1B darf sich zwischen 0 und OCR1A bewegen. Einen Overflow Interrupt 
wird nicht ausgelöst! Deine Vorladerei ist Unsinn. Um die Led zu dimmen 
muss die an OC1B angeschlossen werden.

MfG Spess

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal für die Zahlreichen Antworten.

> Hast Du Dir mal den entsprechenden Teil des AVR Tutorials angeschaut?

Ja natürlich. Aber die meisten sind leider alle in C erklärt.

> Und fuer ein einfaches Dimmern einer LED sollte auch die Fast-PWM gehen.
> Set Output on Bottom, clear Output on compare Match.

Ja genau sehe ich genau so.
Jedoch bin ich gerade dabei für jeden Timer (Timer0 und Timer1) ein 
Beispiel zu Entwickeln, um daraus zu lernen.
In der Praxis würde ich natürlich nie einen 16-Bit Timer für eine Led 
hernehmen. Absoluter unsinn natürlich.

Hoffe jetzt ist alles klar warum ich das mache. Einfach das ich mal 
endlich den 16Bit Timer raffe !!
Den 8Bit Timer habe ich z.B. schon durchgenommen, hatte nie gedacht, das 
ich hier Probleme kommen könnte.

> Im Timer Mode 9 ist OCR1A dein Top-Wert. Damit wird die Frequenz der PWM
> bestimmt. Dein Taktverhältnis wird mit OCR1B eingestellt.

Danke für diesen Lösungsansatz. Werde ich ausprobieren.

>Um die Led zu dimmen muss die an OC1B angeschlossen werden.

Denke ich nicht, denn lt. Datenblatt steht für mein Beispiel:

WGM13=1: Toggle OC1A on Compare Match, OC1B reserved. (Seite 107)
=====================================================

mfg Roland

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, nochwas

Im AVR-Studio will ich das nicht Simulieren. Hier sind mir einfach zu 
viele BUGS enthalten. Mann weiß hier nie ob es auch stimmt !!!

mfg Roland

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>WGM13=1: Toggle OC1A on Compare Match, OC1B reserved. (Seite 107)

Das ergibt aber keine PWM, Da OCR1A der Topwert ist und normalerweise 
nicht verändert wird. Sieh dir mal das Diagramm auf S.104 an. Dort wirst 
du auch sehen, das sich das PWM-Verhalten nur auf COMnx1:0 = 2 oder 3 
bezieht.

MfG Spess

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Das ergibt aber keine PWM, Da OCR1A der Topwert ist und normalerweise
>
> nicht verändert wird. Sieh dir mal das Diagramm auf S.104 an. Dort wirst
>
> du auch sehen, das sich das PWM-Verhalten nur auf COMnx1:0 = 2 oder 3
>
> bezieht.

Ich denke mal jetzt hast es auf den Punkt getroffen. Komme mit diesen 
Diagrammen nicht klar.
Dies ist die einzige Erklärung für mich warum ich nicht zurecht komme.

Tja, ich weiß das ich nichts weiß :-)

Ich versuche mal die Diagramme richtig zu Interpretieren.

Dank an spess53 !!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.