• Ja hab es gemerkt beim aufspielen das er nur 4,8 und 9,6 MHz kann... Nochmals vielen dank

    Ist das von mir so richtig gerechnet 9600000 / (256 x 64) = 585 Hz

    Möcht das nur ganz kurz richtig stellen. Die oben angegebene Formel ist für den fast Pwm Modus und muss 255 statt 256 heißen und ergibt 588,23 Hz. Die Formel für Phase correct Pwm Modus ist 9600000 / (510 x 64) = 294,12 Hz :thumbup:

    Einmal editiert, zuletzt von diggsn (23. Oktober 2011 um 21:58)

  • Ja, wieso fragst Du dann überhaupt nach, ob Du richtig gerechnet hast, wenn Du's anscheinend eh' besser weißt...? :D ?(

    klar, das mit dem "Frequenz halbiert" von mir ist ne 99,99%- "Überschlagsrechnung" der Einfachheit halber, da sind's tatsächlich 510 Schritte, weil der Zähler eben "umkehrt", das ist schon richtig...

    aber - wenn's denn nun schon so genau gehen soll - bei Fast PWM sind's wirklich 256, *nicht* 255 - siehe Datenblatt (CTC-Modus lassen wir mal aussen vor, klar, da muss man dann eben auch mit der gewählten Auflösung rechnen):

    Zitat

    The counter counts from BOTTOM to TOP then restarts from BOTTOM.
    TOP is defined as 0xFF when WGM2:0 = 3,

    Der zählt ja von 0 bis 255 = 255 Schritte, aber dann kommt noch der Schritt von 255 wieder nach 0 dazu, also sind's insgesamt 256, bevor's wieder von vorne los geht.. ;)

    Steht übrigens auch so im Datenblatt:

    Zitat

    The PWM frequency for the output can be calculated by the following equation: fOCnxPWM = fclk_I/O / (N * 256)
    The N variable represents the prescale factor (1, 8, 64, 256, or 1024).


    *da* kommt auch diese "Lücke" her, weil Du 256 PWM-Steps hast, aber im Compare-Register nur Werte von 0-255 eintragen kannst - 255 ist dann also alle 256 Segmente an, 0 ist 1 Segment an, deswegen gehen bei fast PWM die LEDs nicht komplett aus, sondern glimmen noch leicht bei Wert "0"...

    das Problem hatte ich mal vor 3,5 Jahren, als ich das erste mal HW-PWM (davor nur SW-PWM) benutzt hatte, und bei mir die LEDs eben nicht ganz ausgingen - Neni hat mir das dann erklärt... ;)

    steht aber auch im Datenblatt:

    Zitat

    The extreme values for the OCR0A Register represents special cases when generating a PWM
    waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will
    be a narrow spike for each MAX+1 timer clock cycle.
    Setting the OCR0A equal to MAX will result
    in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0
    bits.)


    Und wie gesagt, man kann das auch so einstellen, dass bei 0 die LEDs ganz aus sind, dann sind sie aber bei 255 nicht ganz an (eben nur 255/256 der Zeit), für die Berechnung der Frequenz bleibt's aber bei 256...

    It's only light - but we like it!

    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • k.A., da muss ein Bascom-Spezialist hier rein gucken...

    muss es denn unbedingt fast-PWM sein...? - ich denke mal, Bascom wird das schon so machen mit dem phase correct, eben damit die LEDs ganz ausgehen.... und 293 Hz PWM-Frequenz reicht doch...

    It's only light - but we like it!

    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hallo!
    Mit "Config Timer = Pwm" verwendet Bascom(nicht Basecom) definitiv die Phase correct Einstellung.
    Wenn man was anderes braucht, siehe Datenblatt.
    MfG
    Styler

  • Ja, dann stell's doch nicht mit diesem "Config"-Befehl ein, sondern eben direkt die entsprechenden Bits in den Registern setzen lt. Datenblatt...

    das geht m.W. nach in Bascom auch, kannst ja auch mal ausprobieren, so wie man z.B. mit Ocr0b = 77 in das Register nen Wert schreiben kann, müsste man auch mit TCCR0A = foo und TCCR0B = bar in die Timer-Control-Register schreiben können...

    It's only light - but we like it!

    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Also laut Datenblatt wäre es ja dann

    Zitat

    TccrOb = &B00001011

    wenn ich das richtig gelesen habe mit einem prescaler von 64.

    Einmal editiert, zuletzt von diggsn (25. Oktober 2011 um 18:26)

  • sollte stimmen - im TCCR0A musst Du für PWM-Modus normal auch noch Bits setzen, siehe Datenblatt...

    und dann einfach mal gucken, ob Bascom die Anweisung TccrOb = &B00001011 etc. "frisst" oder nen Fehler bringt - wenn's kompiliert, dann schauen ob's läuft - kaputt gehen kann da ja nix...

    It's only light - but we like it!

    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!