-         

Ergebnis 1 bis 3 von 3

Thema: Pulsweitenmudulation mit Atmega32

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.02.2005
    Ort
    Erlangen
    Alter
    32
    Beiträge
    88

    Pulsweitenmudulation mit Atmega32

    Anzeige

    Hi,
    ich habe meine ersten Versuche einer PWM gemacht. Es scheint zu funktionieren. Ändere ich z.B. den Vergleichswert, so werden meine Rechtecksignale größer bzw. kleiner.

    Code:
    #include <avr/io.h>     // Namen der IO Register
    #include <util/delay.h> // Funktionen zum warten
    // Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden
    
    int main(void)
    {
     DDRC = (1 << 0);         // Nur PC0 als output,  _BV(0) = (1<<0) = 1
     PORTC = 0b11111110;           // Pullups auf allen anderen Pins 
     
     DDRD = (1 << 5);
     TCCR1A = (1<<COM1A1) | (1<<COM1A0) | (1<<WGM11);
     TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10) | (1<<CS10);
     ICR1 = 0x8FFF;
     OCR1A = 0x1FFF;
     
     while (1)
     { 
       PORTC &= 0b11111110; //  0 auf Bit 0 Ausgeben, Rest so lassen
       _delay_ms(10);      //  100 ms Warten
       PORTC |= 0b00000001;     //  1 auf Bit 0 Ausgeben, Rest so lassen
       _delay_ms(10);
     }
    }
    Insgesamt erscheint mir das Signal aber ziemlich verrauscht. Was sagt ihr dazu? (Bild am Anhang)

    Mfg Moebius
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken pwm.png  

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das Signal ist wirklich realtiv strak verrauscht. Die Amplitude ist auch etwas kleine für ein normales Digitalsignal. Das Rauschen hat aber wohl nichts mit dem Programm zu tun, sondern der Schaltung.

    Ein PWM Signal durch aktives Warten zu erzeugen ist aber in der Regel keine gute Lösung. Besser ist dafür ein Timer geeignet - Anfänge sind ja schon da.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.02.2005
    Ort
    Erlangen
    Alter
    32
    Beiträge
    88
    Habe den Fehler gefunden. Ich hatte über OC1 und OC2 gemessen. Das ist natürlich Unfug. Ich messe jetzt zwischen OC1 und Masse und siehe da, das Rauschen ist weg und die Amplitude beträgt 5 V. \/

    @Besserwessi: Bist du sicher das du den Code richtig gelesen hast? DIe while Schleife schaltet mir nur meine LED. (Hab ich vergessen herauszulöschen).

    Mfg Moebius

Berechtigungen

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