- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: PWM ansteuern / programmieren

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2006
    Alter
    62
    Beiträge
    19
    Anzeige

    LiFePo4 Akku selber bauen - Video
    hi rco,

    danke für deine antwort.

    ich werde jetzt mal versuchen das gelernte umzusetzen und in einem programm zum laufen zu bringen.

    werde meine versuche hier mal posten (inkl. erfolg / nicht erfolg meldung)

    gruß orko

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2006
    Alter
    62
    Beiträge
    19
    hi,

    ich habe mal versucht das mit dem pwm umzusetzen.
    leider ohne erfolg.

    der motor läuft zwar,
    aber er läuft immer gleich egal wie ich die werte setze.
    ich wollte mal eine langsam fahrt machen, bekomme ich nicht hin.
    hmm...
    irgendwo habe ich noch einen fehler.

    hier kommt mein code:

    void main (void)
    {
    pwminit();
    SREG |= (1<<7);
    DDRB = 0b11111111;

    PORTB |= ((1<<5) | (1<<6));
    for( ; ; ){};
    }

    void pwminit()
    {


    // Nachfolgend wird Modus 14 gesetzt fast pwm top = ICRn
    TCCR1A = (1<<WGM11);
    TCCR1B = (1<<WGM13) | (1<<WGM12);

    //Nachfolgend wird Prescaler clk/1024 gesetzt
    TCCR1B = (1<<CS10) | (1<<CS12);

    // COM* = OC1A/B sind aktiv, bei Comparematsch wird der Ausgang gesetzt bei TOP geloescht
    TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0);

    // OCIE1B = Output Compare Interrupt Enable 1B
    // TOIE1 = Timer Overflow Interrupt Enable
    TIMSK = (1<<TOIE1) | (1<<OCIE1B);

    // ICR1 = Obergrenze
    ICR1 = 200;
    OCR1AH = 0;
    OCR1AL = 10;
    OCR1BH = 0;
    OCR1BL = 10;
    }


    was macht eigentlich de befehl SREG |= (1<<7); genau???

    gruß orko

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Hi Okro,

    SREG aktiviert nur den Globalen Interrupt, das brauchst du hier nicht, da kein Interrupt ausgelöst wird.
    ICR1 ist mMn garnicht nötig. Auch TIMSK bracuhst du eigentlich nicht, dass ist auch nur für Interrupts.
    Wenn du die Register setzt musst du immer | schreiben, sonst werden nur die nachfolgenden Werte gesetzt und alle anderen gelöscht.

    Z.B.:
    TCCR1A = (1<<COM1A1);
    löscht alle gesetzten Bits und setzt nur COM1A1.
    (Schau mal wie ich das oben gamacht habe.

    >>TCCR1B = (1<<CS10) | (1<<CS12);
    löscht das was du darüber gesagt hast.

    Es kann sein, dass du auch noch einiges einbinden musst, sowas wie io.h, aber da bin ich nicht sicher.

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2006
    Alter
    62
    Beiträge
    19
    hi,

    ich habe nun mein code angepasst und deine änderungen eingebaut.

    sieht wie folgt aus:


    void pwm_main (void)
    {
    pwminit();
    DDRB = 0b00111111;

    PORTB |= ((1<<5) | (1<<6));
    for( ; ; ){};
    }


    void pwminit()
    {

    TCCR1A = (1<<WGM11) | (1<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (1<<COM1B0);
    TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10) | (1<<CS12);

    OCR1AH = 0;
    OCR1AL = 1;
    OCR1BH = 0;
    OCR1BL = 1;
    }


    jetzt läuft nichts mehr.

    ich verstehe es einfach nicht

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Hi Orko,

    Sorry, ich habe übersehen, dass du gar nicht mehr Modus 7 benutzt.
    Dann kannst du natürlich ICR... nicht löschen.

    Also probier folgendes mal aus:

    Code:
    #include <avr/io.h> 
    
    void pwminit() 
    { 
    TCCR1A = (1<<WGM11) | (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1) | (1<<COM1A0) | (1<<COM1B0); 
    TCCR1B = (1<<WGM12) | (1<<CS11); 
    
    OCR1AH = 1; 
    OCR1AL = 1; 
    OCR1BH = 1; 
    OCR1BL = 1; 
    } 
    
    void main (void) 
    { 
    DDRB = 0b11111111; 
    pwminit(); 
    for( ; ; ){}; 
    }
    Ich habe leider gerade keinen Compiler und keinen AVR zu Hand, daher ist es für mich im Moment schwer zu überprüfen, ob ich ncih irgendwas vergessen habe.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2006
    Alter
    62
    Beiträge
    19
    jo,

    das sieht schon besser aus.

    der motor läuft jetzt schön langsam vor sich hin.

    erstmal danke.

    nun noch eine frage:

    ich habe nun den modus 7, er zählt bis 1024.

    OCR1AH = 1; -> wird hier der ausgang auf high gesetz?
    OCR1AL = 1; -> wird der ausgang auf low gesetzt?

    warum sind beide gleich??

    gruß orko

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    jo,

    das sieht schon besser aus.

    der motor läuft jetzt schön langsam vor sich hin.
    Sehr gut!

    nun noch eine frage:

    ich habe nun den modus 7, er zählt bis 1024.

    OCR1AH = 1; -> wird hier der ausgang auf high gesetz?
    OCR1AL = 1; -> wird der ausgang auf low gesetzt?

    warum sind beide gleich??
    Nein, das meint es nicht. H und L steht für High- und Lowbyte.
    Die Auflösung ist ja 10 Bit. Ein Byte hat nur 8 Bit. Deshalb gibt es zwei Bytes um diese Werte auszudrücken.

    OCR1AH = 1;
    OCR1AL = 1;

    heit also 1x256 und 1x1, also der Wert 257.

    Willst du z.B. den Wert 800 setzen, dann ist das:
    OCR1AH = 3;
    OCR1AL = 32;

    Das hieße dann, dass der Ausgang 1 - 800/1024 high ist.
    (Oder auch nur 1023, bin mir da nicht ganz sicher)
    Das 1 - ist wegen dem Inverting Mode.

    Der Ausgang wird beim Inverting Mode beim Überlauf also 1024 zurückgesetzt.

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2006
    Alter
    62
    Beiträge
    19
    hi rco,

    super lieben dank.

    habe durch deine hilfe viel gelernt.


    ich bin jetzt soweit, dass ich jetzt mit den richtigen geschwindigkeiten experimentiere.

    damit habe ich jetzt erstmal was zu tun.

    wenn alles so läuft wie gewünscht, werde ich mich mal melden.
    als nächstes ziel habe ich mir dann die programmsteuerrung über interrupts vorgenommen.

    schönen abend noch

    gruß orko

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress