Moin,
ich habe folgendes Problem.
Ich habe früher schon einmal mit Hilfe eines ATMega 16 (und dem Atmel
Evaluationsboard) 4 PWM's erzeugt. Hiermit habe ich Motoren gesteuert.
Jetzt habe ich einen ATMega 32 und möchte auch 4 PWM's erzeugen, aber
diesmal um Laserdioden zu dimmen. Problem hier nur, dass die PWM's die
ich erzeuge eine viel zu langsame Frequenz haben. Ich dachte mir ich
könnte das Makefile und meinen alten Quellcode einfach kopieren (nach
meinen wünschen etwas modifiziert) und dann müsste es gehen, da ich
dachte, dasss der Unterschied zwischen Mega16 und Mega 32 nur der
Speicher ist. Irgendwie funktioniert das aber leider nur die
beschrieben.
Muss ich im Makefile noch irgendwas umstellen? Oder schreibe ich die
Register falsch?
Im Anhang mein Quellcode.
wäre cool, wenn mir jemand helfen könnte
Grüße Martin
#include <avr/io.h>
void timer_initialisierung(void)
{
DDRD = 0xff; //Ports A,B,D werden als Ausgänge gesetzt
DDRA = 0xff;
DDRB = 0xff;
TCCR1A = (1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<WGM10);
TCCR1B = (1<<CS10)|(1<<CS12);
TCCR2 = (1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM20)|(1<<COM21);
TCCR0 =
(0<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(1<<CS02)|(0<<CS01)|(0<<CS00
);
TIMSK &= ~0x3c;
}
int main (void) {
timer_initialisierung();
OCR1AL = 80*2.55;
OCR1BL = 50*2.55;
OCR2 = 50*2.55;
OCR0 = 50*2.55;
while (1);
}
Martin wrote:
> Hier einmal die ersten paar Zeilen des Makefile.. hoffe das beantwortet> deine Frage
Das Makefile hat nichts mit dem Takt zu tun, mit dem der AVR tatsächlich
läuft! Wenn die Clock-Fuses nicht korrekt gesetzt sind, dann läuft er
auch nicht mit 16 MHz, da kann im Makefile noch so sehr "16000000"
stehen. Im Auslieferungszustand läuft der Mega32 genau wie der Mega16
mit dem internen RC-Oszillator mit 1 MHz.
Martin wrote:
> ähh... Ich bin leider nicht so versiert bei dieser Thematik ;) könntest> du mir erklären was du damit meinst und wo ich das finde?
Was? Die Fuse-Einstellungen stehen im Datenblatt!
AVR Fuses
@ Johannse
und das heißt jetzt was? Ich versteh leider nicht so viel davon. Muss
ich irgendwo was umstellen? Also der ist neu und wurde nicht verändert.
Demnach Standart
Martin wrote:
> @ Johannse
Aua!
> und das heißt jetzt was? Ich versteh leider nicht so viel davon. Muss> ich irgendwo was umstellen?
Lies Dir den Artikel durch!
> Also der ist neu und wurde nicht verändert.> Demnach Standart
Standard schreibt man mit einem "d" hinten! Das ist keine Art zu
stehen.
@Martin (Gast)
>und das heißt jetzt was? Ich versteh leider nicht so viel davon.
Du musst die Fuses richtig programmieren, damit dein AVR mit der
richtigen Taktquelle und Freqeunz läuft.
> Muss ich irgendwo was umstellen?
Ja, die Fuses.
> Also der ist neu und wurde nicht verändert.>Demnach Standart
Dann läuft er mit 1 MHz internem RC-Oszillator.
MFG
Falk
Martin wrote:
> Ja den Text habe ich gelesen. Ich bin bloß etwas irritiert, da ich> damals bei dem Mega 16 auch nichts verändert habe (Clock-Fuse).
Dann war der Mega16, den Du damals verwendet hast, nicht fabrikneu.
Martin wrote:
> Hallo Falk,> ja meine Frage ist bloß einfach, was sind Fuses (was normale Sicherungen> sind ist mir klar) und wie programmiere ich diese?
Das sind Konfigurationsbits in einem speziellen, nichtflüchtigen
Speicherbereich. Wie die programmiert werden, steht in dem von mir
weiter oben angegebenen Artikel AVR Fuses, von dem Du eben noch
behauptet hast, Du hättest ihn gelesen.
Ah.. hab den Link nicht wargenommen, sorry.
Danke schonmal im Vorraus, für die spontane Hilfe. Ich werde das mal
testen und mich gegebenenfalls noch einmal melden.
Danke und Gruß Martin
irgendwie scheine ich dafür zu blöd zu sein. Hab ich das richtig
verstanden, dass ich diese Fuses in PonyProg2000 einstellen muss?.
Oder sind das einfach nur zwei/drei Zeilen Quellcode?
Sorry das ich solch blöde Fragen stellen muss.
Gruß Martin
@Martin (Gast)
>verstanden, dass ich diese Fuses in PonyProg2000 einstellen muss?.
Ja. Oder im AVR-Studio, wenn du einen AVR-Studio kompatiblen
Programmieradapter hast.
>Oder sind das einfach nur zwei/drei Zeilen Quellcode?
Nein.
MFg
Falk
So nach einige Versuchen, habe ich es geschafft, dass der nicht mehr
1Mhz eingestellt ist sonder 8Mhz. Ich bedanke mich schon einmal für
diese Hilfe. Leider blinkt die Led immernoch. eigentlich sollte sie
dunkler werden. Habt ihr hierzu vielleicht noch eine Idee? Wäre cool..
Danke Gruß Martin
Versuch mal das hier:
(Zeile ersetzen)
TCCR0 =
(0<<WGM01)|(1<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00
);
Mit den letzten 3 Bits stellst du den Prescaler ein.
Je kleiner diese 3 stellige Zahl, desto schneller deine Interrupts.
Ich sehe gerade, dass du Timer2 auch drin hast. Vieleicht kann dir
jemand anderes weiterhelfen... Ich muss weg
>So nach einige Versuchen, habe ich es geschafft, dass der nicht mehr>1Mhz eingestellt ist sonder 8Mhz.
Im Makefile steht was von 16MHz. Warum stellst Du Dein uC nicht auf
diese Frequenz ein?