PWM am ATMega64 an Pin E3

OP #1362558
Lesenswert?

Hallo,

beim Versuch ein PWM-Signal auf dem ATMega64 auszugeben habe ich das 
Problem, dass einfach nichts aus dem entsprechenden Pin rauskommt.
Habe auch schon mehrere Foreneinträge gelesen, kann aber meinen Fehler 
einfach nicht finden. Hier der Code:
1
//in der main()-Funtion:
2

3
    DDRE = (1 << PE3); // Pin E7 == Ausgang
4
//PWM Mode 8: PWM, Phase and Freq. correct
5

6
  //==> WGM33 WGM32 WGM31 WGM30 COM3A1 COM3A0 CS32 CS31 CS30
7
  //      1     0     0     0      1      0     1    1    0
8

9
    TCCR3A = (1<<COM3A1);
10
    TCCR3B = (1<<CS32) | (1<<CS31) | (0<<CS30) | (1<<WGM33)| (0<<WGM32);
11
    
12
    while(1)
13
  {
14
  ICR3=255; // Zähler-Endwert
15
  OCR3A = 100; // Bei 100 sollte der Pegel an E7 auf "low" wechseln
16
        
17
        delay_ms(100);
18
        }

Was amche ich falsch?
Danke schonmal, Gruß Thomas
OP #1362731
Lesenswert?

So, habe die TCCR3x - Zeilen mal auskommentiert und Pin E7 abwechselnd 
High und Low zugewiesen, das funktioniert! Das DDR wird also rihtig 
gesetzt und auch der Ausgangstreiber des ATMegas ist in Ordnung.
Ansonsten habe ich mittlerweile alles auskommentiert, nur noch die 
Initialisierung der PWM-Register (also TCCR§A, B) und die Wertzuweisung 
an ICR3 und OCR3A sind im Code.
Habe testweise auch mal OCR3C (also Pin PE5) getestet, da passiert auch 
nichts.
Gibt es noch ein Bit mit dem ich den Timer einschalten muss o.ä.? Oder 
einen Interrupt den ich freischalten muss?
OP #1362782
Lesenswert?

Sorry, hab mich vertippt. Da ich ausschließen wollte dass es ein Fehler 
an Pin PE3 ist habe ich die PWM über OCR3C, also PE5 (nicht 7) 
asugegeben, was aber auch fehlgeschlagen ist. Mittlerweile sind LEDs an 
PE3, PE4 und PE5 um zu vermeiden, dass das Oszi am falschen Pin 
angeschlossen ist ;-)
OP #1363081
Lesenswert?

Hmm ok habe gerade ein paar Artikel gelesen die den Simulator-Bug 
beschreiben.
Ich werde das mit der PWM wohl am Wochenende nochmal probieren; mit 
etwas Glück kann ich den ATMega64 als ATMega32 flashen (überall 32 
einstellen; das Projekt braucht nur mit der PWM-Initialisierung ja kaum 
Flash) und dann  mit dem AVR Dragon als Debugger schauen was mit den 
Registern passiert.
Trotzdem Danke für die Hilfe!
Gast #1364743
Lesenswert?

hast du zufaellig noch das M103C-Fuse gesetzt? der atmega64 wird so 
ausgeliefert und verhaelt sich dann wie ein atmega103, dann 
funktionieren die timer glaube ich anders... ist aber nur eine 
vermutung...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren