Port D nicht als Eingang?

Gast #24300
Hallo Leute,

ich habe folgendes Problem:
Mit einem AT90S2313 habe ich einen I²C Bus aufgebaut,
und diesen auf meiner Steckplatine über den Port B angesteuert.
Das hat auch alles wunderbar funktioniert!
Nun habe ich mir aber ein kleines Applikationsboard dafür zusammen
gelöted und möchte den Bus dort über den Port D ansteuern, dort
funktioniert es aber nicht. Nach mühevoller Fehlersuche habe ich
dann festgestellt, dass wenn ich einen Port (PD5) dort als eingang 
definiere,
dieser sofort als interrupt pin für den timer/counter1 interpretiert
wird, da dieser über einen pull up Widerstand auf high level steht.
Entferne ich diesen Widersand, dann tackten auch die Daten & die Clock
Ports (PD4 und PD6).

Wisst ihr vieleicht, wie man das umgehen kann? Ich kann mir nämlich
nicht vorsetllen, dass Port D nicht als normaler Eingang benutzt werden
kann. ;-)
Gast
Der PortD kann definitiv auch als Eingang benutzt werden. Wie macht sich 
das mit dem Interrupt bemerkbar? Damit er auslöst, muß er eingeschaltet 
werden.
Check Deine Software nochmal durch - dort muß der Fehler liegen.
Außerdem verstehe ich nicht so ganz, weshalb Du 3 Port-Pins für I²C 
brauchst - (Port 4,5,6) - das ist ein 2-Leiter Bus.
Gast
Drei Ports deshalb, da die datenleitung als Ausgang sowie als eingang 
fungiert! Über eine kleine Transistorschaltung teilen sich dann 2 Ports 
die Datenleitung!

Ich habe mitlerweile herrausgefunden, das daran kein interrupt schuld 
ist, ich kann nämlich jeden beliebigen Port D als eingang nehmen und es 
funktioniert an allen nicht.
Besser noch gesagt: sobald der Eingang auf high liegt macht der 
Controller garnichts mehr. Das ist sehr merkwürdig!
Am Controller jedenfalls liegt es nicht, habe auch mal nen neuen rein 
getahn.
Gast
Poste doch mal Deinen Code und die "Transistorschaltung". Irgendwo da 
muß der Wurm drin sein. Die Aufsplittung des I²C-SDA ist eigentlich 
nicht notwendig. Der I²C-Bus ist als "Open Collector" ausgeführt, d.h. 
er zieht nur gegen Masse, die High-Level werden durch den externen 
Pull-Up erzielt. Wenn man das bei der Programmierung beachtet, kann es 
keinen "Crash" geben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 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.