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
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
Hi
>zwei PWM Kanäle 0-255 !!
Je nach gewünschter PWM, Mode 1 oder 5 einstellen. Fertig.
MfG Spess
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 ?
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.
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 ?
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
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.
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
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!
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 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.