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. ;-)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.