- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: PWM Atmega16?

  1. #1

    PWM Atmega16?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich bin schon den ganzen tag am probieren und tüfteln. Ich möchte gerne an Pin18 (PD4 (OC1B)) und Pin19 (PD5(OC1A)) einen festen PWM Wert einstellen. Also Hardware PWM verwenden.

    Wieso klappt das mit diesem code nicht?

    Bin noch Anfänger und habe sämtliches schon gelesen an Tutorials und Foren.

    Ich komme aber einfach nicht dahinter.

    #include <avr/io.h>

    int main (void) {

    DDRB = (1<<PB2);
    TCCR1A = (1<<COM1B1)|(1<<WGM10)|(1<<WGM12);
    TCCR1B = (1<<CS10);
    OCR1B = 128;
    OCR1A = 15;


    while(1)
    {
    /* "leere" Schleife*/;

    }

    /* wird nie erreicht */
    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    ohne den Code wirklich genau angeschaut zu haben, PD4 und PD5 müssen als Ausgänge definiert werden. Wenn's das nicht, war nochmal melden.

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    hi,
    wie der Vorredner schon sagte musst du die Ports als Ausgänge definieren, steht auch so im Datenblatt. Ansonsten sieht dein Code eigentlich richtig aus wo weit ich das sehe.
    mfg franz

  4. #4
    Juhu, ich habs geschafft, naja fast.

    Ich kann meine PWM setzen und auf einen festen Wert einstellen

    im Beispel 128 also ca. 2,5V

    Aber wieso nur am Ausgang OCR1A, ich möchte PWM an OCR1B ebenfalls
    realisieren.

    Hat jemand eine Lösung?

    Hier mein Code:

    #include <avr/io.h>
    #define F_CPU 8000000

    int main (void)
    {

    DDRD=0b1111111;

    // PWM Konfig.

    TCCR1B |= (1<<CS10); //
    TCCR1A |= (1<<WGM10)|(1<<COM1A1); //PWM 8 Bit

    OCR1A=128;

    OCR1B=128;

    return 0;
    }

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2006
    Beiträge
    210
    hm,

    TCCR1A |= (1<<WGM10)|(1<<COM1A1); //PWM 8 Bit

    solltest du nicht COM1B1 auch setzen?
    Ich denke, durch einen Blick ins Datenblatt würdes du schnelle voran kommen, als wenn Du hier jedesmal auf eine Antwort warten müsstest.

    >>DDRD=0b1111111;

    Das würde ich übrigens so nichtl schreiben, denn es fällt einem nicht gleich auf, dass da eine 1 fehlt. 0xFF wäre an der Stelle übersichtlicher.

    Grüßke

    GEald

    EDIT: müsste es nicht DDR--B-- heissen stat DDR--d-- ?

  6. #6
    Danke es klappt und DDRD ist schon richtig. Am PortD sind die Hardware PWM Ausgänge des Atmega16.

    Danke nochmal für die Hilfe.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2006
    Beiträge
    210
    Ah, ja ok.

    Ich dacht ich hab gelesen, du würdest nene Mega8 benutzen, aber es steht ja sogar im topic. Na sowas.... Man wird halt net jünger...

    hehe

Berechtigungen

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

12V Akku bauen