PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega Familie bei PWM mehr als 256 Stufen möglich???



Teslafan
19.04.2012, 20:57
Servus ihr lieben, mal ne Frage gibts ne möglichkeit die Pulsbreiten bei der PWM über 256 zu bringen? 8-Bit Timer fliegt ja raus aber was ist mit dem 16-Bit Timer ist es damit möglich? Als Hardware PWM? Hab bisher immer nur 256 Stufen gesehen, würde für ne Regelung von nem 12V Motor gerne mehr als 256 Stufen haben. Ist dies möglich mit nem reinen AVR (http://www.mikrocontroller.net/articles/AVR)? Gruß Andi

Kampi
19.04.2012, 20:58
Die Megas können glaub ich bis 10 Bit.

Teslafan
19.04.2012, 21:04
Und wie kommt man da ran? Hab bisher leider immer nur die Beispiele mit 256 Stufen gefunden. Hat einer von euch schon mal mehr verwendet?

Teslafan
19.04.2012, 21:11
Dank dir,

das mit den 10-Bit hat sich googlen lassen und die Infos folgten sogleich...

http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM

also bis 1023 Stufen sind möglich :)

Thomas E.
19.04.2012, 21:25
[...] also bis 1023 Stufen sind möglich :)
Mehr geht dann nur mehr per Software-PWM. :)

Teslafan
19.04.2012, 22:00
Und ich bekomm nicht mal die 1024 Stufen hin.
Bin an nem Atmega 8 Timer 1 dran mit 16 Bit. Laut Datenblatt WGM10, WGM11, WGM12 auf "high" und WGM13 auf "low" für ne 10Bit Fast PWM dann hab ich gedacht den Prescaler auf 1024 einstellen das er auch bis 1024 zählt. Oder ist das schon in der Theorie falsch?

Hier mal ein Auszug meines Codes:
[CODE]
//1***pwm init********************************************** ************************************
TCCR1B |= (1<<CS12); //Prescaler 1024

TCCR1A |= (1<<WGM10); //Fast PWM Mode

TCCR1B |= (1<<WGM12);

TCCR1A |= (1<<COM1A1) | (1<<COM1B1) ;

OCR1A = 10; //PWM Start-Wert

DDRB |= (1<< PB1); //PWM aktivieren

TCCR1B |= (1<<CS10) | (1<<WGM11); //Erweiterung auf Pulsbreite von 1024


[/CODE

Was mach ich falsch? Wohl ne ganze Menge ;)
Sobald ich die letzte Zeile drin hab steigt die Spannung gar nicht mehr an und er Zählt sie trotzdem nur bis 256 hoch.

Gruß Andi

markusj
19.04.2012, 22:50
Sorry, aber: Alles Falsch!

Ich kenne keinen AVR, der mit n-Bit-Timern nicht auch n-Bit-PWM machen kann. Auch wenn es vielleicht davon eine Ausnahme gibt: Die üblichen Verdächtigen können 16-Bit PWM mit 16-Bit Timern. Ich zitiere Mal aus dem Datenblatt des ATMega16:

The PWM resolution for fast PWM can be fixed to 8-bit, 9-bit, or 10-bit, or defined by either ICR1
or OCR1A. The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and the
maximum resolution is 16-bit (ICR1 or OCR1A set to MAX)

mfG
Markus

sternst
19.04.2012, 23:21
... dann hab ich gedacht den Prescaler auf 1024 einstellen das er auch bis 1024 zählt.Hä?
Der Prescaler legt fest, wie schnell der Timer läuft, mit dem "bis wo" hat er nicht das geringste zu tun.

Außerdem zweifle ich stark an deiner Verteilung der WGM-Bits auf die Register.

MagicWSmoke
20.04.2012, 07:57
also bis 1023 Stufen sind möglich

...auf "low" für ne 10Bit Fast PWM dann hab ich gedacht den Prescaler auf 1024 einstellen das er auch bis 1024 zählt.
Wieder mal ein Beleg, dass die gleichzeitige Beauftragung von mehreren Foren nicht unbedingt zur Erleuchtung beim TE führt...
http://www.mikrocontroller.net/topic/256209#new

