www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 200 I/Os Modular mit AVR verbinden


Autor: Kai G. (runtimeterror)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tag zusammen,

ich bin bei der Planung meiner Hausautomatisierung jetzt bei einer 
zentralen Lösung mit Relais und Stromstoßschaltern gelandet und stehe 
vor der Herausforderung rund 200 Ein- oder Ausgänge mit einem AVR (z.B. 
ATmega 32) zu verbinden. An den Eingängen befinden sich Schalter, Taster 
und Relais von den Bewegungsmeldern, an den Ausgängen die Relais oder 
Stromstoßschalter.

Meine Idee war es nun die 200 Anschlüsse auf 16 Module mit je 8 Ein und 
8 Ausgängen aufzuteilen. Jedes Modul soll eine Adresse bekommen und 
einen Bus angeschlossen werden.

In jedem Modul befindet sich ein Latch, was den Zustand der bis zu 8 
angeschlossenen Relais hält und über einen ULN2803A die Relais 
ansteuert. Soweit ich das verstanden habe reichen die internen 
Schutzdioden für einen sicheren Betrieb aus. Bei einem Strobe-Signal 
sollen die am AVR anliegenden Pegel übernommen werden.

Ein weiteres Latch soll bei einem Strobe-Signal die 
Schalter/Taster-Zustände einfrieren und dem AVR bereitstellen. (z.B. so 
lange die Strobe anliegt?!).

Für einen konkreten Schaltplan fehlt mir allerdings die Erfahrung und 
vor allem der Überblick über die verfügbaren Bauteile. Ich würde gerne 
auf jedem Modul einen 4-fach DIP-Schalter (oder Jumper) unterbringen, um 
die Adresse festzulegen. Gibt es da fertige Bauteile, die bei 
übereinstimmender Adresse "ja, hier ich!" melden? Ich möchte ungerne 
einen kompletten ATtiny für so was stupides einsetzen.

Die größte Unsicherheit habe ich bei der Frage, wie die Strobe und die 
Adresse mit den Latches verbunden werden sollen. Wahrscheinlich gibt es 
da eine Standardverschaltung. Ich lasse mir die Schaltung auch gerne 
noch mal über den Haufen werfen, wenn das nötig sein sollte, ich wollte 
mich nur schonmal selbst daran versuchen.

Ach ja: Unter welchen Umständen muss der Bus terminiert werden - und vor 
allem wie?

Ich würde mich über eine Unterstützung bei dem Projekt freuen,

Kai

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es denn mit einem seriellen Bus, z.B. RS485. Da würde ich jedem 
Slave einen eigenen Prozessor gönnen. Das ganze mit einem einfachen 
Protokoll. Damit hast du 2 Busleitungen (+Masse) statt 21 + Masse.
Die serielle Verbindung ist außerdem auch störunempfindlicher.
Evntuelle Fehlererkennung kann man durch Parity-Bits in Hardware und 
Fehlerkorrektur per zusätzlichem Zeilen/Spaltenparity erreichen. Damit 
hat man dann einen 2-Fehler-erkennenden, 1-Fehler-korrigierenden Code 
erreicht.
Bei Rückmeldungen von Slaves kann nochmal zusätzlich vom Master aus 
festgestellt werden, ob die Nachricht auch fehlerfrei angekommen 
ist(z.B. CRC oder Prüfsumme zusammen mit ACK zurücksenden).
mfg mf

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus, dass die I/Os und der AVR ortsnah sein sollen 
(sonst gaebe ein paralleler Bus ja keinen Sinn).

Viel einfacher waere es dann wenn Du 82C55 nimmst. Jeder 82C55 hat 24 
I/O
Ports. Du brauchst also 8 Stueck davon (ja, sind halt nur 192 I/Os).
Alle Steuerleitungen werden verbunden, bis auf die Chip Selects, die
dekodierst Du mit einem 74HC138 (3 zu 8 Dekoder). Du hast also:

8 Datenleitungen
2 Adressleitungen
/RD
/WR
3 Adressleitungen zum '138

Insgesamt also 15 Leitungen zum AVR, und Du kommst mit 9 ICs und einem 
deutlich geringeren Platzbedarf aus.

Autor: Tassilo Angus (tiras)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Moin

k.a. wie weit die module entfernt sind, aber vielleicht tuns auch ein 
paar i2c io bausteine?

