PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "100kHz-Software-PWM" flimmert....



Goblin
21.12.2008, 22:24
Ich versuche mich gerad an der Simulation einer Kerzenflamme. Basis dafür ist natürlich ein Software-PWM. Ich habe mit dem RN-AVR-Tool den passenden Prescaler und Startwert für den Timer0 (8-Bit) errechnet und diesen in mein Programm eingetragen. Trotzdem flimmert das PWM. Nicht nur ein wenig, sondern extrem. Bei PWM-Werten von >50 ist so eine Art Blinken im Millisekundenbereich zu sehen. Irgendwas scheint da faul zu sein. Hier mein Code:



$regfile = "ATtiny2313.dat"
$crystal = 1000000

Config Timer0 = Timer , Prescale = 1
Config Portd = Output

On Timer0 Timer_irq

Enable Timer0
Enable Interrupts

Led_g Alias Portd.4

Dim Pwm1 As Byte
Dim Pwm_cnt As Byte

Dim Green As Bit
Const Timervorgabe = 246
Pwm1 = 100

Do

Loop

Timer_irq:
Timer0 = Timervorgabe
Green = 0
If Pwm1 > Pwm_cnt Then Green = 1
Led_g = Green
Incr Pwm_cnt
Return


Sieht jemand nen Programmierfehler?

patti16
21.12.2008, 22:41
hallo,

zu sehen ist da jetzt nichts.

interrupt zulangsam?
müssen die werte nicht vielleicht ein wenig kleiner sein damit er es schaft so ca 50?

Besserwessi
21.12.2008, 23:56
Bei nur 10 Zyklen bis zum nächsten Interrupt wird das nichts. Da ist die Interruptsroutine bei weitem noch nicht fertig bevor der Nächste Interrupts kommt. Dazu hätte man auf Inerrupts auch ganz verzichten können.

Selbst mit 16 Mhz Takt un Prescaler von 16 wird das noch knapp.


Das Programm läuft entsprechend deutlich langsamer ab, vermutlich etwa ein Interrupt etwa alle 150 Zyklen. Das mancht dann für eine Periode von 256 ISR Aufrufen rund 38000 µs = 38 ms. Das sollte dem eher langsamen Blinken entsprechen. Wenn möglich sollte man ein Hardware PWM nutzen. Das kann der Timer0 ja auch.

Goblin
22.12.2008, 08:49
Ich brauch am Ende nur 2-3 PWMs. Aber ich werds einfach mal mit drastisch geringerer Rate versuchen.

Goblin
22.12.2008, 16:40
Okay bei einem Prescaler von 8 und einem PWM-Wert von 100 blinkt die LED ca. 2x in der Sekunde. Bei einem Prescaler von 64 wird einem schon langweilig während man auf den nächsten Zustandswechsel wartet.