Forum: Mikrocontroller und Digitale Elektronik FreeRots Projekt


von s-met (Gast)


Angehängte Dateien:

Lesenswert?

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:)

von S-met (Gast)


Lesenswert?

Ich wollte nur dazu sagen das wir freeRTOS verwenden.

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.