Forum: Mikrocontroller und Digitale Elektronik Port D nicht als Eingang?


von Britneypunter (Gast)


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. ;-)

von thkaiser (Gast)


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.

von Britneypunter (Gast)


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.

von thkaiser (Gast)


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.

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.