mikrocontroller Port als Eingang programmieren

Gast #2826923
Lesenswert?
• ▲
▼
Hallo,

wir benutzen in der Schule den Atmel90USB.
in der ersten Stunde mussten wir einen Port ansteuern bei dem eine LED 
leuchtet. Nun wollte ich zu Hause einen Taster mit ins Programm 
aufnehmen. Leider weiß ich nicht wie man den Eingang richtig deklariert

int main(void)
{
  InitAT90();          // Anfangs-Initialisierung

  DDRA = 0b00100000; // am Port-D, bit-6 als Ausgang initialisieren
  PORTA  = 0b00100000; // am Port-D, bit-6 = '1' = LED einschalten


  while(1 == 1)       // Endlosschleife
  {
    ;
  }
}

wie muss ich die Zeile DDRA umbennenen, dass ich DDRA als Eingang 
benutzen kann?
wo steht das im Datenblatt, unter welcher Überschrift muss ich da 
suchen?

vielen Dank im voraus
(Firma: matzetronics)
Lesenswert?
• ▲
▼
Tanja schrieb:
Diese Zeile erklärt alle Pins bis auf Bit 5 ( Computer fangen bei 0 an 
zu zählen, der Port hat also Bit 0 bis Bit 7) als Eingang:

> DDRA = 0b00100000; // am Port-D, bit-6 als Ausgang initialisieren

Du fragst z.B. Bit 0 an Port A so ab:
1
if ((PINA & 0b00000001)==1) {
2
 // Bit is high
3
 // tue hier was, z.B. Port A Bit 5 high machen
4
  PORTA |= 0b00100000;
5
 } else {
6
 // Bit ist low
7
 // mach Bit 5 low
8
  PORTA &= ~(0b00100000);
9
 }
Dein Bit 5 folgt so dem Zustand an Bit 0 des Port A. Besser ist es 
übrigens, Bits  zu definieren, z.B.
[c]
#define LED 5
PortA |= (1 << LED); // mach LED high
{/c]
Gast
Lesenswert?
• ▲
▼
DDRA ist mehr als nur "ein Eingang".
Es sind (je nach Controller) bis zu acht EA-Pins die man über DDRA, 
PORTA und PINA ansteuern bzw. auslesen kann.

Schliess also Deinen Taster einfach an einen der anderen Pins von Port A 
an und schon bist Du fertig.
Gast
Lesenswert?
• ▲
▼
Halo nochmals,

leider check ich die antwort von Matthias Sch.  nicht.
nach meiner Logik müsste es so heißen:

if ((PORTA = 0b00000100)==1)
{
    DDRA = 0b00100000;
    PORTA = 0b00100000;
}
else
{
    DDRA = 0b10000000;
    PORTA = 0b10000000;
}

kann mir jemand sagen warum die if - anweisung nicht funktioniert?
bzw kann mir jemand das von Matthias Sch.  erklären:
if ((PINA & 0b00000001)==1)
was bedeutet das "&"

danke im voraus
Lesenswert?
• ▲
▼
Hier scheinen einige ziemlich Betriebsblind zu sein. Das Problem liegt 
doch wohl eher im Verständnis, was DDRA bedeutet.
DDRA ist das D ata D irection R egister für den Port A. Das ist 
also kein Ein- oder Ausgang, sondern bestimmt, welcher Pin von Port A 
Ein- (Bit gesetzt) oder Ausgang (Bit gelöscht) sein soll.
Jeder Port hat beim den AVR-Controllern 3 Register. DDRx, PINx und 
PORTx.
Lesenswert?
• ▲
▼
Bernhard Spitzer schrieb:
> Hier scheinen einige ziemlich Betriebsblind zu sein. Das Problem liegt
> doch wohl eher im Verständnis, was DDRA bedeutet.
> DDRA ist das D ata D irection R egister für den Port A. Das ist
> also kein Ein- oder Ausgang, sondern bestimmt, welcher Pin von Port A
> Ein- (Bit gesetzt) oder Ausgang (Bit gelöscht) sein soll.

Im Prinzip ja. Ausser dass es laut Datenblatt genau anders herum ist: 
wenn das Bit im DDRA gesetzt ist, ist der entsprechende Pin ein Ausgang, 
wenn das Bit gelöscht ist ein Eingang.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.