Port D nicht als Eingang?

Gast #24300
Lesenswert?
• ▲
▼
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 #24301
Lesenswert?
• ▲
▼
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 #24302
Lesenswert?
• ▲
▼
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 #24303
Lesenswert?
• ▲
▼
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

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.

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.