DIY Beleuchtung

steppy

Active Member
Davon habe ich schon mal gehört, dass man über den prescaler weitere Frequenzen bereitstellen kann. Dass muss ich mir noch mal anschauen, dann wäre der mega2560 eine gute Option.
Hi Adrian,
es gibt diverse Stellschrauben, aber den Prescaler brauchst du für die angepeilten Frequenzen gerade nicht ;)
Geht etwas weit das hier jetzt alles im Detail zu erläutern.
Ich habe bestehende Bibliotheken angepasst, so dass man die Bitbreite und Periode bequem vorgeben kann, zumindest für einen Teil der Timer. Ich kann die dir gerne zur Verfügung stellen und helfe dir auch gerne weiter wenn du hier einen Thread aufmachst und falls du dich für einen Atmega entscheidest.

Gruß
Stefan
 

omega

Well-Known Member
Hi,

wie macht das ein Atmel Microcontroller überhaupt? Die maximale PWM-Frequenz hängt ja von der CPU-Frequenz ab. 16MHz und 16bit ergibt max. 244,14Hz PWM-Frequenz. Zählt der die Pulsweite für jeden der 14 Pin in einem eigenen "Core" hoch, oder ist der bereits bei einem Pin auf Volllast?

Grüße, Markus
 

steppy

Active Member
Hi Markus,
die Pulsweite kann pro Port individuell eingestellt werden und "Last" erzeugt man damit überhaupt nicht. Technisch funktioniert das so:

Jeder Timer des Microcontrollers erhöht bei jedem CPU-Takt den Wert eines bestimmten Registers("TCNT") um 1. Über einen Prescaler kann man das noch verringern.
In einem weiteren Register (ICR) kann man vorgeben bei welchem TCNT-Wert er wieder bei 0 mit dem Zählen beginnen soll. Hier bestimmt man als die Frequenz.
In einem weiteren Register ("OCCR") kann man einstellen bis zu welchem TCNT-Wert der Port auf HIGH bleiben soll, hier wird die Pulsweite bestimmt.

Zusätzlich gibt es noch zwei unterschiedliche PWM-Modi, einer läuft nochmal 50% langsamer.
Die Bitbreite reduziert sich mit höherer Frequenz weil man dafür niedrigere Werte für ICR angeben muss. Der Timer zählt also weniger weit hoch, dementsprechend hat man auch weniger gültige Werte für die Pulsweite.

Jeder Timer hat ein TCNT-Register und ein ICR-Register, man kann also pro Timer eine Frequenz (und damit auch ein maximale Bitbreite) einstellen. Beim Atmega2560 gehören zu jedem Timer drei OCCR-Register, die jeweils einen Port steuern. Man kann also auf jedem Port einen anderen Duty-Cycle angeben. Das läuft alles völlig unabhängig voneinander und auch wenn der Controller im Standby ist (je nach Standby-Modus). Der Prozessor muss also gar nichts hierfür tun, läuft alles automatisch parallel im Hintergrund ab. Der Prozessor wird nur benötigt um Register-Werte auf dem Programm heraus zu ändern.

Gruß
Stefan
 

Adison

New Member
Abend zusammen,

der Arduino mega kam heute an. Hoffe ich kann das Wochenende etwas nutzen um mich in das Thema einzuarbeiten. Sobald ich einen ersten Stand habe werde ich mich bzgl. Des controllers wieder melden.

Habe bei voelkner eine größere Bestellung gemacht und eigentlich gehofft dass alles diese Woche kommt für die Beleuchtung. Leider habe ich jetzt gesehen, dass die ldd 1000h dort erst wieder ab August verfügbar sind. Hoffe die haben in ihrem System eine Meldung bekommen, sodass nicht die ganze Bestellung aufgrund eines Bauteils hängen geblieben ist.

Sobald alles da ist werde ich dann die ersten test aufbaueten machen und schauen welche LED Kombination dann die biste ist.

Viele Grüße
Adrian
 
Ähnliche Themen

Ähnliche Themen

Oben