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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.