Forum: Mikrocontroller und Digitale Elektronik ATTiny841 Timer0 PWM


von Norbert S. (norberts)


Lesenswert?

Moin,

Ich initialisiere und teste den Timer0 für Phase Correct PWM so:
1
$regfile = "ATtiny841.DAT"
2
3
$crystal = 8000000                                          'Internal RC
4
5
$hwstack = 100
6
$swstack = 16
7
$framesize = 16
8
9
'WDT off:
10
Reset Watchdog
11
Mcusr.wdrf = 0                                              'WD Reset flag
12
Ccp = &HD8                                                  'Enable protected registers
13
Wdtcsr.wde = 0                                              'WD Enable Off
14
15
Ddra.7 = 1
16
Led Alias Porta.7                                           'Pin 6
17
18
Tccr0a.com0a1 = 1                                           'clear up
19
Tccr0a.wgm00 = 1                                            'Phase correct PWM
20
Tccr0b.cs01 = 1                                             'Prescaler 8 / 256 / 2 = 2kHz
21
22
Ddra.2 = 1                                                  'TOCC1, OC0A, Pin 11
23
Motor Alias Ocr0a
24
25
Enable Interrupts
26
27
Ocr0a = 125
28
Do
29
   Waitms 1
30
   'Toggle Porta.2
31
   Toggle Led
32
Loop

Das ist das komplette Programm wie ich es getestet habe.
Folgendes habe ich geprüft:
Controller läuft, "LED" taktet mit 500Hz wie erwartet.
PortA.2 funktioniert wenn ich den manuell (also in Software) schalte.
OCR0A sollte auf TOCC1 und somit A.2 liegen, wenn das Multiplexing 
default ist.

Nur tut sich an PortA.2 nix per PWM.
Wo habe ich da jetzt Tomaten auf den Augen?

Gruß,
Norbert

von Norbert S. (norberts)


Lesenswert?

Moin,

So'n Schiet - die Ausgänge muß man nochmal separat im TOCPMCOE 
aktivieren!
Was soll das denn für einen Sinn machen?
Naja, jetzt löppt es...

Gruß,
Norbert

von Karl M. (Gast)


Lesenswert?

Norbert S. schrieb:
> Moin,
>
> So'n Schiet - die Ausgänge muß man nochmal separat im TOCPMCOE
> aktivieren!
> Was soll das denn für einen Sinn machen?
> Naja, jetzt löppt es...
>
> Gruß,
> Norbert

Der Sinn steht doch im Datenblatt.
 Dort ist eine große Tabelle mit den möglichen Pinbelegungen..

Auch ist nun das aktivieren der Pullups auch anders!
Jeder Port hat nun 4 Register.

naja ist ja alles dokumentiert.

von Norbert S. (norberts)


Lesenswert?

Moin,

Mir erschliesst sich der Sinn erst auf den dritten Blick. Jetzt habe ich 
das aber wohl kapiert. Daß solche Dinge immer so kommentarlos im 
Datenblatt stehen müssen...

Wenn ich das richtig sehe ist es bei den Ports in erster Linie wirklich 
nur der Pullup, der nun nicht mehr mit PORTx.n sondern mit PUEx.n 
aktiviert wird, richtig?

Das hier dürfte Anfänger auch noch verwirren:
"Writing a logic one to PINxn toggles the value of PORTxn, independent 
on the value of DDRxn."

Gruß,
Norbert

von Max (Gast)


Lesenswert?

Norbert S. schrieb:
> Das hier dürfte Anfänger auch noch verwirren:
> "Writing a logic one to PINxn toggles the value of PORTxn, independent
> on the value of DDRxn."

Das ist aber schon eine halbe ewigkeit so. die alten AT90... vielleicht 
nicht, aber alle mega's und tiny's hatten das

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.