PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2x 16bit PWM ATMega32 @16MHz



deko
19.05.2011, 22:03
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?


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
}
void set_blue (uint16_t pwm)
{
OCR1A = pwm;
}
void set_red (uint16_t pwm)
{
OCR1B = pwm;
}danke für eure Hilfe

Gruß deko

sternst
19.05.2011, 23:03
Woran kann das liegen?Es liegt daran, dass du nicht nachgeschaut hast, welche Konfigurations-Bits in welchem Register sind.

Ceos
20.05.2011, 08:53
http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf ab Seite 107

WGM12 und 13 befinden sich nicht im TCCR1A!

deko
20.05.2011, 14:38
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?

sternst
20.05.2011, 15:01
Du hast einen untauglichen Modus ausgewählt. Wie willst du mit OCR1A den Duty-Cycle einstellen, wenn das der TOP-Wert ist?

Ceos
20.05.2011, 15:19
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

sternst
20.05.2011, 16:10
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).

Ceos
20.05.2011, 17:13
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

sternst
20.05.2011, 18:53
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 funktioniertKonkretes 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.

Ceos
20.05.2011, 19:49
ahso, ja klar das leuchtet ein, hoffentlich ham wir ihm trotzdem helfen können ^^

deko
24.05.2011, 20:11
Hallo,
danke für die vielen Antworten.

Leider bin ich jetzt erst zum Testen gekommen.

Mit Mode14 klappt es wunderbar^ danke an alle