-         

Ergebnis 1 bis 10 von 10

Thema: PWM

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72

    PWM

    Anzeige

    Hallo Zusammen!

    Bin verzweifelt (*,)

    Hab ein uy Board (Atmega16) und möchte mit dem 2 DC Motoren ansteuern über ein Motorsteuerung mit l6205 über ein PWM Signal.

    Hier ensteht das Problem. Da ich sehr wenig Erfahrung habe im Bereich C (nur C#) habe ist es nicht leicht das zu realisieren.

    Hab mich schon bisschen AtmelCProgrammierung eingelesen und über PWM hier:

    http://www.info-rlp.de/lernteams/ele...mit_atmel.html

    http://www.hs-augsburg.de/~hhoegl/tm...ercounter.html ]


    Aber ich werde irgenwie nicht Schlau. *ich trottel*

    Kann mir das einer vielleicht Idiotensicher erklähren.

    Also so wie ich das verstehen hab muss ich das Register setzten und dies und das.....


    Bitte um hilfe komme mir echt schon ziemlich doof vor.

    mfg greeni

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    ich habe es damit heilwegst begriffen http://www.mikrocontroller.net/artic...R-GCC-Tutorial

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    ............................................

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    Mhh werde nicht schlauer

    WIe muss ich nun dieses Beispielprogramm umschreiben das ich bei Atmega16 das 16bit PWM Signal benutzen kann (ich weiss nur das ich dazu OC1A OC2B zum motor führen muss):


    Code:
    #include <avr/io.h>
     
    int main()
    {
      // OC1A auf Ausgang
      DDRB = (1 << PB1 );  //ATMega8
      // DDRD = (1 << PD5 ); //ATMega16
      //
      // Timer 1 einstellen
      //  
      // Modus 14:
      //    Fast PWM, Top von ICR1
      //
      //    WGM13    WGM12   WGM11    WGM10
      //      1        1       1        0
      //
      //    Timer Vorteiler: 1
      //     CS12     CS11    CS10
      //       0        0       1
      //
      //  Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
      //     COM1A1   COM1A0
      //       1        0
     
      TCCR1A = (1<<COM1A1) | (1<<WGM11);
      TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
     
      //  den Endwert (TOP) für den Zähler setzen
      //  der Zähler zählt bis zu diesem Wert
     
      ICR1 = 0x6FFF;
     
      // der Compare Wert
      // Wenn der Zähler diesen Wert erreicht, wird mit
      // obiger Konfiguration der OC1A Ausgang abgeschaltet
      // Sobald der Zähler wieder bei 0 startet, wird der
      // Ausgang wieder auf 1 gesetzt
      //
      // Durch Verändern dieses Wertes, werden die unterschiedlichen
      // PWM Werte eingestellt.
     
      OCR1A = 0x3FFF;
     
      while( 1 )
        ;  
    }

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    ......
    DDRD = (1 << PD5 ); //ATMega16
    TCCR1A = (1<<WGM10)|(1<<COM1A1);
    TCCR1B = (1<<CS10);
    OCR1A =128;//0 oder OCR1A = blabale was du willst
    ......

    dann solltest du erstmal mit eine led testen ob du von pd5 zu gnd über den gesetzten werd die hellig keit der led stellen kannst wenn das geht. kannste dein motorzeug ranhängen

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    Danke

    Kannst du mir auch erklähren wieso

    wenn ich dich noch um etwas bitten darf

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    gehts? ich veruche mal zu erklären wenn was falsch ist an alle wissenden sagt es bitte.
    TCCR1A = (1<<WGM10)|(1<<COM1A1) /// (1<<WGM10 heißt nach pwm10 ist gesetzt und pwm01 ist nicht gesetzt was das bedeutet kannst du in der tabelle dort sehen
    |(1<<COM1A1 heißt com1A1 gesetzt und com1A0 ist nicht gesetzt also o was das bedeutet in der tabelle darunter
    TCCR1B = (1<<CS10); cs10 heißt precaler =0 wenn du schreiben würdest TCCR1B = (1<<CS10)|(1<<CS12) heist prescaler 1024 hast du es jetzt verstanden?

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    naja ich muss mich glaub nochmal voll reinhauen

    ich kann es erst am DO wieder ausprobieren ob so funktioniert
    ich schreib wieder falls ich noch fragen hab

    danke nochmal

    falls einer noch ne ander erklähren hat bin ich gerne offen für jede Hilfe !!!

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    JUHU glaub langsamm kapier ich es \/


    Wenn ich aber nur das COM1A1 setzt hab ich ein invertiertes PWM oder ?
    Da muss ich noch COM1A0 auch noch setzten ?

    Kapier jetzt nur noch nicht wie ich ein 16bit PWM jetzt erzeugen kann ?

    Wenn ich PWM11 PWM10 setze hab ich ja nur ein 10bit PWM oder ?


    mfg greeni

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.01.2007
    Beiträge
    72
    Was ist hier falsch ? Bitte um Hilfe


    Code:
    #include <AVR/io.h>
    #include <AVR/interrupt.h>
    #include <AVR/signal.h>
    
    			
    int main( void )
    {
    	DDRD   = 0x30;		//PD4 PD5 PWM Ausgang
    	TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0);
    	TCCR1B = (1<<CS10);
    	
    	OCR1A = 6000;
    
    
    	while(1)					//Hauptschleife
    	{
    	
    	}
    }

Berechtigungen

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