N' Abend. Ich bastel im Moment an einem System mit RS485. Das RS485-System soll dazu dienen an meiner Modellbahn Lichter und andere Verbraucher zu steuern. Nun überleg ich mir wie das Protokoll aussehen soll. Auf der Hardwareseite gibts im Moment noch nix, klar ist nur das RS485 und AVR's zum Einsatz kommen werden. Aber Schlussendlich werd ich mir wohl Module mit 8-Ausgängen basteln. Zur Adressierung gibts nun zwei Möglichkeiten, entweder ähnlich wie bei DMX eine Startadresse festlegen für den ersten Ausgang, oder jedes Modul bekommt eine Adresse und die Ausgänge werden durchs Protokoll festgelegt. Also bei der DMX ähnlichen Variante würde also jeder Kanal eine eigene Adresse bekommen, also das erste Modul nimmt somit 8-Kanäle in Anspruch, bei der anderen Variante bekommt jedes Modul eine Adresse und die 8-Kanäle werden dann durchs Protokoll angesprochen. Hab mir das Protkoll so vorgestellt: ClientAdresse:AktorAdresse(welcher Ausgang angesprochen werden soll)-Aktion(z.B. Port schalten, oder PWM)-AktionsWert; Das wäre für Möglichkeit 2. Habt ihr evtl. Verbessrungsvorschläge? Gruß david
DMX geht gut bis 512 Geräte Warum ändern, wenn das passt? Grund da was zu drehen sehe ich nur, wenn du sagst du hast wirklich vieeeel mehr Lichter. Dann könnte man anfangen die Daten in "7bit-Helligkeitsinformation" zu zerlegen und dadurch weitere "Aktoren" ansprechen
Dann bräuchte jede Schaltstelle einen Prozessor. Nur so als Idee: PCA8574, ist ein IO-Chip mit 8 IOs, I²C.
Also jede Schaltstelle wird eh nen nen eigenen Prozessor bekommen da das ganze so aufgebaut werden soll das ich die 8 Ausgänge nicht nur ein oder aus schalten möchte, sondern auf dem Chip bestimmte Programme sind, wie z.B. Lauflicht, oder Brandflackern etc. Deshalb wird eh ein Chip auf jedem Aktor fällig. DMX ist etwas Problematisch, da ja jeder Aktor 8-Ausgänge hat und dementsprechend nach 64 Aktoren Schluss. Soviele werdens zumindest bei mir erstmal nicht werden, aber für jeden Ausgang eine Adresse zu belegen, dass finde ich etwas "verschwenderisch", da ich das ganze gerne so halten würde das man theoretisch beliebig viele Aktoren anschliesen kann, und alles gleichzeitig halbwegs übersichtlich bleibt. Somit hätte jeder Aktor auch nur eine Adresse, was ich im Gegensatz zu DMX übersichtlicher finde da ich evtl auch Aktoren mit mehr als 8 Ausgängen einsetzen kann ohne eine neue Startadresse vergeben zu müssen. Ich werde die nächsten Tage mal mit ersten Tests beginnen und dann weiter berichten. Gruss David
Hardwaremäßig 3, ich möcht ja auch nicht alle Kanäle dimmen können, auserdem gibts ja wenn ichs wirklich bräuchte ja auch Software-PWM, müsst ich mich bei Gelegenheit mal in hinsicht auf Bascom damit auseinandersetzen.
Also erstmal solltest Du Dir überlegen, wie Du das verkabeln möchtest. Willst Du einen Bus haben, oder ist Dir ein Ring lieber. Über einen Ring kannst Du relativ einfach ohne Kollisionen per Token Passing auch Rückmeldungen bekommen. An sonsten würde ich das so machen: 1. Die Schnittstelle läuft in einem Modus, in dem Du ganze Bytes verarbeitest. (So wie Du auch mit der seriellen Schnittstelle eines PCs sprechen würdest) 2. Du definierst ein Startzeichen, welches den Begin eines Paketes darstellt. Dieses Zeichen darf sonst nicht in Deinen Botschaften vorkommen. 3. Du machst n Bytes Adresse. Bedenke, wenn Du mehr Bytes verwendest, tust Du Dir leichter bei der Adressvergabe. Im Ringkonzept kann man das aber auch automatisieren. 4. Du definierst entweder feste Paketlängen, oder überträgst eine Länge mit. Für Deine Anwendung wären feste Paketlängen wohl besser. Für den Ring verbindest Du jeweils TX des einen Controllers mit RX des anderen. Wenn Du Bock hast, kannst Du auch noch einen Schalter einbauen, mit dem Du den Mikrocontroller überbrücken kannst. Bekommst Du ein Byte am Eingang, so schaust Du, ob dass das Startzeichen ist. Das bestimmt den Anfang Deines Paketes. Normalerweise schickst Du alle Bytes, die Du bekommst, einfach so weiter. Du schaust dann nach, ob die Adresse Deine ist, und wertest dann gegebenenfalls die restlichen Bytes aus. Die schickst Du aber auch weiter, damit Geräte weiter hinten weiter Bytes bekommen, oder Du schickst das Startzeichen erst dann weiter, wenn Du Dir sicher bist, dass das Paket nicht für Dich ist. Willst Du auch Rückmeldungen bekommen, so definierst Du einfach ein 2. Startzeichen, welches ein leeres Paket anzeigt. Immer dann, wenn Du vom Hauptrechner aus keine Daten schicken willst. Schickst Du leere Pakete, mit diesem Startzeichen. Kommt solch ein Paket bei einem Controller an, der gerade Daten los werden will, so kannst Der einfach das Startzeichen sowie die Leerbytes ersetzen und sein Paket in den Ring einfügen. Im Prinzip kannst Du so mit relativ wenig Aufwand beliebig große Systeme aufbauen.
Also deine Beschreibung ist grundsätzlich gut. Allerdings halte ich das in manchen Teilen für Overkill. Im Moment experementiere ich mit folgendem "protokoll" Adresse:Befehl(z.B.: set on 2[schaltet ausgang 2 an]) Das ganze soll ja nur als "einfache" Steuerung der Lichter und Aktionen auf meiner Modellbahn dienen, so wäre z.B. auch ein Schrittmotor Aktor denkbar an den ich 3 Schrittmotoren anschliesen kann. Oder auch Servos sind denkbar bzw, werden sicherlich einen großen Teil der ganzen Geschichte ausmachen, da würde ich das ganze dann so machen: Adresse:ServoNr-Winkel Aber erstmal weiter experementieren ;) Und schonmal danke für die Antworten, sind sehr hilfreich und ich werd sicher einiges davon aufgreifen :) Gruß David
Eine Konsole ist relativ viel Arbeit. Byteweise zu arbeiten wäre sicherlich einfacher.
Ein STM32 hat 4 Timer und somit 16 PWM Ausgänge. Ich selbst habe damit schon mal 12 LEDs mit unterschiedlicher Helligkeit gedimmt und einen Pipser mit Frequenz-Ausgang... Nur so als Verbesserungsvorschlag.
Werde eigentlich schon bei den AVRs bleiben da ich mit dafür nen passenden Programmer habe und mich schon etwas länger damit beschäftige ;) Gruss David
Hallo! vielleicht ist dies eine Anregung: http://www.ndholmes.com/pmwiki.php/Electronics/MRBus MRBus von "model railroad"
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.