Forum: Mikrocontroller und Digitale Elektronik 2 Controller steuern 1 Treiber - Kommunikation wie??


von Mike (Gast)


Lesenswert?

Ich brauche ein paar Ideen, es fällt mir sehr schwer, bei diesem 
schwülen Wetter brauchbare Gedanken aufs Papier zu bekommen.

Ich habe auf einem Board zwei Controller, die eigentlich unabhängig 
Aufgaben erledigen. Es findet untereinander keine Kommunikation statt, 
war bisher nicht nötig und ist HW-seitig auch nicht vorgesehen.

Aber beide Controller haben Zugriff auf einen Treiber, der eine LED 
ansteuert. Im Prinzip sind beide Kontroller über jeweils einen Port-Pin 
direkt miteinander verbunden. An dieser direkten Verbindung hängt ein 
Widerstand, der wiederum am Treiber hängt.

Die Idee war:
Wenn der eine Controller den Treiber ansteuert, kann der zweite 
"mitlesen". Und umgekehrt. ==> Hat auch funktioniert bzw. funktioniert 
auch weiterhin.

Die neue Herausforderung ist aber allerdings:
Am zweiten Controller hängt ein Taster, der, wenn er betätigt wird, den 
ersten Controller beeinflussen soll.
Heißt:
Der erste Controller (ATmega) steuert den Treiber für die LED im 4Hz 
Takt.
Wenn der Taster am zweiten Controller (AT90CAN) betätigt wird, soll der 
erste Controller mit 10Hz blinken.

Mein Grundgedanke ist:
Während der taktgebende Controller in der Low-Phase ist, soll der 
"mitlesende" Controller, den Input auf Output wechseln und ein 
High-Impuls(Peak) senden, der z.B. beim taktgebenden Controller per 
Interrupt empfangen wird.
Kommt also in der Low-Phase ein Impuls (aus Sicht des taktgebenden 
Controllers), wird die Frequenz gewechselt.

Was mich gerade stört, ist die Umschaltung der Ports bzw. der Wechsel 
zwischen Output und Input auf beiden Seiten.
Gibt es da fertige Routinen?
Ist eine Umschaltung erforderlich? Kann man in der Low-Phase trotzdem 
etwas abfragen?

Die HW kann nicht geändert werden - sie existiert schon. Es ist auch 
kein externer Pull-up/Pull-down Widerstand vorhanden.

Könnt ihr mir mit Ideen auf die Sprünge helfen?

Schwitzige Grüße

von Joe F. (easylife)


Lesenswert?

Warum lässt du nicht einfach den 2. Controller (der mit dem Taster) die 
LED in Abhängigkeit der Tasterinformation blinken, und der erste 
Controller liest die Frequenz mit?
Dann benötigst du überhaupt keine Umschaltung.

Controller 2: Output
Controller 1: Input

von Stefan F. (Gast)


Lesenswert?

> der Wechsel zwischen Output und Input auf beiden Seiten.
> Gibt es da fertige Routinen?

Das soll ein Scherz sein, oder? Zur Umschaltung der Richtung ändert man 
ein Bit (jedenfalls bei den meisten Mikrocontrollern). Brauchst du eine 
vorgefertigte Routine, die ein Bit ändert?

Wenn ja, was machst du, wenn mal mehr als diese kleinste denkbare 
Operation gemacht werden soll? Beauftragst du dann einen Spezialisten?

Ich empfehle Dir, ein Programmier-Tutorial durchzuarbeiten. Vorzugsweise 
nicht von Arduino.

Gib nächstes mal an, um welche Bauteile es konkret geht. Bei 
"Controller" könnte man (wenn man spitzfindig ist) auch an etwas ganz 
anderes denken, zum Beispiel einen Beruf oder ein Eingabegerät für 
Videospiele. Und bei "Treiber" fallen mir spontan die Ägypter beim 
Pyramidenbau ein, die haben Sklaven getrieben.

Ich bin mit 41 zwar schon alt, aber ich denke, dass sich die 
Fachbegriffe in den letzten 20 Jahren nich so plötzlich geändert haben, 
dass ich es nicht mitbekommen habe.

Ansonsten lass uns mal eben schnell die Amper für den Exiter Slayer 
hochskillen damit der Joule Thief nicht dein Smartphone zockt. :-)

Sorry, das musste mal raus.

von Karl H. (kbuchegg)


Lesenswert?

Mike schrieb:

> Die HW kann nicht geändert werden - sie existiert schon.

Ist kein Argument.
Du glaubst gar nicht, was man mit einem scharfen Messer und mit dünnem 
Draht (Fädeldraht) an einer bereits 'fertigen' Platine noch alles ändern 
kann.

> Könnt ihr mir mit Ideen auf die Sprünge helfen?

Sorg für eine ordentliche eindeutige Verbindung vom 2.ten Controller zum 
ersten. Deine Idee ist eine Schnapsidee.
Zum einen dürfen niemals 2 Ausgänge gegeneinander treiben. Zum anderen 
sind Interrupts kein Allheilmittel für einen verkorksten Ansatz.

Also entweder die Ansteuerung der LED auf den 2.ten Controller verlagern 
und im 1.ten Controller die Blinkfrequenz (mit einer gewissen 
Verzögerung) feststellen und darauf reagieren oder die Hardware 
entsprechend umbauen, wenn noch Pins frei sind.

von Mike (Gast)


Lesenswert?

