Forum: Mikrocontroller und Digitale Elektronik Atmega 2560 PWM


von Basti H. (basti1508)


Lesenswert?

Hallo zusammen. Ich zerreiße mir gerade den Kopf, da ich jetzt schon 30 
verschiedene Codes ausprobiert habe, aber keiner bei mir funktioniert 
hat -.-

Könnt ihr mir mal sagen wo der Fehler liegt bitte??

[¢]

#include <avr/io.h>

int main(void){

  DDRB = 0xFF;

  while(1)
  {
    TCCR0A |= (1 << COM0A1);
    OCR0A = 250; // set pwm duty
  }

  return 0;
}

[/c]

Danke für die Hilfe

von Spess53 (Gast)


Lesenswert?

Hi

>aber keiner bei mir funktioniert hat -.-

Du solltest dem ATMega auch sagen, das er in einem PWM-Mode laufen soll. 
Stichwort WGM-Bits.

MfG Spess

von tft (Gast)


Lesenswert?

initialisierungs routinen sind nicht zum spaß da!

von Basti H. (basti1508)


Lesenswert?

So gehts auch nicht... was fehlt noch?

#include <avr/io.h>

int main(void){

  DDRB = 0xFF;
  TCCR0A |= (1 << COM0A1) | (1 << WGM00) | (1 << WGM01) | (1 << WGM02);
  OCR0A = 250; // set pwm duty

  while(1)
  {
  }

  return 0;
}

von holger (Gast)


Lesenswert?

>  TCCR0A |= (1 << COM0A1) | (1 << WGM00) | (1 << WGM01) | (1 << WGM02);

WGM02 liegt nicht in TCCR0A.

von Basti H. (basti1508)


Lesenswert?

So noch mal ein update.. geht aber immer noch nicht...

#include <avr/io.h>

int main(void){

  TCCR0A |= (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
  TCCR0B = TCCR0B | (1 << CS02) | (1 << CS01) | (1 << CS00) | (1 << 
WGM02);
  OCR0A = 250; // set pwm duty
  DDRB |= (1 << DDB7);


  while(1)
  {
  }

  return 0;
}

von Karl H. (kbuchegg)


Lesenswert?

Wahllos einfach irgendwelche Bits setzen führt auch nicht zum Erfolg!

Welchen Modus hast du denn jetzt aktiviert?
Welche Voraussetzungen hat dieser Modus und welche Nebenbedingungen?


Solange du noch nicht fit bist, ... nimm einen Fast-PWM Modus mit 
konstanter Bitzahl.

von holger (Gast)


Lesenswert?

Mach das

| (1 << WGM02)

mal weg.

von Basti H. (basti1508)


Lesenswert?

Habe das WGM02 Bit entfernt... aber ich bekomme ünerhaupt keinen output 
auf B7...

von Thomas E. (thomase)


Lesenswert?

Basti Himmi schrieb:
> Habe das WGM02 Bit entfernt... aber ich bekomme ünerhaupt keinen output
> auf B7...
Was erwartest du denn und womit misst du das?

mfg.

von Basti H. (basti1508)


Lesenswert?

Also mein Problem hat sich jetzt verändert...

Die PWM funktioniert jetzt, allerdings ist die Ausgangsspannung zu 
niedrig.

der Aktuelle Code für den Port:

DDRE |= (1 << 4);
TCCR3A |= (1 << COM3B1) | (1 << WGM30) | (1 << WGM31);
TCCR3B |= (1 << CS31) | (1 << WGM32);
OCR3B = val;

bei ( val = 254) bekomme ich gerade einmal eine Spannnung von 1V. Ich 
bräuchchte aber 5V

Was ist hier noch falsch?

von Paul B. (paul_baumann)


Lesenswert?

>bei ( val = 254) bekomme ich gerade einmal eine Spannnung von 1V.

Worüber hast Du das gemessen? Ist da überhaupt eine Last dran, an der 
die
Spannung abfallen kann, oder hängt der Ausgang nur in der Luft und Du
mit dem Meßgerät dran?

Dann siehst Du nichts Anständiges.

MfG Paul

von Basti H. (basti1508)


Lesenswert?

Da häng ein LED Controller dran

Wenn ich den LED-Controller mit

PORTE |= (1 << 4)

ansteuer und messe habe ich 5V

Wenn ich mit nem arudino sketch analogWrite(254) mache, hab ich auch 5V.
Nur bei meinem PWM sind es nur 1,1V.

von Spess53 (Gast)


Lesenswert?

Hi

>Wenn ich mit nem arudino sketch analogWrite(254) mache, hab ich auch 5V.
>Nur bei meinem PWM sind es nur 1,1V.

Du hast eine 10-BitPWM eingestellt. Klar, das bei einem OCR-Wert von 254 
keine 5V herauskommen.

MfG Spess

von Basti H. (basti1508)


Lesenswert?

@Spedd53: Danke das habe ich übersehen :S Jetzt läufts !!!

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.