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
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 :-(
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
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:
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.
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
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
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.