- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: ATMega und 12 PWM Kanäle

  1. #1
    zwanzischmark
    Gast

    ATMega und 12 PWM Kanäle

    Anzeige

    E-Bike
    Hallo,

    die Frage gab es sicher schomal, aber manchmal tut man sich mit Suchbegriffen schwer....

    Ich brauche also 12 PWM Kanäle um LEDs anzusteuern. Ich glaube Hardwaremässig gibt es maximal 10. Der Controller hat nur die Aufgabe die Werte für die jeweilige Helligkeit zu empfangen und die PWMs zu steuern.
    Wieviele kann man softwaremässig betreiben, oder was ist die beste Lösung?

    mfg Paul

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Es wäre gut, wenn Du uns posten würdest welcher ATMEGA es denn ist, denn davon gibt es ne ganze Menge.
    Wie viele PWM's ansteuerbar sind, hängt von mehreren Faktoren ab.

    Taktfrequenz, Codelänge, Codequalität , Anzahl der Kanäle, gewünschte Auflösung.

    In Hardware kann z.B. ein ATMEGA8 3 PWM's realisieren und das mit Frequenzen bis weit in den kHz Bereich hinein.

    In Software sind theoretisch so viele PWM's möglich wie Du Ausgangspins zur verfügung hast. Allerdings ist da bei 200Hz der Ofen so ziemlich aus.

    So eine Software PWM ist für den Controller eine ziemliche Belastung, weil er sehr viel in Timer Interruptroutinen rumhängt und somit für das Hauptprogramm nicht mehr viel Zeit bleibt.

    Die PWM Routine würde ich versuchen in Assembler zu realisieren um Rechenzeit zu sparen.
    Der Controller sollte so hoch getaktet werden wie nur irgend möglich, also einen nehmen, der auch für 20MHz noch spezifiziert ist. Dadurch kann man für Soft PWM ( Timer ) höhere Prescaler Raten einstellen, was mehr Rechenzeit für die Hauptroutine bei brauchbaren PWM Frequenzen bringt.

    Du solltest deinen Code auf jeden Fall im Simulator testen, sonst kann es Dir passieren, das der Controller überhaupt nicht mehr aus der Interruptroutine raus kommt, weil bis zur Abarbeitung der Interruptroutine der nächste Interrupt schon wieder ansteht.

    Die Frage nach Soft PWM wurde hier im Forum schon sehr oft gestellt, da sollte für jede Programmiersprache ein passendes Codeschnipsel zu finden sein.

  3. #3
    zwanzischmark
    Gast
    es wurde noch kein Controller dafür ausgewählt, weil ich ja nicht wusste ob es softwaremässig möglich ist 12 Kanäle zu betreiben. Wie gesagt handelt es sich um LEDs da ist die Auflösung nicht ganz so wichtig. Das es hier Lösungen für Software PWM gibt ist mir schon klar. Die Frage ist generell ob es möglich ist oder ob es z.B. besser ist einen µC zu nehmen der schon 10 Hardware PWM hat und die fehlenden zwei über Software zu realisieren.

    Die Frage ist also einfach was die beste/einfachste/sinnvollste Möglichkeit ist 12 PWM Kanäle zu realiseren.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377

    Re: ATMega und 12 PWM Kanäle

    Zitat Zitat von zwanzischmark
    Ich brauche also 12 PWM Kanäle um LEDs anzusteuern.
    Hallo Paul!

    Hier ist ein Beispiel für Software-PWM mit drei LEDs. Das lässt sich aber leicht auf 12 LEDs erweitern. Trotzdem würde ich dann dem µC nicht mehr viel zusätzliche Arbeit zumuten.

    http://paste.pocoo.org/show/24597/

    Und hier ein Beispiel, in dem mit Tastern die Helligkeit geregelt wird.

    http://paste.pocoo.org/show/24590/

    Und weils so viel Spaß macht. Hier noch ein Beispiel, in dem man die Helligkeit mit einem Poti einstellen kann.

    http://paste.pocoo.org/show/24605/

    mfg
    Gerold
    :-)

    PS:

    Zitat Zitat von zwanzischmark
    Der Controller hat nur die Aufgabe die Werte für die jeweilige Helligkeit zu empfangen und die PWMs zu steuern.
    Das dürfte noch machbar sein. Ich sehe kein großes Problem darin. Wenn die Daten über die UART kommen, dann würde ich keine zu hohe Baudrate einstellen und UART mit CONFIG SERIALIN auf BUFFERED stellen. Dann schafft der ATmega das schon. Aber du solltest den ATmega8 mindestens mit den internen 8 Mhz oder besser mit externe 16 Mhz takten.

    .

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    kannst ja mal folgendes ausprobieren, da hast du 0 code in der main routine aber die auslastung ist schon heftig (hab ich aufm ATMEGA8 @8MHz intern geschrieben)
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/timer.h>
    #include <avr/signal.h>
    #include <avr/sleep.h>
    
    #define ON 1
    #define OFF 0
    #define ULONG_MAX 199
    
    volatile unsigned char OFVal;
    unsigned char LED1Duty;
    unsigned char LED1Stat;
    
    
    
    
    SIGNAL(SIG_OUTPUT_COMPARE2)
    {
       if (OFVal++ == 200) OFVal = 0;
       LED1Duty = (ADC*10)/(1024/10)-1;
       if (LED1Stat == OFF && (ULONG_MAX-LED1Duty) == OFVal)
       {
          PORTB |= BV(PB1);
          LED1Stat = ON;
       }
       if (LED1Stat == ON && ULONG_MAX-(ULONG_MAX-LED1Duty) == OFVal)
       {
          PORTB &= ~BV(PB1);
          LED1Stat = OFF;
       }
    }
    
    int main(void)
    {
       cli();
       OFVal = 0;
       DDRB = BV(PB1)|BV(PB2)|BV(PB3)|BV(PB4);
       TIMSK = BV(OCIE2)|BV(TOIE2); //TOIE2 musste ich mit einschalten hat sonst nciht fuinktioniert (komisch ....)
       TCNT2 = 0;
       OCR2 = 100; //damit kannste die auflösung einstellen 100% sind wegen der ADC formel notwendig
       TCCR2 = BV(WGM21)|BV(CS20); //CTC modus, prescaler 1
       LED1Duty = 1;
       LED1Stat = OFF;
       ADCSRA = BV(ADFR) | BV(ADPS2) | BV(ADPS1); // ADC einstellungen
       ADMUX = BV(REFS0);
       ADCSRA |= BV(ADEN);
       ADCSRA |= BV(ADSC);
       sei();
       while(1) ;
    }
    die duty berechne ich in der ISR weil ich mir den ADC wert zum eistellen geholt habe, kannste aber theoretisch zwischen 0 und 100 variieren.
    Wenn du OCR2 auf 256 stellst sollte mehr rechenzeit frei werden, aber die frequenz sinkt dann, musste einfach mal rumprobieren

    PS: Bitte um kommentare zur optimierung des code

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Der ATmega2560 hat laut Datenblatt mehr als 12 HardwarePWM-Kanäle. Ob es für LED-Ansteuerung nicht etwas übertrieben ist musst du selbst entscheiden.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377

    Re: ATMega und 12 PWM Kanäle

    Zitat Zitat von python_rocks
    Zitat Zitat von zwanzischmark
    Ich brauche also 12 PWM Kanäle um LEDs anzusteuern.
    Hier ist ein Beispiel für Software-PWM mit drei LEDs. Das lässt sich aber leicht auf 12 LEDs erweitern. Trotzdem würde ich dann dem µC nicht mehr viel zusätzliche Arbeit zumuten.
    Hallo!

    Ich korrigiere!!!

    Die Zeit die einem im Interrupt-Handler bleibt ist für 12 Software-PWM-Kanäle nur dann ausreichend, wenn man sehr optimiert. Das heißt, dass man sich selber um das Sichern und Wiederherstellen der Register kümmern muss (NOSAVE) und dass in der Hauptschleife kaum gearbeitet werden darf.

    Das Empfangen der PWM-Werte per UART oder I²C könnte sich gerade noch ausgehen. Für mehr bleibt aber keine Zeit mehr.

    Ich habe ein wenig gerechnet. Siehe: http://www.elektronik-projekt.de/thr...4455#post44455

    mfg
    Gerold
    :-)

  8. #8
    zwanzischmark
    Gast
    so, ich bin wieder da ^^ (mein PC Netzteil hat sich gestern erstmal verabschiedet)

    also was ich bis jetzt so aus euren Antworten rauslese ist es zumindest schon im kritischen Bereich.

    leider sind auf der Atmel Seite irgendwie grad die Anzahl der PWM Kanäle der Controller verloren gegangen, der ATmega2560 ist aber doch etwas übertrieben.

    Ich denk ich werd einen raussuchen der möglichst viele Hardware PWMs hat und den rest per Software lösen.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377
    Zitat Zitat von zwanzischmark
    also was ich bis jetzt so aus euren Antworten rauslese ist es zumindest schon im kritischen Bereich.
    Hallo Paul!

    Kritisch aber nicht unmöglich. Besonders dann nicht, wenn du nur LEDs damit dimmen willst.

    Sag mal, was willst du zum Ansteuern verwenden? I²C, SPI oder UART? Denn ich will mir demnächst so etwas mit I²C machen, damit ich Erfahrung mit I²C sammeln kann.

    mfg
    Gerold
    :-)

  10. #10
    zwanzischmark
    Gast
    wenn du es genau wissen willst: ich will eine modifizierte Version des Ambilight aus der elektor Bauen. Bin noch in der Grundplanung . Welchen Bus ich verwenden werde kann ich noch nicht sagen. Hängt auch davon ab wieviel Pins ich noch zur verfügung hab. Ein Kompletter Port wär natürlich schön, aber den werd ich nicht haben...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen