- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: Warum funktioniert diese software PWM nicht?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Ok also das mit den 255kHz leuchtet ein

    Allerdings kann ich ja auch den Timer einfach hochzählen lassen und dann den einfach prüfen ob der Wert in TCNT1 kleiner oder größer des vorgegebenen Wertes ist. Habe hier den Code eben genau so umgebastelt. Die Frequenz stimmt, allerdings der duty cycle nicht

    Laut Datenblatt ist der Top-Wert ja ICR1, folglich müsste ICR1 / 2 einen 50% duty cycle ergeben. Leider kommt dies nur bei ca. 5kHz hin

    Code:
    #ifndef F_CPU
    #define F_CPU 16000000UL
    #endif
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define F_PWM 1000
    #define PWM_RES 255
    #define Prescaler 8
    
    #define ICR1_val ((F_CPU / F_PWM) / Prescaler) - 1
    
    uint8_t PWM_setting[8];
    
    int main(void){
        
        TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS11); // CTC mode prescaler 8
        
        ICR1 = (uint16_t)ICR1_val;
        
        DDRC = 0xFF;
        
        for(uint8_t i = 0; i < 8; i++){
            PWM_setting[i] = ICR1_val / 2; // 50% duty cycle
        }
    
        while(1){
            
            for(int i = 0; i < 8; i++){
                if( TCNT1 < PWM_setting[i] ){
                    PORTC |= (1<<i);
                }
                else{
                    PORTC &= ~(1<<i);
                }
            }
        }
        
        return 0;
    }
    MfG Torrentula

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Torrentula Beitrag anzeigen
    Laut Datenblatt ist der Top-Wert ja ICR1, folglich müsste ICR1 / 2 einen 50% duty cycle ergeben.
    Dazu müsste man aber auch diesen Wert in das Vergleichs-Array schreiben. Du schreibst dort aber "ICR1 + 1" rein.
    MfG
    Stefan

Ähnliche Themen

  1. Gleichstrommotor-Ansteuerung via µP funktioniert nicht richtig, warum?
    Von papuadive im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 4
    Letzter Beitrag: 03.01.2012, 09:17
  2. Warum funktioniert diese Print nicht?!
    Von TheTeichi im Forum Elektronik
    Antworten: 111
    Letzter Beitrag: 03.12.2011, 11:28
  3. Diode: Warum funktioniert das so und nicht *so* ?
    Von -schumi- im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 11.05.2011, 10:17
  4. RS-232-Schnittstelle funktioniert nicht ganz richtig! Warum?
    Von Walich im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 08.05.2007, 17:51
  5. Warum funktioniert diese Schaltung?
    Von Amri im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 10.06.2005, 11:36

Berechtigungen

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

LiFePO4 Speicher Test