grüße

tassilo

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also mal im ernst die latches brauchst du nicht.. uln2803 ist 
ungeeignet, treibt viel zu wenig, für schütze etc reicht das nicht 
außerdem brauchst du definitiv noch freilaufdioden wenn das ding länger 
als nen tag laufen soll..

ich würde dir wirklich dazu raten fertige IO module auf basis von CAN, 
RS485 oder so zu kaufen und dich nur um die steuerung dieser zu kümmern

Autor: Rene Zimmermann (renezimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schau mal hier http://www.e-lab.de/diverse/components.html. Suchen nach 
"I2C Digital IO". Reichlich davon besorgt und noch ein "EvaBoard" dazu. 
Eventuell braucht man einen zweiten I2C. Da reicht ja dann eine 
Softwarelösung. Fertig ist die Laube.

Gruß Rene

Autor: ♪Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Für einen konkreten Schaltplan fehlt mir allerdings die Erfahrung und
>vor allem der Überblick über die verfügbaren Bauteile.

Wie wäre es mit einem I2C IO Expander z.B.: CAT9555. Da hättest du mit 
13 IC's je 16 IO's deine 200 I/Os abgedeckt.

Autor: lowlevel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kai,

der von dir eingestellte Plan (eher Blockdiagramm) ist doch schon recht 
gut. Ich habe etwas ähnliches gerade aufgebaut um Kabel mit ca. 32 Adern 
auf korrekten Zusammenbau zu testen. Dazu brauche ich insgesamt 64 I/Os. 
Das habe ich ähnlich gelöst. Einmal einen 8-Bit Datenbus den ich vom 
Hauptmodul an alle Module verteile und zusätzlich einen 8-Bit Adressbus 
den ich ebenfalls an alle Module verteile. Der Adressbus wird über 
74238er angesteuert. Am Datenbus angeschlossen befinden sich 74573er als 
Latches. Das EN Signal für das Latch wird aus einem WE-Strobe Signal und 
einem CS-Signal erzeugt. Ich führe also 8 CS-Sigale an jedes Modul +WE 
(+RE). Ein Jumper bestimmt nun welche Adresse das Modul hat. Du könntest 
das Prinzip auch auf 16-Bit aufbohren. Ich meine im Datenblatt vom 74573 
ist sogar ein Aufbau zur Kaskadierung beschrieben. Wichtig bei diesem 
Prinzip ist halt, dass alles an einem Ort ist. Andernfalls solltest du 
auf bereits beschriebene Lösungansätze zurückgreifen, bei denen du einen 
seriellen Bus + uC (ATTiny) zurückgreifst.

Andi D. schrieb:
> außerdem brauchst du definitiv noch freilaufdioden

Da stimme ich zu. Das ist immer sicherer

Gruß lowlevel

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke an alle für die ausführlichen Anworten! Da ist ja alles 
mit dabei - von "kannst du so machen" bis "auf keinen Fall".

Viele raten ja zu einem Master-Slave-Aufbau mit mehreren Controllern mit 
serieller Verbindung. Ich dachte die parallele Variante wäre einfacher 
und fehlerunanfälliger. Es gehen ja keine hohen Datenraten drüber.

Das Ganze soll im oder unmittelbar am Schaltschrank aufgebaut werden. 
Die parallelen Leitungen werden nicht länger als vielleicht einen Meter.

Das mit den zusätzlichen Schutzdioden ist notiert!

Ach ja, streng genommen brauche ich keine I/Os. Jeder Kanal ist entweder 
ein Eingang oder ein Ausgang.

Ich muss jetzt nochmal alle vorgeschlagenen Bauteile und Aufbauten 
verstehen.

Schöne Grüße,
Kai

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Giebeler schrieb:

> Viele raten ja zu einem Master-Slave-Aufbau mit mehreren Controllern mit
> serieller Verbindung. Ich dachte die parallele Variante wäre einfacher

Du brauchst am anderen Ende sowieso irgendwelche Elektronik. Dann kann 
es auch gleich ein kleiner µC sein, der die Übertragung auf 
Fehlerfreiheit prüft.

> Das Ganze soll im oder unmittelbar am Schaltschrank aufgebaut werden.
> Die parallelen Leitungen werden nicht länger als vielleicht einen Meter.

Je mehr Kabel, desto mehr Möglichkeiten, dass etwas passieren kann.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, dann verfolge ich mal den Ansatz mit EIA-485 als Bus mit 
entsprechendem Protokoll. Auf die Slave-Module würde ich dann direkt 
einen ATmega packen. Damit spare mir die Latches, den Adressdecoder und 
habe noch Platz für etwas Eigenintelligenz. Kann/soll/muss man die 
Schaltung gegen die EM-Unruhen im Schaltschrank schützen? Ich wollte die 
Module in je einem Hutschienengehäuse unterbringen.

Dann war da noch:
> uln2803 ist
> ungeeignet, treibt viel zu wenig, für schütze etc reicht das nicht
> außerdem brauchst du definitiv noch freilaufdioden wenn das ding länger
> als nen tag laufen soll..

Wie sieht denn die optimale Ansteuerung von 24 V/DC-Relais und 
Stromstoßschaltern aus? Ich würde bei der Menge ungerne einen diskreten 
Treiber bauen müssen.

Danke und schöne Grüße,
Kai

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Giebeler schrieb:
> Wie sieht denn die optimale Ansteuerung von 24 V/DC-Relais und
> Stromstoßschaltern aus?

Kommt in einem gewissen Rahmen darauf an, wieviel Strom die haben 
wollen. Mit ein wenig Glück bist du mit einem ULN2803 schon dabei.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Stromstoßschalter bin hier hier gelandet:
Finder 20.22.9.024.4000
230 mA @ 24 V/DC, wenn ich das Datenblatt richtig verstehe

Die Relais:
Finder 22.21.9.024.4000
52,2 mA @ 24 V/DC

Beim ULN heißt es in den Absolute Maximum Ratings:
500 mA Continuous Collector Current

Das passt meiner Meinung nach also ganz gut. Ich versuche jetzt noch 
rauszubekommen, wie hoch die Leistungsabgabe ist ...

Gruß,
Kai

Autor: Horst-Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LOL @Karl heinz, du bist vielleicht ein Scherzkeks. Für ein paar I/Os 
über eine Strecke von ein paar Zentimetern ein RS-485 Bussystem 
stricken? Das macht man sicher mal an nem Nachmittag, ROFL! Das 
komplette Protokoll mit Fehlerkorrektur und allem! Das Debuggen wird 
bestimmt auch Ruckzuck erledigt sein! Du ziehst dir die Hosen auch mit 
der Beißzange an, oder?

Und da wundert man sich, wieso niemand Indschenöre einstellen will ...

Kai, tu dir einen Gefallen und mach das mit den 8255.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horst-Otto schrieb:
> LOL @Karl heinz, du bist vielleicht ein Scherzkeks. Für ein paar I/Os
> über eine Strecke von ein paar Zentimetern ein RS-485 Bussystem
> stricken?

1) war RS-485 nicht meine Idee