Teslafan
20.04.2012, 16:55
Erstmal danke für euer schnelles Feedback.

Sorry für den Quatsch mit dem Prescaler, war gestern schon recht spät und saß auch schon recht lang davor. Ich glaub ich werd mir heute Nacht mal das Datenblatt für den Atmega 8 unters Kopfkissen legen, vielleicht bringts was ;)

@MagicWSmoke Es tut mir sehr leid das du mich bei nem Doppelpost erwischt hast. Ich werd dich in Zukunft erst fragen bevor ich es wage in deinem Internet nach Hilfe zu fragen. Ne mal im Ernst es war spät, ich war frustriert und ich wollte dieses Problem lösen. Zudem finde ich es auch nicht schlimm wenn man in mehreren Foren Aktiv ist, aber falls es eine Art Ehrencodex gibt, oder du einen Eid geschworen hast der es dir untersagt in mehreren Foren aktiv zu sein dann tut es mir leid.

@alle anderen: Großes Kompliment für dieses tolle Forum und an all die jenigen, die täglich uns noch nicht so Erfahrenen hilfreich zur Seite stehen, anstatt verbale Ohrfeigen zu verteilen, wie es in anderen Foren an der Tagesordnung ist. Dankeschön.

Zu meinem PWM Problem werd ich mich nochmal einlesen und dann Bericht erstatten.

Gruß Andi

MagicWSmoke
20.04.2012, 17:16
Zudem finde ich es auch nicht schlimm wenn man in mehreren Foren Aktiv ist, aber falls es eine Art Ehrencodex gibt, oder du einen Eid geschworen hast der es dir untersagt in mehreren Foren aktiv zu sein dann tut es mir leid.
Da hab' ich garantiert nix dagegen, ich find's aber aus verschiedenen Gründen störend als Hilfesuchender gleichzeitig in mehreren Foren um Hilfe zu bitten. Im Prinzip bedeutet das ja nichts anderes, als dass Du den Mitgliedern im einen oder anderen Forum die Antwort nicht zutraust.

Zu meinem PWM Problem werd ich mich nochmal einlesen und dann Bericht erstatten.

...bevor ich es wage in deinem Internet nach Hilfe zu fragen.
Hier wurde es Dir richtig erklärt, und im MC.net wurde es Dir richtig erklärt, aber Du weist es immer noch nicht. Was hatte dann Dein Doppelpost überhaupt für einen Nutzen, wenn er Dir schon nicht die unmittelbare Erkenntnis bescherte ?

Teslafan
20.04.2012, 17:32
Sorry, dann seh ich den Wald vor lauter Bäumen nicht. Ok das mit dem Prescaler war mist das weiß ich jetzt ;) Das es mit der Einstellung der WGM's zusammenhängt ist mir auch klar. Laut Datenblatt beim Atmega 8 Timer 1 WGM10 bis WGM12 auf "high". Das wäre dann für Fast PWM 10-Bit. Hab ich eingestellt und er zählt zudem noch bis 256.

Du zitierst doch gerne, wo hab ich die Lösung übersehen?

Es ging mir bei meinem Doppelpost nicht darum das ich es nicht den Leuten zutraue. Die Leute hier sind echt Top und auch super freundlich mir wurde hier bisher immer gut geholfen. Wie gesagt es war spät und ich saß schon lange dran und wollte dieses Problem einfach nur lösen.

sternst
20.04.2012, 17:37
Zudem finde ich es auch nicht schlimm wenn man in mehreren Foren Aktiv ist, aber falls es eine Art Ehrencodex gibt, oder du einen Eid geschworen hast der es dir untersagt in mehreren Foren aktiv zu sein dann tut es mir leid.Es ist nicht schlimm, in mehreren Foren unterwegs zu sein, aber es ist schlimm, in mehreren Foren gleichzeitig die gleiche Frage zu stellen. Das ist dann eine recht deutliche Aussage der Form:
"Ist mir doch scheiß egal, wenn irgendwelche hilfsbereiten Menschen vielleicht ihre Zeit damit verschwenden, was zu schreiben, was im anderen Forum längst gesagt wurde, Hauptsache ich bekomme so schnell wie möglich meine Antwort."