Joe F. schrieb:
> Warum lässt du nicht einfach den 2. Controller (der mit dem Taster) die
> LED in Abhängigkeit der Tasterinformation blinken, und der erste
> Controller liest die Frequenz mit?
> Dann benötigst du überhaupt keine Umschaltung.

Der erste Controller wertet analoge Messungen an diversen Sensoren aus 
und treibt entsprechend die Ausgänge. An diesem ist kein weiterer Pin 
mehr frei.
Der zweite Controller hat bereits einen Taster. Und dieser soll nach 
Betätigen, Einfluss auf die Blinkfrequenz nehmen bzw. den Ausgang 
dauerhaft einschalten.

von Mike (Gast)


Lesenswert?

Stefan U. schrieb:
> Das soll ein Scherz sein, oder? Zur Umschaltung der Richtung ändert man
> ein Bit (jedenfalls bei den meisten Mikrocontrollern). Brauchst du eine
> vorgefertigte Routine, die ein Bit ändert?
Das bekomme ich noch so gerade hin...
Wenn du richtig lesen kannst, bemerkst du, dass die Portpin direkt 
miteinander verbunden sind. Und wenn der eine Ausgang auf Low ist und 
ich beim zweiten Controller die Richtung ändere (Input --> Output) und 
einen Peak darauf gebe, was glaubst du was passiert???

> Gib nächstes mal an, um welche Bauteile es konkret geht. Bei
> "Controller" könnte man (wenn man spitzfindig ist) auch an etwas ganz
> anderes denken, zum Beispiel einen Beruf oder ein Eingabegerät für
> Videospiele. Und bei "Treiber" fallen mir spontan die Ägypter beim
> Pyramidenbau ein, die haben Sklaven getrieben.
Wer lesen kann ist klar im Vorteil (ATmega und AT90CAN)

> Ich bin mit 41 zwar schon alt, aber ich denke, dass sich die
> Fachbegriffe in den letzten 20 Jahren nich so plötzlich geändert haben,
> dass ich es nicht mitbekommen habe.
>
> Ansonsten lass uns mal eben schnell die Amper für den Exiter Slayer
> hochskillen damit der Joule Thief nicht dein Smartphone zockt. :-)

Meine Empfehlung:
Wenn man einen Troll-Beitrag abgeben möchte und nicht konkret zur Lösung 
beiträgt, lässt man den Beitrag besser weg. Er hilft nicht weiter!
Alternative Empfehlung:
Beitrag lesen und VERSTEHEN und dann einen Beitrag zur Lösung geben.

Du hast mir jedenfalls nicht geholfen :(

von Mike (Gast)


Lesenswert?

Karl H. schrieb:
>> Die HW kann nicht geändert werden - sie existiert schon.
>
> Ist kein Argument.
> Du glaubst gar nicht, was man mit einem scharfen Messer und mit dünnem
> Draht (Fädeldraht) an einer bereits 'fertigen' Platine noch alles ändern
> kann.

Das stimmt, aber es sind mehrere Platinen, die bereits eingebaut sind 
(und vergossen). Ein SW-update ist aber - dank Bootloader - relativ 
einfach möglich

von Frank (Gast)


Lesenswert?

Alles es du in der Richtung machst ist in meinen Augen pfusch.

Aber du könntest es so machen das UC 1, der die LED ansteuert in einer 
lowhigh Phase erst eine Zeit lang auf Eingang mit Pullup geht. Also low, 
Eingang+Pullup, high.
In der Phase trigger er zärtlich auf eine fallende Flanke.
Der 2. Controller reagiert immer auf die steigende Flanke (durch den 
Pullup) mit einem interrupt.
Tritt er auf und es soll eine Umschaltung auf 10Hz erfolgen, zieht der 
2.UC den Pullup nach unten über ein low. Der UC 1 erfasst diese fallende 
Flanke durch den interrupt und schaltet beim nächsten Zyklus auf die 
höhere Frequenz.

Oder du sendet gleich ein Protokoll in der Eingangsphase.

von Frank (Gast)


Lesenswert?

Also eine Art "Led Ansteuerung mit überlagerter UART".
Mit Symbolbreite 1-x.

P.S. Ja ich habe selbst die Schreibfehler gesehen. Verdammte Korrektur 
:-)

von Matz K. (xt-matz)


Lesenswert?

Mike schrieb:
> kein externer Pull-up/Pull-down Widerstand

Ist nicht tragisch, Der ATmega hat interne Pullups.
Frank hat die Lösung skizziert:
Du machst die "Datenübertragung" von MCU2 nach MCU1 in der LED-AN-Phase:

LED-AN  = MCU1 ist auf INPUT mit PULLUP
LED-AUS = MCU1 ist auf OUTPUT mit LOW

MCU2 kann dann in der LED-AN Phase das Signal (kurz) auf LOW ziehen.

Die Triggerung kann man so machen, wie es Frank skizziert hat.

Das hat auch den Benutzer-Vorteil, dass bei eingeschalteter LED ein 
kurzer "Aussetzer" vom Auge nicht so störend wahrgenommen wird, wie 
umgekehrt.

Fertige Routinen gibts dafür natürlich nicht. Die tricksige Lösung musst 
Du selbst implementieren.

Viel Erfolg.
Matz.


Stefan U. schrieb:
> Ich bin mit 41 zwar schon alt...
Da hast Du aber was falsch gemacht, wenn Du Dich mit diesen jungen 
Jahren schon so alt fühlst. Lass Dir das aus Erfahrung sagen... ;-)

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.