2) denke ich nicht, dass 200 Ausgänge sich auf ein paar Zentimetern
   ergeben

> Kai, tu dir einen Gefallen und mach das mit den 8255.

und was ist jetzt der Vorteil an diesem Dinosaurier?

Autor: Horst-Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz, hast du schon mal mehr als ein Hello World in BASIC 
programmiert? Auf der einen Seite hast du einen einzigen Controller, der 
ein paar I/Os schaltet, auf der anderen Seite ein Netzwerk aus 10 
Controllern, mit eigenem Protokoll und Pipapo. Meinst du nicht, daß das 
ein klitzekleiner Unterschied in der Komplexität, Fehleranfälligkeit und 
Debugbarkeit ist? Meinst Du, es verlangsamt die Entwicklung, bei jeder 
Codeänderung 10 Controller zu programmieren und mindestens zwei 
verschiedene Code Repositories zu verwalten?

> 2) denke ich nicht, dass 200 Ausgänge sich auf ein paar Zentimetern
> ergeben

Du hälst es ernsthaft für ausgeschlossen, 10 ICs auf eine Platine zu 
packen?

> und was ist jetzt der Vorteil an diesem Dinosaurier?

Du meinst abgesehen von den Punkten, die ich bereits aufgezählt habe? 
OK, billiger und schneller sind sie auch noch.

