Forum: Mikrocontroller und Digitale Elektronik Portpin durchreichen


von anonym (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem: Ich möchte eine Signalleitung, von einen auf 
den anderen Portpin birektional durchreichen. Die Signalleitung wird per 
Pullup auf high gezogen und der µC simuliert einen 
Open-Collector-Ausgang mittels Umschaltung zwischen Tri-State und Low. 
Das Signal ändert sich immer nur auf einer Seite und auch nur, wenn das 
andere high ist. Dies ermöglicht die Birektionalität. Der ganze Vorgang 
soll Interruptbasiert ausgeführt werden.
Der jeweils andere Interrupt wird in der ISR vorrübergehend 
abgeschaltet, um zu verhindern, dass beide Portpins gleichzeitig vom µC 
auf Low gezogen werden und somit ein unverlässlicher Zustand erreicht 
wird.

Leider funktioniert der angehängte Code nicht. Es zeigt sich keine 
Änderung am jeweils anderen Portpin, wenn ich einen der beiden extern 
auf Low ziehe.

Ich hoffe ihr könnt mir helfen eine Lösung für das Problem zu finden.

von anonym (Gast)


Lesenswert?

Hallo,

ich bin ein wenig enntäuscht darüber, dass ich hier noch keine Antwort 
erhalten habe. Fehlt euch eine wichtige Information?

Gruß,
anonym

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

anonym schrieb:
> Hallo,
>
> ich bin ein wenig enntäuscht darüber, dass ich hier noch keine Antwort
> erhalten habe. Fehlt euch eine wichtige Information?
>
Das bin ich auch immer.
Ich kann Dein Problem nicht richtig verstehen bzw. was Du genau vor 
hast.

Bidirektional versteh ich z.B. so :

PB0 = Eingang => PB1 = Ausgang
PB0 = Ausgang => PB1 = Eingang

vielleicht must Du dein Anliegen noch mal anders Formulieren.
Ich habe keine Ahnung von C und klinke mich deshalb wieder aus.

Bernd_Stein

von Peter D. (peda)


Lesenswert?

anonym schrieb:
> ich bin ein wenig enntäuscht darüber, dass ich hier noch keine Antwort
> erhalten habe.

Das ist doch auch eine Antwort.

Es ist immer schlecht, rein theoretische Aufgaben zu stellen.
Du mußt die Aufgabe interessant machen, d.h. eine praktische Anwendung 
beschreiben.

Und dann natürlich die Randbedingungen, ob die Realisierung überhaupt ne 
Chance hat oder der MC hoffnungslos überfordert ist.
In diesem Fall, wie schnell muß eine Reaktion erfolgen (Worst Case 
Berechnung).
Wer dann gedankenlos schreibt "so schnell wie möglich", hat sich 
natürlich als Witzbold entlarvt. Sinnvolle Antworten kommen dann nicht 
mehr.

Schnell, genau, groß, viel und dergleichen schwammige Wörter haben in 
einer Aufgabenbeschreibung nix verloren, da zählen nur Zahlen.


Peter

von Peter II (Gast)


Lesenswert?

anonym schrieb:
> Leider funktioniert der angehängte Code nicht. Es zeigt sich keine
> Änderung am jeweils anderen Portpin, wenn ich einen der beiden extern
> auf Low ziehe.

warum simuliest du den code nicht einfach? Dann sieht du was passiert 
und wo es hängt.

von MWS (Gast)


Lesenswert?

anonym schrieb:
> Fehlt euch eine wichtige Information?

Evtl. nicht interessant genug. Auch wäre statt auf Antwort zu warten, 
der bessere Ansatz gewesen den Code zu simulieren.

Was auffällt: Den jeweils konkurrierenden Interrupt zu deaktivieren ist 
sinnlos, innerhalb der ISR sind jegliche anderen Interrupts sowieso 
gesperrt. Nicht sinnlos wäre dagegen im GIFR die durch den Pegelwechsel 
des Zielports gesetzten Flags zu löschen, sonst wird die Ziel-ISR 
unmittelbar nach Beenden der Steuer-ISR ausgelöst. Auch hätte man INT0 
besser auf Flankenwechsel konfiguriert, dann könnte die INT0-ISR so 
aussehen wie die PCINT0-ISR.

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.