-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: 2x 16bit PWM ATMega32 @16MHz

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.01.2011
    Beiträge
    192

    2x 16bit PWM ATMega32 @16MHz

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    ich möchte 2 Leds dimmen an einen mega32.

    Nur leider ist meine Rote LED am OCR1B ständig an.
    die grüne am OCR1A wechselt wunderbar ihre Helligkeit.

    Woran kann das liegen?

    Code:
    void init_pwm (void) 
    {   
        DDRD |= (1<<PD4); //PWM ROT
        DDRD |= (1<<PD5); //PWM Blau
    
        TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1) |(1<<COM1B1)|(1<<WGM12)|(1<<WGM13); //16 Fast PWM nicht invertiert
        TCCR1B = (1<<CS11)|(1<<CS10); //CLK F_CPU/64 
    }
    Code:
    void set_blue (uint16_t pwm)
    {
        OCR1A = pwm;
    }
    Code:
    void set_red (uint16_t pwm)
    {
        OCR1B = pwm;
    }
    danke für eure Hilfe

    Gruß deko

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Woran kann das liegen?
    Es liegt daran, dass du nicht nachgeschaut hast, welche Konfigurations-Bits in welchem Register sind.
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf ab Seite 107

    WGM12 und 13 befinden sich nicht im TCCR1A!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.01.2011
    Beiträge
    192
    Code:
    void init_pwm (void) 
    {   
        DDRD |= (1<<PD4); //PWM ROT
        DDRD |= (1<<PD5); //PWM Blau
    
        TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1)|(1<<COM1B1); //16 Fast PWM nicht invertiert
        TCCR1B = (1<<CS11)|(1<<CS10)|(1<<WGM12)|(1<<WGM13); //CLK F_CPU/64 
    }
    so hab ich es jetzt abgeändert aber leider keine Besserung... (hatte es zwischenzeitlich auch mal so)
    nun kann ich die Leds garnicht mehr dimmen und sie sind Leuchten auch ohne das ich was an OCR1A oder OCR1B mache mit voller Leuchtstärke...

    sieht jemand noch einen Fehler?

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Du hast einen untauglichen Modus ausgewählt. Wie willst du mit OCR1A den Duty-Cycle einstellen, wenn das der TOP-Wert ist?
    MfG
    Stefan

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    das ist etwas fälschlich in dem datenblatt merk ich gerade, was du gemacht hast ist ebenfalls CTC Modus nicht Fast PWM! Er läuft bei ocr1a über und ignoriert ocr1b, versuch mal OHNE WGM10 (Mode 14 laut Tabelle) und setz dein gewünschten top-Wert mit ICR1, aber ACHTUNG, wenn dein OCR1A/B GRÖSSER als ICR1 wird, passiert garnichts!!!

    ich vermute eigentlich schon fast, dass du eigentlich eher einen festen Top-Wert brauchst und besser den mode 5,6 oder 7 wählen solltest!

    FALLS du vorhaben solltest eine RGB-Steuerung zu machen, empfehl ich dir (weil du nurnoch 8bit-Timer-PWM für grün hast) Mode 5 (WGM12 und WGM10) 8bit Fast PWM, dann lassen sich deine Timer auch gleich ansteuern
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    das ist etwas fälschlich in dem datenblatt merk ich gerade, was du gemacht hast ist ebenfalls CTC Modus nicht Fast PWM!
    Quatsch. Das ist Fast-PWM mit einem variablem TOP-Wert (also variabler Frequenz).
    MfG
    Stefan

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ist bei CTC doch genauso, nur dass updaten der Register passiert zu einem anderen Zeitpunkt ?!
    Jedenfalls hab ich die Erfahrung gemacht, dass bei der Verwendung des OCR1A-Register zum einstellen des TOP der PWM Output nicht richtig funktioniert, darum der Vorschlag das ganze über den ICR1 zu machen oder gleich einen festen TOP-Wert zu nehmen.
    Wobei mir immer noch nciht einleuchtet, wieso die eine LED die Helligkeit ändert, obwohl er beim setzen von OCR1A doch nur die Frequenz ändert und nicht das Tastverhältnis!?

    MOOOMENT: er schreibt was von Rot und Grün, im Programm steht red und blue, ja was denn jetzt bitte ? Ich vermute nur mal ganz leicht, dass beim Ändern des OCR1A-Register sich die Helligkeit der LED an OCR1B ändert, da sich indirekt das Tastverhältnis ändert! Und hier vielleicht nur ein Trugschluss besteht ?! Keine Ahnung ich Begreif nicht wie das sonst funktionieren kann ^^ klär mich bitte einer auf
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    ist bei CTC doch genauso, nur dass updaten der Register passiert zu einem anderen Zeitpunkt ?!
    Und? Nur weil dieser PWM-Mode dem CTC ähnelt, ist es noch lange kein CTC-Mode. Zeitpunkt des OCR-Updates, Bedeutung der COM-Bits, es ist in jeglicher Hinsicht ein PWM-Mode. Zu behaupten das Datenblatt wäre hier falsch, ist totaler Quatsch.


    Jedenfalls hab ich die Erfahrung gemacht, dass bei der Verwendung des OCR1A-Register zum einstellen des TOP der PWM Output nicht richtig funktioniert
    Konkretes Beispiel? Vermutlich hast du nur irgendetwas falsch gemacht. Ich konnte jedenfalls noch kein Fehlverhalten des Timers in dem Mode feststellen.


    Wobei mir immer noch nciht einleuchtet, wieso die eine LED die Helligkeit ändert, obwohl er beim setzen von OCR1A doch nur die Frequenz ändert und nicht das Tastverhältnis!?
    Tut sie doch gar nicht. Er sagt doch, dass jetzt keine LED mehr die Helligkeit ändert. Und vorher hatte er (versehentlich) einen ganz anderen Mode ausgewählt.
    MfG
    Stefan

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ahso, ja klar das leuchtet ein, hoffentlich ham wir ihm trotzdem helfen können ^^
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. ATmega32 und 16MHz Quartz
    Von ElchiMtr im Forum AVR Hardwarethemen
    Antworten: 18
    Letzter Beitrag: 18.03.2011, 15:24
  2. LCD 4*20 mit ATMEGA32/16MHZ....
    Von masterx im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 10.02.2011, 22:27
  3. atmega32 + oszi 16mhz ... welche fusebits?
    Von BloodyNap im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 29.05.2007, 12:53
  4. ATmega32+16MHZ Standartquarz
    Von timo1105 im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 28.11.2006, 08:44
  5. Fusebit bei 16Mhz und Atmega32
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 36
    Letzter Beitrag: 29.04.2006, 13:14

Berechtigungen

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