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.
1
.nolist
2
.include "tn2313def.inc"
3
.list
4
5
.def mpr = r16
6
7
rjmp RESET ; Reset Handler
8
reti ;INT0 ; External Interrupt0 Handler
9
reti ;INT1 ; External Interrupt1 Handler
10
reti ;TIM1_CAPT ; Timer1 Capture Handler
11
rjmp TIM1_COMPA ; Timer1 CompareA Handler
12
rjmp TIM1_OVF ; Timer1 Overflow Handler
13
reti ;M0_OVF ; Timer0 Overflow Handler
14
reti ;USART0_RXC ; USART0 RX Complete Handler
15
reti ;USART0_DRE ; USART0,UDR Empty Handler
16
reti ;USART0_TXC ; USART0 TX Complete Handler
17
reti ;ANA_COMP ; Analog Comparator Handler
18
reti ;PCINT ; Pin Change Interrupt
19
reti ;TIMER1_COMPB ; Timer1 Compare B Handler
20
reti ;MER0_COMPA ; Timer0 Compare A Handler
21
reti ;TIMER0_COMPB ; Timer0 Compare B Handler
22
reti ;USI_START ; USI Start Handler
23
reti ;USI_OVERFLOW ; USI Overflow Handler
24
reti ;EE_READY ; EEPROM Ready Handler
25
reti ;WDT_OVERFLOW ; Watchdog Overflow Handler
26
27
28
reset:
29
ldi mpr, low(ramend)
30
out spl, mpr
31
32
sbi DDRB, 1 ; Led für Interrupt Anzeige (Toggle)
33
sbi PortB,1
34
35
sbi DDRB, 3 ; OC1A Led (Dimmbar)
36
sbi PortB,3
37
38
; Toggle on Compare Match / Mode9 / Prescaler1 / TOIE1 und OCIE1
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
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
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
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
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
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
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 !!