Hallo:) wir haben volgendes projekt von der Schule bekommen. "Kollisionsfreier Single Wire Bus" Sie müssen dazu zwei "Spezialkabel" anfertigen welches 3 Eingänge und 3 Ausgänge an einem Punkt miteinander verbindet. Durch die Pull Up Widerständen an den drei Eingängen ist das Potential normalerweise High = 1 , zieht nun einer der 3 Ausgänge über seinen Open Collector Ausgang das Signal auf Low = 0, so erkennen dies alle 3 Boards. Jenes Board das durch das Setzen des Ausgangs dies bewirkt hat kann nun über eine DatenLeitung ein Bitmuster senden, dieses wird von den anderen beiden Primern erkannt und am LCD-Display angezeigt. Jede Übertragung beginnt mit einer Startsequenz 010 gefolgt von einer Senderkennung (001 für Primer 1, 010 für Primer 2, 100 für Primer 3), (Primer ist ein Entwicklungsboard). danach folgen die (ASCII) Zeichen und am Ende eine Stoppsequenz 101. Übertragen wird mit einer fixen Datenrate z.B. 100 Bit pro Sekunde. Jedes Board hat ein eigenes Sendeintervall, also z.B. Board 1 alle 5 Sekunden, Board 2 alle 7 Sekunden, und Board 3 alle 12 Sekunden. Die Daten (fixer String „Hallo Welt“) werden in diesem Rhythmus von einem Task erzeugt, übertragen werden Sie von einem anderen Task immer dann wenn der Bus frei ist. Die Erkennung ob der Bus frei ist muss natürlich sehr rasch erfolgen. Die Busteilnehmer sind gleichberechtigt keine Priorität, können erzeugte Daten nicht gesendet werden, so müssen Sie zwischengepuffert werden (Queue). Jeder Primer zeigt die am Bus empfangenen Daten pro Übertragung in einer eigenen Zeile, und je nach Senderkennung in einer eigenen Farbe am LCD-Display an. Bitte erstellen Sie auf jeden Fall zuerst ein Inter-Task-Communication Diagramm um die Abläufe sichtbar zu machen. --> Meine Ausarbeitung dazu schaut so aus (bitte Rechtschreibfehler nicht beachten): a. Zu allererst werden die Timer synchron gestartet. P1 warte 5 Sekunden und schickt dann anschließend eine die Init-Sequenz und wartet zB 15 Taktzyklen bis die anderen Primer ihre Timer aktiviert haben und aktiviert dann anschließend seinen Timer. b. Danach schickt P1 die Startsequenz. Die anderen Teilnehmer warten auf den Zielteilnehmer. Wenn zB P1 schickt zu P2 dann wird ein ASCII-Zeichen übertragen. P3 wartet da er die Zeichenlänge 8 Bit weiß, die Dauer von einem Zeichen ab. Danach lauschen die anderen Teilnehmer auf eine Stopsequenz, falls statt einem Stopsequenz eine Continue-Sequenz empfangen wird, wir das nächste Zeichen gesendet, P2 wertet das Zeichen aus, und P3 wartet nochmal die Dauer eines Zeichens ab, usw. Tritt nun eine Stopsequenz auf endet die Transaktion. c. Alle Teilnehmer erzeugen eine Abwartzeit. d. Der erste der seine Zeit abgewartet hat beginnt eine neue Transaktion und anschließend folgen die Schritte von b bis d immerwieder durch, dazu müssen natürlich die Abwartevorgänge von den anderen Teilnehmern durch eine Init-Sequenz unterbrochen. 1.) Ist es gut das ich das immer mit einer Countinue-sequenz regele? 2.) Hat freeRTOS irgendwie eine möglichkeit eingebaut damit man sehen kann das ein BUS gerade belegt ist? 3.) Wie sollte ich die Timer am besten Synchronisieren? ist meine lösung ideal dafür? 4.) Wie könnte ich es am BESTEN regeln damit 2 primer nicht zu gleich eine startsequenz senden? ist meine lösung mit Random Zahlen eine gute Idee dafür oder wäre da eine andere Lösung besser? Ich brauche bitte jeden Input von euch für diese aufgabe. DANKE:)
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.