RS485 Nick Gammon

Ich versuche den Master und den Slave Sketch zu verstehen, da tuht sich aber nichts :smiley:

Kann mir da einer auf die sprünge helfen?
Da ist beim Master was von
// read potentiometer
byte level = analogRead (0) / 4;

Ist es nun der A0, der A4 oder von A0 bis A4?
Ich denke eher das letztere.
Warum ist es beim Master und nicht bei dem Slave in dem Sketch?
Und was hat es mit der const byte LED_PIN = 13; zu tun?

Es bezieht sich nur auf den AnalogEingang A0.
In eine Byte passt ja bekanntlich nur 0-255. Analogread gibt ein 10Bit Wert zurück (0-1024).
Hier wird einfach 1024/4 gibt halt den Wert 0-255 zurück. Es ist eine normale Division durch 4.
Die Ledpin 13 zeigt nur an ob die Message an den Slave gesendet wurde der den Wert Analog an einen Pin geschrieben hat und der Slave zurückmeldet.
Gruß
Der Dani

analogWrite (11, buf [2]); // set light level

Ok, Pin11 nimmt dann den Wert 4 an, der aus A0 gelesen wurde.
Was soll dann passieren?

Dann ist "das" Programm fertig und der Master wartet auf einen Wechsel des gelesenen Wertes.
Versuche das mal alles durchzuarbeiten und dann das ganze zu modifizieren das der Salve das rückwärts zum Master macht.
Gruß
Der Dani

Ohh man :drooling_face:

Hab erst mit ATtiny 84 und max485 probiert, habs aber mit verkabelung nicht hinbekommen, kein plan welcher Pin da genutzt werden muss. Oder ist es frei wählbar? Zumindest hats nicht funktioniert.

Hab nun 2 UNOs, Master hat das IO Shield und das andere das "fertige" RS485 Modul.
Die LED hab ich aber noch am ATtiny angeschlossen und mich gewundert warum es nicht leuchtet :smiley:

Also dieser Wert der von analogRead kommt ist ein PWM und kein HIGH oder LOW.
Deswegen war meine Frage, was wenn der Wert 4 ist und kein 0 oder 1.

