Forum: Mikrocontroller und Digitale Elektronik PWM Timer1 beim ATtiny26 initianlisieren, wtf


von Paul H. (powl)


Lesenswert?

Hi!

Ich habe versucht mich durch den Datenblattjungle des ATtiny26 zu wühlen 
um aus meinem Timer1 ein PWMsignal an PB1 rauszuhauen. Wollte dazu die 
intere 64Mhz Fast Peripheral Clock verwenden.
1
    ; PWM Modus
2
    ldi    R16, (1 << COM1A1 | 1 << PWM1A)
3
    out    TCCR1A, R16
4
5
    ; Vorteiler setzen
6
    ldi    R16, (1 << CS10 | 1 << CS11 | 1 << CS13)
7
    out    TCCR1B, R16
8
9
    ; PWM Compare Wert
10
    ldi    R16, 20
11
    out    OCR1A, R16  
12
13
    ; Asynchronen Modus aktivieren
14
    ldi    R16, (1 << PLLE)
15
    out    PLLCSR, R16
16
17
init1:  in    R16, PLLCSR
18
    sbrs  R16, PLOCK
19
    rjmp  init1
20
21
    ldi    R16, (1 << PLLE | 1 << PCKE)
22
    out    PLLCSR, R16

Leider funktioniert das ganze nicht so, an PB1 liegt irgendwie ein 
durchgängiges 5V signal an.. nix PWM so wies aussieht.

Hab ich was vergessen?

mfg Paul Hamacher

von Paul H. (powl)


Lesenswert?

Habe jetzt noch hinter das setzen des PWM Compare-Werts folgendes 
eingefügt:
1
  ; Timer Reset Wert
2
    ldi    R16, 255
3
    out    OCR1C, R16

Im AVR Studio fängt der Timer garnicht erst an zu zählen. Habe wohl was 
vergessen aber ich komm nicht drauf. Geht auch nicht wenn ich den Teil 
für die Aktivierung des Asynchronen modus weglasse und ihn somit im 
synchronen modus laufen lasse...

// Edit: Ok inzwischen beginnt er im Studio sogar zu zählen, allerdings 
funktioniert die PWM immernoch nicht :-(

von Michael W. (wiebel42)


Lesenswert?

Simulierst du nur? Oder redest du von einem echten Controller?
Der Simulator soll ja ganz toll sein ausser was PWM angeht, wie man hier 
sehr oft liest. Also vergiss die Simulation, ran ans Gerät. ;) -wiebel

von Paul H. (powl)


Lesenswert?

ich simuliere und lasse es auf einem echten ATtiny26 laufen, beides 
funktioniert nicht. Ja der Simulator ist komisch.

PB1 ist aber beim Tiny scheinbar permanent auf high, hab kein 
oszilloskop da aber ich sehe ja dass meine LEDs nicht dunkler sind. 
//Edit: Korrigiere, nun scheint er permanent auf low zu sein..

Hier eine aktuelle Version der Anordnung meiner Codeschnipsel:
1
    ; PWM Modus
2
    ldi    R16, (1 << COM1A1 | 1 << PWM1A)
3
    out    TCCR1A, R16
4
5
    ; PWM Compare Wert
6
    ldi    R16, intensity
7
    out    OCR1A, R16
8
9
    ; PWM Accuracy
10
    ldi    R16, 255
11
    out    OCR1C, R16
12
13
    ; Asynchronen Modus aktivieren
14
    ldi    R16, (1 << PLLE)
15
    out    PLLCSR, R16
16
17
init1:  in    R16, PLLCSR
18
    sbrs  R16, PLOCK
19
    rjmp  init1
20
21
    ldi    R16, (1 << PLLE | 1 << PCKE)
22
    out    PLLCSR, R16
23
24
    ; Vorteiler setzen und starten des Timers
25
    ldi    R16, (1 << CS10)
26
    out    TCCR1B, R16

mfg Paul Hamacher

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nur mal ne dumem vermutung: Hast du den Pin auch auf Ausgang geschaltet 
und den Pullup aus?
Ansonsten ist der Simulator ganz brauchbar, er aktualisiert aber die 
Anzeigewerte nicht wenn man nicht den Einzelschrittmodus (F11) benuzt.
Bei prescaler 1 gehts aber im Einzelschritt ganz gut zu beobachten.

von Paul H. (powl)


Lesenswert?

ah danke, es lag daran dass ich den portpin nicht als ausgang geschaltet 
habe^^

noch eine frage: wenn ich das compareregister auf 1 stelle, also 
niedrigste pwm stufe, dann sollte ich doch das leuchten meiner LEDs 
eignetlich nicht mehr sehen oder? allerdings ist es immernoch deutlich 
sichtbar. Zwar schwächer, aber es ginge noch viiiel dunkler. Woran liegt 
das?

Mir ist auch aufgefallen dass sie dunkler sind wenn ich den 
Highspeed-timer aktiviere

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das ist echt Mist, damit hab ich mir auch shcon oft ärger eingehandelt 
;)
Ich weiß nicht es gibt irgeneinen Minimalen OC Wert, und dann noch Phase 
Richtig und Fast PWm hab leider gerade kein Datenblatt zur Hand um 
nachzusehen.
Hat der Tiny vieleicht die /8 Fuse programmiert? Dann läuft der nur mit 
500khz was schon noch sichtbar sein KÖNNTE selbst bei niedrigem OC

von Paul H. (powl)


Lesenswert?

Also der AVR läuft mit 1Mhz. Ob die PCK tatsächlich mit 64Mhz läuft weiß 
ich leider nicht. Ich habe mal am PB1 einfach Spannung gegen masse 
gemessen und den AVR so programmiert dass er das Compare-Register für 
die PWM alle 3 Sekunden um eins erhöht. Dadurch ergeben sich folgende 
Werte:

Compare      mVolt
1            21
2            43
3            65
4            85
5            103
6            123
7            143
8            164
9            185
10           207

Scheint ziemlich linear zu sein so wie es sein sollte. Bei der Messung 
ist mir aufgefallen dass das Fadeverhalten der LEDs eher exponentiell 
ist. Zwischen 1 und 2 liegt ein großer Unterscheid in der 
Leuchtintensität, zwischen 2 und 3 ist der nur noch halb so groß und 
wird bei den nächsten Stufen immer geringer, irgendwann sieht man 
garnicht mehr dass sie noch heller wird.

Dachte immer PWM wäre eine gute Möglichkeit um einen Linearen Fader auch 
mit LEDs aufzubauen?

Theoretisch sollte die PWM mit 64000000 / 256 = 250kHz laufen. Wenn ich 
ihn nur mit 3kHz laufen lasse verhält sich das ganze aber eigentlich 
nicht anders.

mfg Paul H.

von Wurst (Gast)


Lesenswert?


von Läubi .. (laeubi) Benutzerseite


Lesenswert?


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.