Und es gibt wohl einen Grund, daß diese ICs seit 30 Jahren hergestellt 
werden und immer noch von einem halben Dutzend Hersteller verfügbar 
sind. Sie haben sich BEWÄHRT. AVRs gibts ja jetzt schon kaum noch zu 
kaufen. Wenn in 15 Jahren ein Gewitter die I/O ICs killt, dann gibt es 
immer noch 82C55 zu kaufen. Der ATMegaschlagmichtot ist dann seit 10 
Jahren abgekündigt und Neuentwickeln ist angesagt. Hoffentlich hast du 
wenigstens die Sourcen noch ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horst-Otto schrieb:
> Karl heinz, hast du schon mal mehr als ein Hello World in BASIC
> programmiert?

Ha, ha
Da muss ich jetzt lachen!

Ich denke, ich bin dir ein paar Millionen Lines of Code vorraus.
In dem Punkt legst du dich mit dem Falschen an.

> Du hälst es ernsthaft für ausgeschlossen, 10 ICs auf eine
>  Platine zu packen?

Aufgrund welcher seiner Aussagen schliesst du, dass alle 200 Ausgänge 
auf einer einzigen Platine beisammen sind?

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die von mir gewünschte Aufteilung in mehrere identische Module war schon 
Absicht. Wenn mir ein Modul ausfällt kann ich es einfach tauschen - 
dafür wären dumme Module eigentlich besser. Alles auf einer Platine 
wäre ziemlich unsinnig.

Das mit dem Programmieren der Einzelmodule hätte ich gerne vermieden, 
ist aber auch kein k.o-Kriterium. zumal ich besser programmieren kann 
als Schaltungen zu entwerfen ;)

Autor: Kai G. (runtimeterror)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei mal ein erster Schaltplan.

Stellt euch statt dem ATmega8515 einen ATmega162 vor, der mit RX0/TX0 
mit dem MAX481 (der eigentlich ein MAX485 sein soll) verbunden ist.

Die Klemmen für die 24 V, die 5 V sowie den Bus fehlen noch.

Ich suche jetzt erstmal eine Software, mit der man die Platine in der 
richtigen Größe erstellen kann - auf ein halbes Europakartenformat passt 
das nicht sinnvoll ...

Schöne Grüße,
Kai

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Anbei mal ein erster Schaltplan.

Warum benutzt du für die RS485 nicht die UART des Controllers?

MfG Spess

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht gibt es ja eine fertige c-lib, wo die Daten gleich überprüft 
werden. Ich hab mir auch schonmal einen Plan gemacht, sozusagen eine 
PIC-SPS zu machen. Man könnte zur Prüfung die Daten, die vom Master zum 
Slave gesendet worden sind, wieder zurücksenden. Die Warscheinlichkeit, 
dass ein Fehler durch einen anderen Fehler wieder rausgenommen wird, ist 
ja relativ gering. Um Zeit zu sparen, könnte man sagen, dass, wenn der 
Master keine neuen Daten (die gleichen wie zuvor) sendet, war alles in 
Ordnung.

Karl heinz Buchegger schrieb:
> Horst-Otto schrieb:
>> Karl heinz, hast du schon mal mehr als ein Hello World in BASIC
>> programmiert?
>
> Ha, ha
> Da muss ich jetzt lachen!

Ich auch^^ Du tust mir schon fast leid, schon ein zweiter Thread, wo man 
dir was will ;)

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Giebeler schrieb:
> In jedem Modul befindet sich ein Latch, was den Zustand der bis zu 8
> angeschlossenen Relais hält und über einen ULN2803A die Relais
> ansteuert.
Gibt es als ein Bauteil von Micrel: MIC5800/MIC5801

Bustechnisch würde ich persönlich CAN nehmen: du brauchst dich nicht ums 
Protokoll kümmern, da jedes Modul eine eigene ID bekommt und die 
Kollisionsgeschichte direkt vom Controller übernommen wird.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Giebeler schrieb:
> Stellt euch statt dem ATmega8515 einen ATmega162 vor
Warum machst du das ganze nicht Memory-Mapped, wenn du schon einen 
Controller mit externem Interface einsetzt?

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai

Anmerkung am Rande, ich habe die Tage einen Protoytpen zum PCB-Pool 
gejagt, auf dem pro 8 Kanäle ein ATtiny2313 und ein ULN2803 sitzt. Bzgl. 
der Freilaufdioden, da nutze ich die internen des ULN2803 und zuätzliche 
Finder Relais mit Entstörelektronik.

