www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timer 1 als 2 x 8 Bit


Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zwei PWM Kanäle 0-255 !!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>zwei PWM Kanäle 0-255 !!

Je nach gewünschter PWM, Mode 1 oder 5 einstellen. Fertig.

MfG Spess

Autor: grobian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: grobian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hängst immer noch dem Gedanken an, dass die eine PWM den TCNTL 
benötigt und die andere den TCNTH.

Das ist falsch!
TCNTL und TCNTH bilden eine Einheit. Das sind die 2 Teile, aus denen der 
eine Zähler TCNT1 besteht! Die beiden zusammen bilden den Zähler!

Autor: Ingo Laabs (grobian)
Datum:

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

int main(void)
{

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

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

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

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

OCR1A = 0x0F;           // PWMA= 15
OCR1B = 0x20;           // PWMB= 32
  
while(1)
{
asm ("nop");
}
}

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.