Kannst du mir noch dieses hier auf Deutsch übersetzen?
Vom Slave

  byte buf [20];
  
  byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf) - 1);
  
  if (received)
    {
    if (buf [0] != 1)
      return;  // not my device
      
    if (buf [1] != 2)
      return;  // unknown command
    
    byte msg [] = {
       0,  // device 0 (master)
       3,  // turn light on command received
    };

Vom Master

  // read potentiometer
  byte level = analogRead (0) / 4;
  
  // no change? forget it
  if (level == old_level)
    return;
      
  // assemble message
  byte msg [] = { 
     1,    // device 1
     2,    // turn light on
     level // to what level
  };

Besonders mehr Mühe bei dem hier geben :smiley:

if (buf [0] != 1)

Wie und wo gib ich die Adresse vom vom Slave an?

Die Adresse ist das erste Byte des msg Arrays

Der Slave überprüft dann ob die empfangene Adresse ungleich seiner eigenen Adresse ist, und wenn ja macht er nichts

Jetzt nochmal den ATtiny84 angeschmissen, der Master erkennt den aber nicht.

SoftwareSerial rs485 (10, 9); // receive pin, transmit pin
const byte ENABLE_PIN = 8;

DI ist an PA1
DE7RE ist an PA2
RO ist an PA0

+5V und GND kommt vom Master

Hat der ATtiny84/85 überhaupt RX und TX?
Um in den Serial Monitor anzeigen zu können muss RX des USB-TTL mit D3,A3 des ATtiny85 verbunden werden.

Hab auch mit ATtiny85 getestet, egal welche PINs ich eingebe, der Master erkennt den Slave nicht.
Wenn ich aber als Slave ein Arduino UNO nehme, funktionierts.

Den ATtiny84 hab ich auch mit 16Mhz getestet.

hi,

ich nehme an, hier geht es um Dein haustechnik-projekt.
nachdem ich meines jetzt auch in angriff nehmen will, wollte ich einen artikel ins deutsche arduino-wiki stellen, kann es aber nicht mehr finden. ich bilde mir ein, das gab es mal, ich hab' sogar als test einen beitrag aufgemacht. jetzt isses weg oder ich bin zu blöd, es wiederzufinden. weiß jemand wo ....?

ich finde nur einen link in ein pmwiki, aber das ist ja nicht arduino/atmel-spezifisch.

gruß stefan

Genau, Haustechnik Projekt.
Vielleicht einer von den Links?
http://arduino-info.wikispaces.com/SoftwareSerialRS485Example

http://www.mikrocontroller.net/topic/93190

Ich hab aber noch ein anderes "Problem"
Würde gerne solche Klemmen einbauen:
http://www.voelkner.de/products/349339/PTSA-0-5-2-2-5-F-Leiterplattenklemme-Phoenix-Contact-1989748-Inhalt-250-St..html

Kennt jemand ne Alternative? Am besten ohne schrauben.

hi,

danke, ist interressant, aber ich find "unser" wiki nicht mehr.

sowas?

gruß stefan

Vielleicht wenn du "unser" Wiki etwas beschreibst, würde ich es finden, fals ich drüber gestolpert bin.

Nein, die kann man nicht auf eine Platine löten, wie die anderen.

hi,

ich hab' angenommen, das kann man bei denen. aber ich glaube, Du hast recht.

ich hab' mir vor ein paar tagen fünf sets von diesen gekauft, sind aber zum schrauben, das halt ich für die bessere verbindung:

gehe in suchmodus...

die sind zwar ein wenig seltsam, aber:

ingendwie bin ich mal über den playground in einem wiki innerhalb der arduino-domain gelandet, aber das scheint aufgelassen zu sein.

gruß stefan

Was für eine Platine willst du denn benutzen?
Die du bestellt hast und die anderen haben:
Pin Distance: 5mm/0.2''

Ich brauche 2,5mm wenn ich es richtig verstehe.
Sonst sehen die gut aus.

Hast du schon ein ATtiny und max485?
Kannst du zu dem Verbindungs Problem was beitragen?

Fals du den Thread noch nicht gelesen hast, bitteschön.
Er hat mehr Ahnung als er preisgibt :smiley:

Genaugenomen ist 0,1 Zoll 2,54mm :slight_smile:

wow 8)

Wenn du jetzt noch verraten könntest warum der Master den Slave nicht erkennt und wie man den ATtiny84 mit max485 verbindet, bekommst du ein +Karma :smiley:

skorpi08:
wow 8)

Wenn du jetzt noch verraten könntest warum der Master den Slave nicht erkennt und wie man den ATtiny84 mit max485 verbindet, bekommst du ein +Karma :smiley:

Bitte keine Erpressungen :wink: :wink: :wink: :wink: :wink:
Grüße Uwe

Was soll ich denn noch machen =(

Dat läuft einfach nicht

hi,

ja, das stimmt, aber die schreiben oft 5mm.

hab' mir bei ebay 50 max485 geholt, kostet nix, das zeug:

attiny möchte ich nicht verwenden, ich hab' lieber alles hardwaremäßig. und so ein atmega8 kostet 1,40.

das große problem, das ich sehe, ist, daß kein bus wirklich sterntopologien unterstützt. und bei haustechnik wäre das das beste.

ich möchte die wohnung in 3 bereiche aufteilen. in jedem bereich ein mega als zentrale, und zu jedem sensor oder aktor ein cat5-kabel. damit kann ich auf zwei adernpaaren RS485 hin- und wieder zurück, bzw. mit abkürzung zum nächsten sensor/aktor. damit habe ich die sterntopologie vermieden.
die drei bereiche werden über eine eigene rs485-verbindung zusammengehängt. die drei zentral-megas wären dann 1284er, die haben zwei serials. oder als alternative SPI<>CAN-bausteine, aber erstmal will ich's über serial versuchen.
über die CAT5-kabel kommt auch die stromversorgung für die sensoren/aktoren, entweder 12V oder 5V.

naja, so stellt der kleine eisebär sich das vor.

gruß stefan