Zusätzlich gibt es einen weiteren, neunten, ATtiny2313 der sich um 
Überwachung kümmern kann.

Als Anbindung kommt ein MAX489 Full-Duplex RS-485 Treiber zum Einsatz.

Klingt erstmal kompliziert und nach Kanonen zum Spatzen erlegen, ist es 
aber nicht. Ein ATTiny2313 kostet unter 2€, kann man also auch neben ein 
paar Ersatz ULN2803 auf Halde legen. Und ne ganze MCU pro 8 Ports hat 
den Vorteil das eben auch nur 8 Ports ausfallen wenn ein Controller 
stirbt ;-)

Insgesamt habe ich pro Modul 8x ATtiny2313 plus ULN2803, nen 
Quartzoszillator und einen "Master" ATtiny2313(der kann auch weggelassen 
werden).

Das Ganze passt samt Spannungsregler und Steckklemmen auf eine 
zweiseitige Euro-Platine, die ist dann aber auch gut voll.


Gruß,
Jan

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spess53 schrieb:
> Warum benutzt du für die RS485 nicht die UART des Controllers?

Mache ich doch (hatte versehentlich RX0/TX0 statt RX1/TX1 geschrieben). 
Der ATmega162 hat an PB2, PB3 seinen UART1.

Micha schrieb:
> Bustechnisch würde ich persönlich CAN nehmen: du brauchst dich nicht ums

Habe versucht mich vor CAN zu drücken, da mir hier einfach die Erfahrung 
fehlt ;) - aber sinnvoll wäre das schon; bevor man sich eine eigene 
Kollisionserkennung schreiben muss.

Micha schrieb:
>> Stellt euch statt dem ATmega8515 einen ATmega162 vor
> Warum machst du das ganze nicht Memory-Mapped, wenn du schon einen
> Controller mit externem Interface einsetzt?

Was hätte das für einen Vorteil? Wie genau stellst du dir das vor? Das 
klingt wieder nach einer parallelen Anbindung mit Adressdecoder und Co 
...

Danke und schöne Grüße,
Kai

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich vergessen habe:
Alle, ich nenne sie mal Portcontroller, lauschen über den selben RS485 
Treiber. Soll aktiv zurückgesendet werden, dient der neunte Controller 
als Arbiter und koordiniert die Sendeberechtigung.

Zum Vergleich ein 8 Port i2c IC kotste gerade mal 20 Cent weniger als 
ein ATtiny2313 und ist kein bisschen flexibel.

Autor: Tassilo Angus (tiras)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin moin

nur musst du dort erst mal alles in software schreiben...

grüße

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn es sich hier doch um Leitungslängen von nur 1-2 Meter handelt, was 
haltet ihr von 4 niederohmigen Shift Register Leitungen, die von Modul 
zu Modul gehen.

Alternativ Uart 5V in Richtung Master -> Empfänger der Slaves Parallel. 
Alle übertragungen mit Adresse, Daten und Prüfsumme. Als Rückantwort 
dient dann eine Ringleitung, die vom Master über einen Widerstand auf 
+5V gezogen wird. Empfängt jetzt ein Slave eine richtige Adresse mit 
Daten und RICHTIGER Prüfsumme so wird diese Leitung für eine gewisse 
Zeit auf GND gelegt. Detektiert der Master dies wurde das Paket richtig 
empfangen. Wird es nicht detektiert, wird nochmal gesendet.


Gruß,
Tubie

Autor: Jan Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tassilo Angus schrieb:
> nur musst du dort erst mal alles in software schreiben...

Das ist natürlich richtig, hat aber IMHO mehr Vor- als Nachteile.
Das wird ja auch keine komplexeSoftware, ich werde sie komplett in 
Assembler schreiben.

Autor: Ihr Admins seit alle Arschlöcher! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Giebeler schrieb:
> Ein weiteres Latch soll bei einem Strobe-Signal die
> Schalter/Taster-Zustände einfrieren und dem AVR bereitstellen. (z.B. so
> lange die Strobe anliegt?!).

http://tinyurl.com/xmega-help

Autor: Jan Schneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tubie schrieb:
> Empfängt jetzt ein Slave eine richtige Adresse mit
> Daten und RICHTIGER Prüfsumme so wird diese Leitung für eine gewisse
> Zeit auf GND gelegt. Detektiert der Master dies wurde das Paket richtig
> empfangen. Wird es nicht detektiert, wird nochmal gesendet.
So ähnlich überlege ich das auf Modulebene zu machen ;-)

