www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIN Status auslesen??


Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Philipp Burch (nicht einglogt) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- Aufbau deienr PrintHex-Funktion
- Endlosschleife am Ende
- Verkabelungsfehler
...

Autor: Gerhard (Gast)
Datum:

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

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

   LCD_PrintHex(PIND);
}

Zum einsynchronisieren fehlte offensichtlich diese NOP() funktion.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.