Forum: Mikrocontroller und Digitale Elektronik Problem ATmega2561 PWM nur 2,5V Spitze


von Matthias S. (matze11)


Lesenswert?

Hallo,

ich betreibe hier einen ATmega2561 mit der PWM (Timer0) und wundere mich 
gerade, warum der MOSFET so heiß wird (N-logic).

Ich habe mit dem Oszilloskop nachgemessen und festgestellt, dass das PWM 
Signal des Controllers nur ca.2,5V Spitze hat. Leider auch ohne externen 
Anschluss. Ich habe den Tastgrad auf 100% gesetzt und nochmal mit einen 
Multimeter (DC-Spannung) nachgemessen. Ergebnis waren ebenfalls ca.2,5V.

Dann hatte ich den PORTB als normalen Ausgang definiert und auf high 
gesetzt. Er hat dann auf 5V ausgesteuert.


Initialisierung des Timer0:
FAST PWM

 TCCR0A = (1<<WGM01) | (1<<WGM00) | (1<<COM0A1) | (0<<COM0A0);
 TCCR0B = (0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
 OCR0A  = 255;

Kann sich das jemand erklären und mir helfen?

Danke.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Schaltplan und kompletten Quellcode bitte.

von T. C. (tripplex)


Lesenswert?

Wahrscheinlich Drain Source des Fets vertauscht :)

von Matthias S. (matze11)


Angehängte Dateien:

Lesenswert?

Hier sind die Quelltexte. Ich hoffe da steigt jemand durch.
Auf den Timer0 wird im gesamten Programm nicht zugegriffen (nur bei der 
Initialisierung halt).
Aber das Problem scheint mit auf den ersten Blick von physikalischer 
Art.
Der Controller kann doch nicht auf 2,5V aussteuern, oder?

Der Pin vom Controller (PB7) ist nicht extern angeschlossen und die PWM 
mit Timer3 hat den richtigen high Pegel (0V oder 5V)...

MfG

von spess53 (Gast)


Lesenswert?

Hi

Hast du alle VCC/GND-Pins auch angeschlossen?

MfG Spess

von Matthias S. (matze11)


Lesenswert?

Ja habe ich angeschlossen. Und wenn ich den Pin von Hand auf high setze, 
gibt er ja auch 5V raus...

von Magnetus (Gast)


Lesenswert?

Matthias Stottmeister schrieb:
> Ja habe ich angeschlossen. Und wenn ich den Pin von Hand auf high setze,
> gibt er ja auch 5V raus...

Bitte?

von Spezi (Gast)


Lesenswert?

Hallo,

in der Routine "initpwm" hast du für Timer 3 die folgende Zeile 
programmiert:

> DDRE   |= (1 << PE3 );                // PWM Ausgang + PE0 als
>  Schaltausgang + PE1 für Lüfter

Dies setzt den PWM-Pin auf Ausgang.

Das Gleiche muss auch für Timer 0 und dessen Ausgangs-Pin gemacht 
werden. In der genannten Routine finde ich das aber nicht. So wäre bei 
einem High der PWM-Unit nur der interne PullUp-Widerstand eingeschaltet, 
da der Pin nicht als Ausgang programmiert wurde.

von Spezi (Gast)


Lesenswert?

Nachtrag:
Der PWM-Pin "OC0A" ist der Pin PB7, liegt also auf Port B, nicht auf 
Port E.

von Matthias S. (matze11)


Lesenswert?

Jetzt funktioniert der Ausgang richtig. Lag vermutlich wirklich an der 
fehlenden Ausgangs-Deklaration.

Vielen Dank, du hast mir sehr geholfen!

Liebe Grüße.

Matze

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.