-         

Ergebnis 1 bis 5 von 5

Thema: "100kHz-Software-PWM" flimmert....

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253

    "100kHz-Software-PWM" flimmert....

    Anzeige

    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:

    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?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    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?

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Ich brauch am Ende nur 2-3 PWMs. Aber ich werds einfach mal mit drastisch geringerer Rate versuchen.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •