RS485 Nick Gammon

Hier sind mal die Pin-Nummern:

Auf der Seite steht das:

In order to implement serial data on the ATTiny range of ICs, we must implement software serial (there is no in-built USART). This also means, to get the timing correct, we must run at 8MHz, so we must use the ATTiny45 @ 8MHz. Also, due to the slow clock speed, the fastest data transfer rate we can use is 4800 baud (we can use 1200, 2400 or 4800 baud).

k.A. ob eine Baud Rate von 4800 das Problem löst. Aber viele andere Beispiele verwenden das auch.

Hi zusammen

Ich hoffe mal das es ok ist, das ich mich in diesem Thread einklinke.
Kann ich bei der Lib von Nick Gammon feststellen, ob der Bus gerade von einem anderen Gerät zum senden benutzt wird?
Ich baue mir gerade ein im ganzen ziemlich umfangreiches Projekt auf, welches über RS485 Daten austauschen soll. Jetzt möchte ich verhindern, dass 2 Busteilnehmer gleichzeitig senden. Also soll zuerst abgefragt werden, ob der Bus "frei" ist. Wenn ja, dann sollen die Daten gesendet werden, wenn nein soll gewartet werden, bis der Bus frei ist und dänn gesendet werden.
Das einzige was mir dazu fehlt, ist eine Abfrage ob der Bus frei ist.
Ich hoffe ihr könnt mir da weiter helfen.

Liebe Grüsse und ein besinnliches Fest
Peter

Wie ich es verstehe, bei 8Mhz 4800 Baud maximal. Hatte nicht getestet
aber
Ich hab mit 16Mhz bei 9600Baud probiert, dasselbe Ergebnis.
Haben die kein RX/TX?

Stefan.
Mach wie du willst, Hauptsache du Dokumentierst alles fein :smiley:

Die max485 hab ich da auch geholt, 100 Stück bei 8€

Wie meinst du das, hardwaremäßig? ein ATtiny85 für 90Cent wird da auch reichen.
Und wie soll ein max485 ohne controller auskommen? Oder dachtest du den max485 direkt an den Mega im Schaltschrank anschließen? Wird wegen der Kabellänge nicht hinhauen, wenn ichs richtig verstanden habe.
Verstehe momentan kein Wort davon was du geschrieben hast :smiley:
Sterntopologie?

Für jeden max485 brauchst du den GND von dem Mega, an dem er was schicken soll.
Wenns dass ist, was du mit Sterntopologie meinst:
Bei KNX kannst du von einem Taster zum nächsten die 2 Daten Kabel ziehen und parallel anklemmen.
Bei RS485 ist es doch genauso?!

Die haben keine Hardware UARTs. Deshalb braucht man SoftwareSerial.

Probier es mal mit 8 MHz und niedrigen Baudraten. Schadet auf jeden Fall nichts :slight_smile:

Bin grad am löten, teste ich morgen, bzw heute nachmittags :smiley:

hi,

nein, rs485 hat keinen kolissionsschutz.
was ich vorhabe, ist, über eine eigene leitung eine "ankündigung" zu senden. also 3ms die leitung auf high zu ziehen. dann verschieden lang warten (also der, der senden will, wartet 5, 10, 15, 20 usw ms, jeder mögliche sender verschieden lang), und dann ein zweites high.
falls zwei sender gleichzeitig das erste high senden, kann nichts passieren, weil alle nach dem ersten high mindestens so lange warten, wie der größte abstand ist. der, der zuerst das zweite high sendet, gewinnt.
wahrscheinlich könnte man auch ein high über die rs485 senden, darüber denke ich nach...

eigentlich für haustechnik ÜBERsicher, aber was solls...

gruß stefan

puh, kaum schreibt man was, sind inzwischen drei neue posts da.

natürlich an jeden max485 ein atmel, aber eben ein atmega, weil ich keine softserial nehmen will. die tinys haben das eben nur so.

sterntopologie heißt, von einer mitte je eine leitung zu jedem anderen atmel, das soll aber nicht so gut gehen. besser ist, eine reihe zu machen, in der alle hängen. siehe bild.

das viereck ist die decke, alles außerhalb geht an der wand runter...

gruß stefan

Danke für die Antwort Stefan

Das mit der zusätzlichen Leitung hatte ich mir auch überlegt, ist mir aber zu aufwendig bei der Verkabelung. Jetzt komme ich mit einem Cat. 6 Kabel aus (2xDaten hin, 2xDaten zurück, 2xGnd, 2x12V wegen teils sehr langen Leitungen).
Ausserdem gefallen mir solche "Zwangsdelays" nicht wirklich. Auch wenn von mir aus eine halbe Sekunde Verzögerung nicht wirklich lange ist, ich bin da ein ziemlicher Perfektionist.
Ich werde es wohl über Rückmeldungen für jedes gesendete Datenpaket lösen und bei Bedarf das Senden wiederholen. Bei den Wiederholungen kann ich dann Verzögerungen einfügen welche bei jedem Teilnehmer unterschiedlich sind und hoffen, dass dieser Fall nicht häufig eintritt.
Bei 32 Teilnehmern pro RS485 Segment und einer Steuerung für Licht, Jalousien, Heizung, Multimedia, Zutrittssystem und Alarmanlage wird aber einiges an Datenverkehr auf den Bus kommen...

nachtrag:

Wie meinst du das, hardwaremäßig? ein ATtiny85 für 90Cent wird da auch reichen.

warum einen tiny um 90 cent nehmen, wenn ein atmega um 1,40 das ganze besser kann. natürlich kann nun jemand sagen, das wäre mit kanonen auf spatzen geschossen, aber ich zahl' halt 50cent mehr dafür, daß der spatz sicher tot ist (das arme viecherl, ein blödes sprichwort).

gruß stefan

wow, geht wirklich flott heute.

die delays stören mich weniger, weil man ja priorisieren kann (der am taster für's licht wartet nur 5ms, also sendet immer zuerst. ein temperatursensor kann eine halbe sekunde warten, ohne daß man's merkt).
Dein daten hin, daten zurück versteh' ich nicht ganz. wenn Du eine sterntopologie einsetzt, gibt es kein daten zurück. bei RS485 rennt der verkehr in alle richtungen über ein aderpaar. nur eben die kollisionen mußt Du vermeiden.
wenn Du eine kette machst wie ich, verwendest Du ein manchmal weiteres paar, um "zurück" zu kommen.

aber Dein einwand, je ein paar für + und GND zu verwenden, ist berechtigt. mir fehlt irgendwie auch eine leitung.
wie wäre es (uwe :slight_smile: ), wenn man das "anti-kollisions-signal" über die schirmung laufen läßt? es ist ja gewährleistet, daß zu diesem zeitpunkt kein RS485-signal gesendet wird.

gruß stefan

Wäre es sinnvoll ein Atmega8 in eine UPDose als Busankoppler zu nutzen, der nur ein Signal senden soll ob ein oder aus?

Da wird nur ein PIN benötigt, OneButton Lib und schon kann man senden.
Was am Mega dann ankommt, soll auch durch Mega geschaltet werden.

hi, skorpi,

das versteh' ich jetzt nicht. ich will überall, wo auf der zeichnung sensor/aktor steht, einen atmega8 mit einem max485 nehmen.
(natürlich ist das auf der zeichnung oft knapp nebeneinander, da kann man auch zwei oder mehr sensoren/aktoren auf einen atmega hängen).

gruß stefan

Ich bin immer noch bei meinen tinys,
Wozu ein großes Atmega8 wenn man nur ein Pin braucht um den schaltzustand zu ändern?

Oder meinst du, in einem Zimmer den Busankoppler zu machen und im Zimmer nebenan keinen, sondern Kabel ziehen zum Atmega8?

hi, und frohe weihnachten übrigens.

inzwischen reden wir anscheinend schön aneinander vorbei. :slight_smile:

also für mich ist ein busankoppler ein atmel mit einem max485. ich hoffe, ich lieg' da nicht falsch.
nur daß ich statt eines tiny für den busankoppler einen atmega nehm', um das serial-signal nicht mit softserial machen zu müssen, sondern serial verwenden kann.

gruß stefan

Bei mir gehen die Kabel Sternförmig durch das ganze Haus und RS485 mag ja keine Sterntopologie. Deshalb brauche ich ein Daten hin und ein Daten zurück um alle Teilnehmer hintereinander zu haben.
Die Schirmung zu missbrauchen habe ich mir auch schon überlegt, aber da ich teilweise lange Strecken neben 230V Leitungen fahre, werde ich die Schirmung evtl. brauchen um eine störungsfreie Kommunikation zu gewährleisten.
Ein solches Bus Belegt Zeichen über RS485 wäre mir aber immer noch am liebsten.
In der Testumgebung schaffe ich es jetzt schon mit lediglich 4 Teilnehmern und ein paar Tastern einzelne Telegramme untergehen zu lassen wenn ich schnell hintereinander einiges schalte.
Nach jedem Schaltsignal wird bei mir auch eine Rückmeldungen vom angesprochenen Teilnehmer generiert welche ich für Funktionen wie Licht toggeln oder die Visualisierung auf dem Touchpanel brauche. Das verursacht natürlich einiges an Buslast.

Eisebaer:
also für mich ist ein busankoppler ein atmel mit einem max485. ich hoffe, ich lieg' da nicht falsch.
nur daß ich statt eines tiny für den busankoppler einen atmega nehm

Soweit alles richtig und verstanden.

Was ich aber nicht verstehe, wozu ein Panzer wenn eine Pistole reicht? Von der größer her.
Was ist an dem Software Serial "schlechter"?

EDIT: Frohe Weihnachten hab ich schon allen gewünscht :smiley:

Serenifly:
Hier sind mal die Pin-Nummern:
ATTiny with Arduino IDE – Renewable Energy Innovation
http://www.re-innovation.co.uk/web12/images/stories/reimages/blog/ATTiny/ATtiny44-84.png

Auf der Seite steht das:

In order to implement serial data on the ATTiny range of ICs, we must implement software serial (there is no in-built USART). This also means, to get the timing correct, we must run at 8MHz, so we must use the ATTiny45 @ 8MHz. Also, due to the slow clock speed, the fastest data transfer rate we can use is 4800 baud (we can use 1200, 2400 or 4800 baud).

k.A. ob eine Baud Rate von 4800 das Problem löst. Aber viele andere Beispiele verwenden das auch.

Was soll ich wo ändern? In den Sketchs ist doch kein Serial nötig?

oder ist das damit gemeint?

 rs485.begin (28800);

hi,

ha, noch einer.

Deshalb brauche ich ein Daten hin und ein Daten zurück um alle Teilnehmer hintereinander zu haben.

genau, aber nennen wir es ab jetzt lieber ein "daten hin" und ein "daten weiter" adernpaar, sonst gibt's mißverständnisse.
wenn man die schirmung als kolissions-vermeidungs-"kabel" nimmt, ist ja gewährleistet, daß zu dem zeitpunkt, wo es auf high ist, kein RS485er-signal gesendet wird.
aber, und diese diskussion ist fruchtbar, wäre es nicht feiner, an allen stellen serial auszuschalten, über die max das kolissions-vermeidungs-signal zu senden, und erst, wenn geklärt ist, wer senden darf (der, der das erste zweite high sendet), denjenigen dann auf serial send zu schalten und die anderen auf empfang?

gruß stefan

PS: ich will den spatzen tot wissen, und 50cent mehr pro busankoppler ist mir das wert. ich weiß, der spatz ist so und so tot, aber ich bin wie ich bin. :roll_eyes:

Dein Lösungsansatz gefällt mir!
Werde das mal versuchen in mein Protokoll zu integrieren.
Dadurch wird der Delay von Taster drücken bis Licht an zwar etwas grösser (bin da ein gebranntes Kind seit ich mal mit Digitalstrom arbeiten musste) aber ich hoffe, dass ich das auf ein erträgliches Mass (<200ms für Schalten inkl. Rückmeldung) bringen kann, egal welcher Lichttaster an theoretisch bis zu 31 Teilnehmern gedrückt wird.

someone83,
wie hast du den Busankoppler gebaut? Atmega oder ATtiny?
Wie verbunden und wo bleibt der Sketch :smiley:

Sorry für die Frechheit

Muss man da eigentlich noch irgendwas löten oder wars das mit den 2 Chips?
Abgesehen von den 120R beim letzten Busankoppler.