Je einfacher das Protokoll um so besser, man kann ja mit einem 
regelmäßigen Refresh arbeiten, und spart sich ein vollwertiges Protokoll 
mit Kollisionsbehandlung etc.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan Schneider schrieb:
> Je einfacher das Protokoll um so besser, man kann ja mit einem
> regelmäßigen Refresh arbeiten, und spart sich ein vollwertiges Protokoll
> mit Kollisionsbehandlung etc.

So isses. Bei einem reinen Master-Slave-Protokoll braucht man keine 
Kollisionsbehandlung. Man muss nur eine gewisse Wartezeit vorsehen, 
falls ein Slave nicht antwortet, was die Übertragung verlangsamt, aber 
eine Kollisionsstrategie benötigt auch Wartezeiten und ev. 
Wiederholungen. Ich habe gute Erfahrungen mit der einfachen Strategie 
Befehl raus - Slave bestätigt, oder eben das ganze nochmal. Das einzig 
komplexe dran ist, nicht existierende Slaves nach einer Weile aus der 
Liste zu nehmen und neu eingeschaltete wieder rein. Das kann man sich 
aber auch sparen und bis in alle Ewigkeit alle möglichen Slaves 
abfragen, ob sie nun da sind oder nicht.

Gruss Reinhard

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Kern schrieb:
> Das einzig
> komplexe dran ist, nicht existierende Slaves nach einer Weile aus der
> Liste zu nehmen und neu eingeschaltete wieder rein.

ist doch aber auch kein großes Problem mit der von mir oben 
beschriebenen Methode. Bei normalem ACK eines Datensatzes wird die 
Ringleitung für sagen wir 50ms auf low gezogen. Wird ein Gerät neu 
dazugeschaltet, zieht es die Leitung für 1 sec auf low. Das signalisiert 
eine Änderung am Bus und der Master kann alle Adressen mit einem 
Attention Signal abklappern.


Gruß,
Tubie

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man verdrahtet 200 I/O quer durchs Haus in einen Schaltschrank und macht 
sich dann über ein Bussystem innerhalb des Schaltschrankes Gedanken ..

naja ;)

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tubie schrieb:
> Reinhard Kern schrieb:
> .... Wird ein Gerät neu
> dazugeschaltet, zieht es die Leitung für 1 sec auf low. Das signalisiert
> eine Änderung am Bus und der Master kann alle Adressen mit einem
> Attention Signal abklappern.

Hallo Tubie,

klar funktioniert sowas, aber ich lege Wert auf Hardware-Unabhängigkeit, 
d.h. meine Protokolle sollen zumindest funktionieren mit V24 und allen 
Verwandten wie RS422, RS485 und und, sowie Ethernet (Internet) und USB. 
Da kann ich also nicht an einer Ringleitung zupfen. Praktisch arbeite 
ich ausschliesslich mit Senden und Empfangen von Strings, wie die 
meisten Internetprotokolle auch. Also eigentlich geht das dann mit jeder 
überhaupt denkbaren Hardware, auch wenn der Slave um den Jupiter kreist, 
da werden bloss die Wartezeiten etwas länger.

Gruss Reinhard

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reinhard,

das Protokoll basiert ja auf Uart, 8 Bit, usw... auch die Pegel sind 
auch wie auf der RS485. Nur der Rückweg wurde vereinfacht. Klar kann man 
auch auf dem Bus eine einfache Ack meldung versenden. Der Sender muß 
hierfür immer wieder auf empfang umschalten, Wartezeiten müssen beachtet 
werden. Was ist wenn ein Slave Gerät länger für die Antwort braucht 
(Warum auch immer?) und der Master schon wieder sendet dannm brauchts 
noch eine Kollisionsüberwachung Und wenn es was selbstgestricktes werden 
soll, dann warum nicht so?


Theoretisch wäre auch eine Lösung denkbar bei der der Master nur sendet 
und der Slave nur empfängt. Ohne Rückantwort. Sowas in RS485 aufzubauen 
wäre immer noch am leichtesten. Uart auf 9Bit stellen Adresse mit 
Bit9=1, Daten mit Bit9=0. Jedes Paket wird sicherheitshalber 3x gesendet 
und das ganze bei 4800 Baud und eine Überwachung sollte überflüssig 
werden. Im ersten Post die Parallele Methode hat ja auch keine 
Überwachung drin.

