timer 1 als 2 x 8 Bit

OP #1826682
Lesenswert?

Ist es eigentlich möglich den Timer 1 im Mega 32 so zu nutzen, dass ich 
2 unabhängige 8 Bit-Timer habe die ich mit als PWM nutzen kann. Im 
Datenblatt geht zwar hervor, dass ich die OCR setzen kann, aber in wie 
weit nutzbar kann ich nicht für meine Zwecke nicht erlesen.

Gruß aus Berlin
Gast #1826696
Lesenswert?

Hi

>Ist es eigentlich möglich den Timer 1 im Mega 32 so zu nutzen, dass ich
>2 unabhängige 8 Bit-Timer habe die ich mit als PWM nutzen kann.

Nein. Mit den 2 OC-Registern kannst du aber zwei PWM-Kanäle erzeugen.

>...aber in wie weit nutzbar kann ich nicht für meine Zwecke nicht erlesen.

Und deine Zwecke wären?

MfG Spess
Gast #1826773
Lesenswert?

Gut ok, jetzt will das Funktionelle nicht so richtig im meine Birne.
Der Timer 1 hat ein 16 Bit Zähler der aus TCNT1H und TCNT1L gebildet 
wird.
Ich gehe mal davon aus (vllt liegt hier mein Verständnissfehler), dass 
TNCT1H für eine PWM zuständig ist und TCNT1L für eine PWM zuständig ist. 
Der Zähler bekommt seinen Takt vom Quarz, den ich über den Prescaler 
teile. Jetzt fängt der Zähler an zu laufen bis TCNT1L den Wert 255 hat 
und sollte ja jetzt wieder abwärts laufen. Wie bekommt den jetzt der 
TCNT1H seinen Impuls ? Die müssen doch irgendwie parallel laufen oder ?
#1826787
Lesenswert?

grobian schrieb:

> Der Timer 1 hat ein 16 Bit Zähler der aus TCNT1H und TCNT1L gebildet
> wird.

Ja

> Ich gehe mal davon aus (vllt liegt hier mein Verständnissfehler), dass
> TNCT1H für eine PWM zuständig ist und TCNT1L für eine PWM zuständig ist.

Nein.

Die PWM entsteht in dem der Zählerwert (der in TCTN1H und TCNT1L 
realisiert ist), mit einem Vergleichswert verglichen wird. Mit einem 
Timer kann man soviele PWM machen, wie es Vergleichsregister gibt, deren 
Ergebnis auch nach aussen herausgeführt wird.

OCR1A und OCR1B sind dafür verantwortlich, dass man mit dem Timer1 2 
Stück PWM machen kann. Wenn es ein OCR1C (samt zugehöriger 
Infrastruktur) gäbe, dann könnte man 3 PWM machen. Mit einem OCR1D wären 
es dann 4, etc, etc.


Vielleicht nochmal nachlesen und darüber sinnieren, wie PWM eigentlich 
funktioniert.
Gast #1826795
Lesenswert?

Gut, dass ist mir ja soweit klar, dass ich die Zähler mit den 
Vergleichsregistern (OCR) vergleiche und damit meine PWM am 
entsprechenden Ausgang erzeuge. Was nicht sitzt ist, dass der TCNH über 
den TCNL realiesiert wird, nähmlich erst dann wenn TCNL über 255 
gelaufen ist. Wenn der TCNL bei 255 wieder rückwärts läuft wie bekommt 
TCNH zu senem Takt ?
Gast #1826819
Lesenswert?

Hi

>Was nicht sitzt ist, dass der TCNH über den TCNL realiesiert wird, nähmlich
>erst dann wenn TCNL über 255 gelaufen ist. Wenn der TCNL bei 255 wieder
>rückwärts läuft wie bekommt TCNH zu senem Takt ?

Das ist ein 16-Bit-Zähler. TCNTnL/TCNTnH zählen überhaupt nicht. Die 
dienen lediglich dem Zugriff auf die unteren/oberen 8-Bit des Zählers. 
Sieh dir einfach mal die Bilder (so ab Figure 40) im Datenblatt an, und 
versuche mal den Aufbau eines Timers zu verstehen.

MfG Spess
#1826825
Lesenswert?

grobian schrieb:
> Gut, dass ist mir ja soweit klar, dass ich die Zähler mit den
> Vergleichsregistern (OCR) vergleiche und damit meine PWM am
> entsprechenden Ausgang erzeuge. Was nicht sitzt ist, dass der TCNH über
> den TCNL realiesiert wird, nähmlich erst dann wenn TCNL über 255
> gelaufen ist. Wenn der TCNL bei 255 wieder rückwärts läuft wie bekommt
> TCNH zu senem Takt ?

Wozu brauchst du TCNTH bei einer 8-Bit PWM?

Du kannst einen 5 stelligen Dezimalzähler bauen, der theoretisch von 0 
bis 99999 zählen kann. Wenn du ihn aber nur benutzt um ständig von 0 bis 
100 und wieder zurück zu zählen, so ist das ja auch ok. Du könntest wenn 
du wolltest, von 0 bis 10000 zählen lassen. Aber da er nur bis 100 
zählen will, kann er das selbstverständlich tun.
#1826827
Lesenswert?

grobian schrieb:
> Gut, dass ist mir ja soweit klar, dass ich die Zähler mit den
> Vergleichsregistern (OCR) vergleiche und damit meine PWM am
> entsprechenden Ausgang erzeuge. Was nicht sitzt ist, dass der TCNH über
> den TCNL realiesiert wird,

TCNH, TCNL? Du hast vermutlich A und B vergessen.

> nähmlich erst dann wenn TCNL über 255
> gelaufen ist. Wenn der TCNL bei 255 wieder rückwärts läuft wie bekommt
> TCNH zu senem Takt ?

Rückwärts läuft der Timer nur im Phase-correct-Mode, den braucht man 
aber nur sehr selten. Meist genügt der Fast-PWM-Mode, da läuft der Timer 
nur vorwärts.

Um mit beiden Compare-Einheiten (A und B) separate Tastgrade (duty 
cycle) einzustellen, muss man unterschiedliche Werte in die beiden 
Compare-Register (A und B) schreiben. Da der Timer 16-bittig arbeitet, 
müssen diese Werte natürlich auch 16-bittig sein.
Willst Du den Zählbereich des Timers begrenzen, dann schau Dir mal das 
ICP-Register an. Bei vielen AVRs kann man damit nämlich den Zählumfang 
begrenzen, also den "TOP-Wert" bestimmen. Ob der Mega32 dieses Feature 
bietet, weiß ich jetzt nicht, da musst Du mal im Datenblatt nachschaun. 
Der Nachfolger (Mega324) kann es vermutlich (bin jetzt zu faul zum 
Nachschaun).

MfG
OP #1827741
Lesenswert?

Also wäre das jetzt eine Wald und Wiesen PWM, nicht Invertierend
1
#include <avr/io.h>
2

3
int main(void)
4
{
5

6
DDRD = (1<<PD5) | (1<<PD4);     // PORT auf Ausgang
7

8
    // Mode 1
9
TCCR1A |= (0<<WGM11) | (1<<WGM10);
10
TCCR1B |= (0<<WGM13) | (0<<WGM12);  
11

12
  // nicht invertierend
13
TCCR1A |= (1<<COM1A1)| (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0);
14

15
TCCR1B |= (1<<CS01);         // Prescaler  = 8 und Start Timer
16

17
OCR1A = 0x0F;           // PWMA= 15
18
OCR1B = 0x20;           // PWMB= 32
19
  
20
while(1)
21
{
22
asm ("nop");
23
}
24
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren