Forum: Mikrocontroller und Digitale Elektronik ATtiny461 TIMER1 im PWM-Modus


von Marcus (Gast)


Lesenswert?

Hallo,

ich möchte den TIMER1 nutzen um mir am PIN 8 (OC1D) ein PWM-Signal zu 
erzeugen.

Die Register habe ich so konfiguriert:

Ddra = &B11111000        'Port A -> Bit 3 bis 7 als Ausgang
Porta = &B00000000

Ddrb = &B00001111        'Port B -> Bit 0 bis 3 als Ausgang
Portb = &B00000000

Tccr1a = &B00000000
Tccr1b = &B00000001
Tccr1c = &B00001001
Tccr1d = &B00000000

aber am PIN 8 tut sich nix !?

Sieht jemand mein Problem ?

Vielen Dank für Eure Hilfe !

Gruß Marcus

von Stefan E. (sternst)


Lesenswert?

Marcus schrieb:
> aber am PIN 8 tut sich nix !?
>
> Sieht jemand mein Problem ?

1) Pin ist nicht auf Ausgang geschaltet.
2) Duty-Cycle ist 0.

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Zuerst einmal ist es eine Katastrophe, wie du Code schreibst.

Nutze doch einfach mal Schiebeoperationen, so sieht man auf einen Blick, 
was du eingestellt hast.

was erkennst du, wenn du

Marcus schrieb:
> Tccr1b = &B00000001

liest? Richtig, gar nix.

Was erkennst du, wenn du

TCCR1B = (1<<CS00);

liest? richtig, Prescaler auf 1 gestellt.

Ist zum Schluss beides das gleiche, aber man erkennt es einfach viel 
besser.

Zu deinem Problem. Schließ einfach ne LED an irgend einen Port an, 
aktiviere den Overflow Interrupt für Timer1 und toggle die LED im 
Interrupt. Wenn das geht, weist du erstmal, das der Timer überhaupt 
läuft.

Wenn das passt, dann solltest du dir nochmal das Register TCCR1E ansehen 
und natürlich auch wie schon von meinem Vorredner erwähnt einen PWM-wert 
in ein OCRXX Register schreiben..



MfG Dennis

von Marcus (Gast)


Lesenswert?

Hallo Stefan,

vielen Dank für Deine Antwort. Da hat man wieder einmal den Wald vor 
lauter Bäumen nicht gesehen. Ich war nur auf die TCCR1X-Register fixiert 
und habe in den anderen Registern den Fehler nicht gesucht.

Gruß Marcus

von Stefan E. (sternst)


Lesenswert?

Dennis H. schrieb:
> Was erkennst du, wenn du
>
> TCCR1B = (1<<CS00);
>
> liest? richtig, Prescaler auf 1 gestellt.

Dumm nur, dass sein Compiler das aber nicht erkennt. ;-)

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Stefan Ernst schrieb:
> Dennis H. schrieb:
>> Was erkennst du, wenn du
>>
>> TCCR1B = (1<<CS00);
>>
>> liest? richtig, Prescaler auf 1 gestellt.
>
> Dumm nur, dass sein Compiler das aber nicht erkennt.

Naja, ich kenn diese Formatierung irgendwie nicht, wenn es denn eine 
ist, ich vermute vielleicht Bascom?

Nichts desto trotz kann man selbst dann als Kommentar dahinter 
schreiben, was man an welcher Stelle gemacht hat.

MfG Dennis

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
Noch kein Account? Hier anmelden.