Wie programmiert man Eingänge mit AVR-GCC?

Gast #39747
Lesenswert?

Hallo,

Ich habe mir eine Platine für den Atmel AT90S4433 gebaut und
habe gerade erst angefangen damit zu programmieren.
Jetzt schaffe ich es nicht die Ports als Eingänge zu verwenden.
Dazu habe ich auf dieser Seite folgendes Beispiel gefunden:

#include

void main(void)
{
  outp(0xff, DDRB); //Port B = Output
  outp(0x00, DDRD); //Port D = Input
  for(;;) //loop
  {
    outp(inp(PIND), PORTB);
  }
}

Leider verstehe ich absolut nicht, wie man die an Port D anliegennde 
Kombination
in eine Variable speichert, um damit weiter zu arbeiten.
Kann mir jemand weiter helfen?

Vielen Dank im Vorraus,
Jens
Gast #39748
Lesenswert?

#include <avr/io.h>

int main(void)
{
  unsigned char x;

  DDRB = 0xFF;       //Port B = Output
  DDRD = 0x00;       //Port D = Input

  for(;;) //loop
  {
    DDRB = DDRD;     PortD einlesen und auf Port B ausgeben
    x = DDRD;        PortD einlesen und in x speichern
  }

  return(0);
}

bitte die aktuelle WinAVR version nehemen wenn du unter
windows arbeitest!!

gruss,

BAB
Gast #39752
Lesenswert?

Jau,
Jetzt gehts.
Danke sehr!

Nur eins ist seltsam:
Ich habe an den Pins von Port B Leuchtdioden angeschlossen.
An einem der Pins von Port D ist ein IR-Sensor,
wenn ein Objekt in der Nähe ist, ist an diesem Pin 0V ansonten 5V.

Jetzt kann ich beobachten, dass eine Leuchtdiode leuchtet,
wenn kein Objekt in der Nähe ist.
Sobald das Objekt wieder verschwindet fängt die Diode wieder an zu 
leuchten,
aber auch die zwei benachbarten Dioden leuchten für kurze Zeit.
Wie ist das zu erklären?
Gast #39753
Lesenswert?

Vielleicht sollte ich wie in dem AVR-Tutorial I/O-Grundlagen
ein Taster beschrieben ist, am Ausgang des IR-Sensors noch eine
Transistorschaltung mit Pullup-Widerstand anschließen.
Ist es möglich, dass der Eingang ansonsten "überlastet" ist?

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