Hallo µCs! Ich habe zur Zeit ein Problem, für welches ich keine Antwort finden konnte. Eventuell ist es einfach eine seltene oder gar irrsinige Sache die ich Versuche.. Anwendungsbeispiel: - Verbinde zwei Mikrocontroller über eine serielle Schnittstelle - Beide verfügen über einen Button - Druck auf den Button sendet ein Signal an den Partner - Partner toggled LED Bedeutet: - Auf Knopfdruck muss der entsprechende µC ein Signal an seinen Partner senden Problem: - Slaves können nicht einfach an einen Master senden, sondern müssen dazu aufgefordert werden. Der master weiß natürlich nichts vom Knopfdruck. Lösungsansätze: - Unschön!: Zusätzliche Leitung zwischen Slave und Master, welche bei Knopfdruck am Slave ein Interrupt am Master auslöst, so dass dieser nach Daten fragt - Unmöglich?: Beide im Slave Modus halten (kein Master vorhanden), bei Knopfdruck wird in den Master umgeschaltet (eventuell warten falls grade empfangen wird), die Kommunikation wird gestartet, anschließend wieder alle im Slave Modus. - Verwendung asynchroner Übertragung anstelle von I2C, SPI Für jegliche Arten von Lösungsansätzen wäre ich sehr dankbar! Grüße, Lars
:
Bearbeitet durch User
>Für jegliche Arten von Lösungsansätzen wäre ich sehr dankbar!
Nimm einen UART. Dann sind alle deine Probleme gelöst.
Mach den einen zum Master. Dieser fragt zyklisch seinen Gegenüber ab. Bei dieser Gelegenheit kann er auch gleich den eigenen Status übermitteln.
I2C ist eigentlich ein Multimastersytem. Eigentlich, weil nicht jede Mastersoftware die Regeln kennt, mit anderen Mastern umzugehen.
Bei Mikrokontrollern kannst du den I2C-Modus ja umschalten zwischen Slave und Master. Im Wartezustand nimmst du den Slavemodus, bis die Taste gedrückt wird. Dann schaltest du auf Master, siehst aber vorher auf den Zustand der Leitungen. Wenn die Leitung frei ist, wird gesendet, ansonsten wird erst als Slave empfangen und dann als Master gesendet.
Lars H. schrieb: > - Unschön!: Zusätzliche Leitung zwischen Slave und Master, welche bei > Knopfdruck am Slave ein Interrupt am Master auslöst, so dass dieser nach > Daten fragt Dann nimm 1-Wire. Die gegenüber I2C/SPI eingesparte Clock-Leitung kannst du für den Interrupt verwenden.
Lars H. schrieb: > - Verwendung asynchroner Übertragung anstelle von I2C, SPI USART und Multi-processor Communication Mode.
Danke für die Antworten! holger schrieb: > Nimm einen UART. Dann sind alle deine Probleme gelöst. ich bin mir allerdings nciht ganz sicher, wie ich dann verhindere, dass die beiden sich beim Senden nicht in die Quere kommen. Jobst Quis schrieb: > Bei Mikrokontrollern kannst du den I2C-Modus ja umschalten zwischen > Slave und Master. Im Wartezustand nimmst du den Slavemodus, bis die > Taste gedrückt wird. Dann schaltest du auf Master, siehst aber vorher > auf den Zustand der Leitungen. Wenn die Leitung frei ist, wird gesendet, > ansonsten wird erst als Slave empfangen und dann als Master gesendet. Ja sowas in der Richtung hatte ich gedacht. Werde ich dann mal probieren ob das funktioniert. Ich weiß halt nicht was mit der Clockleictung passiert, wenn es keinen Master mehr gibt. Mike schrieb: > Dann nimm 1-Wire. Was ist damit gemeint? Also, nur eine Leitung (Übersetzen hab ich hinbekommen), aber was steckt dahinter? Auch in asynchroner Ansatz?
Lars H. schrieb: > Ich weiß halt nicht was mit der Clockleictung > passiert, wenn es keinen Master mehr gibt. Dann ist die Leitung im Ruhezustand, also über die Pullup-Widerstände auf H. Eine gute Erklärung des I2C gibt es zB hier: http://www.timmermann.org/ralph/index.htm?http://www.ralph.timmermann.org/elektronik/i2c.htm
Jobst Quis schrieb: > also über die Pullup-Widerstände Ah, die hab ich glatt vergessen! Dachte die Leitung hinge dann eifnach in der Luft :D
Lars H. schrieb: > ich bin mir allerdings nciht ganz sicher, wie ich dann verhindere, dass > die beiden sich beim Senden nicht in die Quere kommen. Kann nicht passieren, Leitungen sind gekreuzt, also stören die beiden sich nicht gegenseitig. Gilt auch für SPI, allerdings muß da einer Master sein.
:
Bearbeitet durch User
Lars H. schrieb: > Lösungsansätze: > - Unschön!: Zusätzliche Leitung zwischen Slave und Master, welche bei > Knopfdruck am Slave ein Interrupt am Master auslöst, so dass dieser nach > Daten fragt Das nennt sich dann SMBus. Andere Lösung: der Slave merkt sich die Taste und wenn er regelmäßig alle 100ms (oder 200ms oder wie schnell es immer nötig ist) gefragt wird, meldet er den Tastendruck und möglicherweise auch wie lange er gedrückt wurde. MfG Klaus
>holger schrieb: >> Nimm einen UART. Dann sind alle deine Probleme gelöst. > >ich bin mir allerdings nciht ganz sicher, wie ich dann verhindere, dass >die beiden sich beim Senden nicht in die Quere kommen. Die können sich nicht in die Quere kommen. Das ist ja das gute am Uart. Jede Seite kann einfach senden wann es ihr beliebt. Dazu muss keinerlei Rücksicht auf die Gegenseite genommen werden. Den Rest von dem rumgeposte hier kannst du vergessen. Wenn du eine Sache nicht willst, dann ist es ein I2C Multimaster System;)
Lars H. schrieb: > Mike schrieb: >> Dann nimm 1-Wire. > > Was ist damit gemeint? Also, nur eine Leitung (Übersetzen hab ich > hinbekommen), aber was steckt dahinter? Auch in asynchroner Ansatz? Siehe: https://de.wikipedia.org/wiki/1-Wire Mit freundlichen Grüßen, Karol Babioch
>Siehe: https://de.wikipedia.org/wiki/1-Wire > >Mit freundlichen Grüßen, >Karol Babioch Was soll er jetzt mit diesem Schwachsinn?
holger schrieb: > Was soll er jetzt mit diesem Schwachsinn? Eine Antwort auf die Frage "Was ist damit gemeint?" finden? Bei Maxim Integrated, die die Dallas Semiconductor, den Erfinder vom 1-Wire Bus gekauft haben, gibt es in der Application Note 126 natürlich auch auch einige Infos und Anregungen zum 1-Wire Bus http://www.maximintegrated.com/en/app-notes/index.mvp/id/126
>> Was soll er jetzt mit diesem Schwachsinn? > >Eine Antwort auf die Frage "Was ist damit gemeint?" finden? Er will kein 1-Wire. Den Schrott kann man sich sonstwohin stecken.
holger schrieb: > Er will kein 1-Wire. Den Schrott kann man sich sonstwohin stecken. Schön, dass du jetzt schon für andere entscheidest was sie wollen. Ich hingegen wollte nur der Vollständigkeit halber eine Referenz auf das 1-Wire Protokoll liefern, und damit aufzeigen, dass es sich um ein standardisiertes Protokoll handelt. Ob und inwiefern das für den konkreten Anwendungsfall geeignet ist, steht dabei im Hintergrund. Und ja, ich denke auch, dass UART die bisher beste vorgeschlagene Option ist. Mit freundlichen Grüßen, Karol Babioch
Marc Vesely schrieb: > Kann nicht passieren, Leitungen sind gekreuzt hm, ... ja eigentlich klar, wie auch sonst :D Karol Babioch schrieb: > Siehe: https://de.wikipedia.org/wiki/1-Wire Jo danke. Interessante Idee mit der Stromversorgung etc, aber wohl nicht wonach ich suche. Klaus schrieb: > Andere Lösung: der Slave merkt sich die Taste und wenn er regelmäßig > alle 100ms (oder 200ms oder wie schnell es immer nötig ist) gefragt > wird, meldet er den Tastendruck und möglicherweise auch wie lange er > gedrückt wurde. Das ginge, aber sowas wollte ich vermeiden. --- Ich werde mich morgen mal damit beschäftigen, das über UART umzusetzen. Danke für die Hilfe und Anregungen.
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.