Teslafan
20.04.2012, 17:47
Wenn das echt so rüberkommt, dann tut es mir ehrlich leid. Wie gesagt mir wurde hier steht's gut geholfen und ich bin auch immer um jede Hilfe dankbar. Dann werde ich Doppelposts in Zukunft unterlassen.
Es tut mir leid wenn ich jemanden damit verärgert habe. Bin sonst nicht in Foren aktiv und kenne von daher auch nicht die No Goes. Wie gesagt Sorry.

sternst
20.04.2012, 18:00
Wenn das echt so rüberkommt, ...Das kommt nicht so rüber, das ist so. Du hast hier doch selbst geschrieben, dass es deine Motivation war, möglichst schnell eine Lösung zu haben. Und dass du damit möglicherweise die Zeit anderer verschwendest, einfach dadurch, dass Dinge unnötigerweise mehrfach gesagt/geschrieben werden, ist auch eine Tatsache. Aber ich will dir mal zu Gute halten, dass das "mir scheiß egal" wohl nur ein "daran habe ich nicht gedacht" war. ;-)



Das es mit der Einstellung der WGM's zusammenhängt ist mir auch klar.
...
Du zitierst doch gerne, wo hab ich die Lösung übersehen?

Außerdem zweifle ich stark an deiner Verteilung der WGM-Bits auf die Register.

Teslafan
20.04.2012, 18:16
Wie gesagt, war nicht böse gemeint. Antworte den Leuten auch immer die mir Helfen. Und wenn ich mal helfen kann, helfe ich auch (kam leider noch nicht so oft vor :) )
So hab mir jetzt nochmal das Datenblatt angesehen und die Verteilung der WGM-Bits auf die Register überprüft.

Ich dank dir, manchmal schaut man sich den Code 10 mal an und denkt die Register passen doch. Erst als ichs jetzt grad schreiben wollte das alles passt hab ich gesehen das ich WGM11 dem TCCR1B zugeordnet habe.
Ich stand vor dem Wald mit der Axt in der Hand, aber kein Baum weit und breit ;)

Werds gleich mal umschreiben und schauen ob er jetzt mal höher als 256 zählt. Danke, war echt schon am verzweifeln.

Teslafan
20.04.2012, 18:29
Und es klappt halt auf anhieb ;)
@sternst Wärst du jetzt hier würde ich dir um den Hals fallen! War heute morgen auf Arbeit total fertig weil ich gestern noch so lang davor saß und rumgeflucht habe :) Gibts halt echt nicht was der Unterschied zwischen "A" und "B" alles ausmachen kann. Echt Genial, Danke :)

Kampi
20.04.2012, 19:23
Und es klappt halt auf anhieb ;)
@sternst Wärst du jetzt hier würde ich dir um den Hals fallen! War heute morgen auf Arbeit total fertig weil ich gestern noch so lang davor saß und rumgeflucht habe :) Gibts halt echt nicht was der Unterschied zwischen "A" und "B" alles ausmachen kann. Echt Genial, Danke :)

Schön wenn was funktioniert ;)

Teslafan
20.04.2012, 19:37
So hier nun mal die PWM Init für den ATmega 8, Timer 1, Fast PWM 10-Bit:


//***pwm init********************************************** ************************************
TCCR1B |= (1<<CS12); //Prescaler 512

TCCR1A |= (1<<WGM10) | (1<<WGM11); //Fast PWM Mode 10 Bit

TCCR1B |= (1<<WGM12);

TCCR1A |= (1<<COM1A1) | (1<<COM1B1) ;

OCR1A = 10; //PWM Start-Wert

DDRB |= (1<< PB1); //PWM aktivieren



Bei mir funktionierts jetzt, vielleicht hilft es mal jemandem ;)