Gruß,
Tubie

Autor: Marcel Papst (phpmysqlfreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tubie schrieb:
> Uart auf 9Bit stellen Adresse mit
> Bit9=1, Daten mit Bit9=0. Jedes Paket wird sicherheitshalber 3x gesendet
> und das ganze bei 4800 Baud und eine Überwachung sollte überflüssig
> werden. Im ersten Post die Parallele Methode hat ja auch keine
> Überwachung drin.


Jeder Slave könnte dann alle 3 betreffenden Pakete für Adresse und für 
Daten (insg. 6) auf gleichheit überprüfen.
Tritt ein Fehler, wird nichts ausgeführt. So bleibt der aktuelle Zustand
erhalten und man merkt, dass die Kommunikation nicht richtig 
funktioniert.

Ich habe leider zur Zeit zu wenige Controller da, aber ich würde mich 
auch an der Entwicklung beteiligen.

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans-georg Lehnard schrieb:
> Man verdrahtet 200 I/O quer durchs Haus in einen Schaltschrank und macht
> sich dann über ein Bussystem innerhalb des Schaltschrankes Gedanken ..

Was würdest du denn vorschlagen? Alles auf eine Platine? Sobald ich 
mehrere Platinen/Module habe, muss ich die irgendwie untereinander 
verbinden.
Bus durch's Haus scheidet zumindest aus organisatorischen Gründen aus.

Mal 'ne blöde Frage am Rande: Ich überlege mir gerade eine Lösung mit 
CAN (weil eigentlich bietet der genau das, was ich brauche). Die Module 
kriegen dann alle einen ATmega162 + MCP2515 soweit klar. Der Master soll 
jetzt aber den CAN-Bus und Ethernet bedienen. Muss ich jetzt z.B. einen 
AT90CAN128 nehmen und diesen mit SPI an einen ENC28J60 anbinden, oder 
kann ich auch zwei Controller (CAN und Ethernet) per SPI an einen 
normalen ATmega16 anbinden?

Danke und schöne Grüße,
Kai

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tubie schrieb:
> .... Was ist wenn ein Slave Gerät länger für die Antwort braucht
> (Warum auch immer?) und der Master schon wieder sendet dannm brauchts
> noch eine Kollisionsüberwachung

das kann nicht passieren, der Master ist der Master und ist derjenige 
der wartet. Eine solche Wartezeit tritt übrigens immer auf, der Slave 
könnte ja ausgefallen oder abgeschaltet sein.

> Theoretisch wäre auch eine Lösung denkbar bei der der Master nur sendet
> und der Slave nur empfängt.

Niemals. Der Experimentator vor dem Bildschirm würde ja bis in alle 
Ewigkeit nicht erfahren, dass der Slave kaputt ist. Das wäre etwa so 
sicher wie bei einem Priester, der weiss ja auch nie, ob seine Gebete 
erhört werden. Technik funktioniert anders.

Gruss Reinhard

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Reinhard,

hast ja recht. Ich würde es ja auch nur mit Rückantwort machen. Aber sei 
doch mal ehrlich. Wenn man sich die ganze Kette mal ansieht:

Sender <--> Empfänger -> µC -> Transistor -> Relais -> 20m Kabel -> 
Glühbirne

Es sind noch viel mehr Glieder in der Kette, die ausfallen können als 
die Serielle Verbindung. Bei einer so einfachen Anwendung wie 
Hausautomation, kann man das doch sehen, wenn eine Birne nicht angeht 
oder ein Rollo nicht zugeht. Wenn dann müsste man Nägel mit Köpfen 
machen und den Relais Ausgang an der 230V Seite abgreifen und als 
Rückantwort geben "Relais hat erfolgreich eingeschaltet"


Gruß,
Tubie

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tubie schrieb:
> ... Bei einer so einfachen Anwendung wie
> Hausautomation, kann man das doch sehen, wenn eine Birne nicht angeht
> oder ein Rollo nicht zugeht.

Hallo Tubie,

klar, wenn man das sieht, hat man ja die perfekte Rückmeldung; die 
Fernbedienung eines Fernsehers geht ja auch nur in eine Richtung.

Gruss Reinhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.