- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 35

Thema: PWM

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Nichts zu danken, jeder hat mal mit dem kleinem Einmaleins angefangen. Auch wenn dieses so der eine oder andere gelegentlich vergisst.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hallo Leute,

    Ich hab neulich angefangen, mit Mikrocontrollern zu experimentieren und hab mir nen Atmega 16 gekauft... Zusätzlich benutze ich das Buch von Elektor "AVR Hardware und C-Programmierung in der Praxis". Ich habe jetzt angefangen mit PWM zu arbeiten. Allerdings schaffe ich es nicht, dass sich der OCR0 Wert verändert. Ich habe folgendes Programm:

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    uint8_t wert;
    
    void delay_ms(uint16_t ms)
    {
      for(uint16_t t=0; t<=ms; t++)
        _delay_ms(1); 
    }
    
    // Timer/Counter0 Overflow 
    ISR (TIMER0_OVF_vect)
    {
        
        PORTD |= (1 << PD0);  // PD0 ein
        
    }
    
    // Timer/Counter0 Compare Match
    ISR (TIMER0_COMP_vect)  // Wenn OCR0 Wert erreicht wird
    {
        PORTD &= ~(1 << PD0); // PD0 aus
    
    }
    
    void main(void)
    {
        DDRD |= (1 << DDD0) | (1 << DDD1) ;   // PORTB als Ausgang
        wert = 10;
    
        TIMSK |= (1 << TOIE0) | (1 << OCIE0);    // IRQ bei Überlauf + Compare Match
        OCR0 = wert;      // Vergleichswert 128 einstellen
        sei();         // IRQs enable
        PORTD |= (1 << PD0);    // PB0 
        TCCR0 |= (1 << CS02);  // Prescaler: 1/1024 (CS1=0 per default) (1 << CS00) | 
    
        while (1);  // endlos
        {    
      
          delay_ms(100);
            if(wert >= 240)
                wert = 10;
            else
                wert++;
            OCR0 = wert;
        }
        return 0;
    }
    Der Sinn ist, eine LED zu faden... also von dunkel bis hell. Aber es klappt nicht. Der Wert von OCR0 verändert sich nicht.
    Vielen Dank schonmal im voraus.

    MfG
    RP6fahrer

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Was passiert mit dem Ausgang? Immer ein, Immer aus, immer mit der gleichen Helligkeit gedimmt?

    MfG Hannes

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    10.09.2010
    Beiträge
    74
    Hi,
    Danke für die schnelle Antwort.... also die LED leuchtet immer so, als würde OCR0 = 10 sein.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Ist das ein Beispiel aus dem Buch? Wenn nicht würde ich das Programm so umschreiben das du den Timer/Counter direkt zur PWM erzeugung nutzt (Phase Correct PWM oder Fast PWM).

    MfG Hannes

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    while (1);  // endlos
    Das Programm kommt überhaupt nicht bis zu dem Teil, wo OCR0 verändert wird.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    @sternst
    Du hast recht. Das habe ich ganz übersehen.

    MfG Hannes

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress