Port B eines ATMEGA2561 als einfachen i/o Port nutzen

OP #3793639
Lesenswert?

Liebe Forengemeinde,

ich schlage mich seit ein paar Tagen mit folgendem Problem herum:
An einem ATMEGA 2561 möchte ich den PORTB, der auch die PWM-Kanäle 
beinhaltet, als einfachen i/o-Port nutzen. Leider schlägt dieses fehl, 
da ich trotz Deklaration als Ausgang diese nicht wie gewünscht nutzen 
kann. Auch manuell die Register, welche die PWM-Funktionalität 
beinhalten, auf 0 setzen, brachte leider nicht den erwünschten Erfolg.
Was habe ich bei der Konfiguration übersehen?

Gruß
OP #3793693
Lesenswert?

Hier mal der Auszug mit der Konfiguration von PORTB

/*Definieren der Ausgänge*/

  DDRB |= (1<<DDB4) | (1<<DDB5) | (1<<DDB6) | (1<<DDB7);

  /*Setzen der Startwerte der Ports*/
    PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);


  TCCR0A &= ~(1<<COM0A0) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
  TCCR0B &= ~(1<<COM0A0) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
Gast #3793698
Lesenswert?

Marco G. schrieb:
> TCCR0A &= ~(1<<COM0A0) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
>   TCCR0B &= ~(1<<COM0A0) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
Dir ist klar dass das das gleiche ist wie
1
  TCCR0A &= (~(1<<COM0A0)) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
2
  TCCR0B &= (~(1<<COM0A0)) | (1<<COM0A1) | (1<<COM0B0) | (1<<COM0B1);
und damit das gleiche wie
1
  TCCR0A &= 0xFF;
2
  TCCR0B &= 0xFF;
Und damit einfach gar nichts bewirkt?
#3793701
Lesenswert?

Wieso eigentlich TCCR0B? Das ist nicht fuer die OC-Pins zustaendig.

Auf PortB liegen OC-Pins von Timer 0, 1 und 2, also doch eher:
TCCR0A &= ~(_BV(COM0A1) | _BV(COM0A0) | _BV(COM0B1) | _BV(COM0B0));
TCCR1A &= ~(_BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0));
TCCR2A &= ~(_BV(COM2A1) | _BV(COM2A0) | _BV(COM2B1) | _BV(COM2B0));

Nach einem Reset steht in den Registern aber sowieso 0.
OP #3793707
Lesenswert?

@tassilo H.

Ich dachte auch, dass eigentlich die Register nach einem Reset auf 0 
stehen müssten. Laut Datenblatt reicht aber schon, im DDRB Register die 
entsprechenden Pins als Ausgang zu definieren.

Das TCCR0B ist für den Output B der einzelnen Timer. Auch diese muss ich 
abschalten, da ich die Pins PB4 und PB6 auch als normale i/o's nutzen 
möchte.

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