Forum: Mikrocontroller und Digitale Elektronik PIN Status auslesen??


von Gerhard (Gast)


Lesenswert?

Hallo alle,

ich weiss nicht wo, aber irgendwo hab ich einen Denkfehler.

Hab folgende kleine Testfunktion geschrieben:

byte Test(void) {
   DDRB = 0xff;
   DDRD = 0x00;

   PORTB = 0xff;

   LCD_PrintHex(PIND);
}

So - nun hätte ich mir erwarten auf dem Display "FF" zu sehen.
Tatsächlich seh ich nur "00". Warum das?

von Philipp Burch (nicht einglogt) (Gast)


Lesenswert?

Hi,

versuch's mal mit PORTD. Da ich aber nicht weiss, wie die Funktion
"LCD_PrintHex()" aussieht, bin ich auch net sicher ob es so
funktioniert. Aber was soll denn der Sinn davon sein?

von Michael Wilhelm (Gast)


Lesenswert?

Du setzt Port B auf Ausgang, Port D auf Eingang, setzt Port B auf ff und
liest Pin D ein. Alles korrekt. Wenn du anstelle DDRD = 0x00 ein DDRB =
0x00 schreibst oder LCD_PrintHex(PINB), sollte das Ergebnis
entsprechend sein.

MW

von Gerhard (Gast)


Lesenswert?

@Phillip:

Ich möchte ein RS232-Signal, das an einem Pin anliegt einlesen.
PORTD anstelle von PIND kann nicht richtig sein, da ich mit PORTD
lediglich den Status der PullUp-Widerstände einlese.

@Michael:
Ich habe PORTD und PORTB mit einem Kabel direkt verbunden, und möchte
nun auf dem einen (PORTB) ein Signal rausschreiben - kein Problem mit
PORTB = 0xff - und auf dem anderen (PORTD) das nun anliegende Signal
empfangen - so dachte ich, ganz einfach mit x = PIND. Aber anscheinend
habe ich doch irgendetwas nicht berücksichtigt. Und ich komme nicht
drauf.

Dass is PORTD als Eingang definiere, müsste sogar überflüssig sein, da
PINx immer den Pinstatus liefert.

Ich hoffe noch auf den rettenden Einfall. Das kann doch nur eine
Kleinigkeit sein - oder?

GF

von D. W. (dave) Benutzerseite


Lesenswert?

- Aufbau deienr PrintHex-Funktion
- Endlosschleife am Ende
- Verkabelungsfehler
...

von Gerhard (Gast)


Lesenswert?

byte Test(void) {
   DDRB = 0xff;
   DDRD = 0x00;

   _NOP();        // Damit funktionierts
   PORTB = 0xff;

   LCD_PrintHex(PIND);
}

Zum einsynchronisieren fehlte offensichtlich diese NOP() funktion.

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.